ó
    |ch%  ã                   ó  • S r SSKrSSKrSSKJr  SSKJr  SSKJr  SSK	J
r
  SSK	Jr  SSK	Jr  SS	KJr  SS
KJr  SSKJr  SSKJr  SSKJr   " S S5      r " S S5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      rg)zÅ
Parsers are used to parse the content of incoming HTTP requests.

They give us a generic way of being able to handle various media types
on the request, such as form content or json encoded data.
é    N)Úsettings)ÚStopFutureHandlers)Ú	QueryDict)Ú	ChunkIter)ÚMultiPartParser)ÚMultiPartParserError)Úparse_header_parameters)Ú	renderers)Ú
ParseError)Úapi_settings)Újsonc                   ó   • \ rS rSrS rSrg)ÚDataAndFilesé   c                 ó   • Xl         X l        g )N©ÚdataÚfiles)Úselfr   r   s      Ú_/var/www/djangovue.mamus.xyz/django/venv/lib/python3.13/site-packages/rest_framework/parsers.pyÚ__init__ÚDataAndFiles.__init__   s   € ØŒ	Ø�
ó    r   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   Ú__static_attributes__© r   r   r   r      s   † õr   r   c                   ó&   • \ rS rSrSrSrSS jrSrg)Ú
BaseParseré    zt
All parsers should extend `BaseParser`, specifying a `media_type`
attribute, and overriding the `.parse()` method.
Nc                 ó   • [        S5      e)zŸ
Given a stream to read from, return the parsed representation.
Should return parsed data, or a `DataAndFiles` object consisting of the
parsed data and files.
z.parse() must be overridden.)ÚNotImplementedError)r   ÚstreamÚ
media_typeÚparser_contexts       r   ÚparseÚBaseParser.parse'   s   € ô "Ð"@ÓAÐAr   r   ©NN©r   r   r   r   Ú__doc__r&   r(   r   r   r   r   r!   r!       s   † ñð €J÷Br   r!   c                   óV   • \ rS rSrSrSr\R                  r\	R                  rSS jrSrg)Ú
JSONParseré0   z
Parses JSON-serialized data.
zapplication/jsonNc                 óR  • U=(       d    0 nUR                  S[        R                  5      n [        R                  " U5      " U5      nU R
                  (       a  [        R                  OSn[        R                  " XVS9$ ! [         a  n[        S[        U5      -  5      eSnAff = f)zH
Parses the incoming bytestream as JSON and returns the resulting data.
ÚencodingN)Úparse_constantzJSON parse error - %s)Úgetr   ÚDEFAULT_CHARSETÚcodecsÚ	getreaderÚstrictr   Ústrict_constantÚloadÚ
ValueErrorr   Ústr)r   r%   r&   r'   r1   Údecoded_streamr2   Úexcs           r   r(   ÚJSONParser.parse8   sŠ   € ð (×-¨2ˆØ!×%Ñ% j´(×2JÑ2JÓKˆð	AÜ#×-Ò-¨hÔ7¸Ó?ˆNØ59·[·[œT×1Ò1ÀdˆNÜ—9’9˜^ÑKÐKøÜó 	AÜÐ4´s¸3³xÑ?Ó@Ð@ûð	Aús   ­AB  Â 
B&Â
B!Â!B&r   r*   )r   r   r   r   r,   r&   r
   ÚJSONRendererÚrenderer_classr   ÚSTRICT_JSONr7   r(   r   r   r   r   r.   r.   0   s*   † ñð $€JØ×+Ñ+€NØ×%Ñ%€F÷Ar   r.   c                   ó&   • \ rS rSrSrSrSS jrSrg)Ú
FormParseréG   z
Parser for form data.
z!application/x-www-form-urlencodedNc                 óˆ   • U=(       d    0 nUR                  S[        R                  5      n[        UR	                  5       US9$ )z\
Parses the incoming bytestream as a URL encoded form,
and returns the resulting QueryDict.
r1   )r1   )r3   r   r4   r   Úread)r   r%   r&   r'   r1   s        r   r(   ÚFormParser.parseM   s9   € ð
 (×-¨2ˆØ!×%Ñ% j´(×2JÑ2JÓKˆÜ˜Ÿ™›°Ñ:Ð:r   r   r*   r+   r   r   r   rC   rC   G   s   † ñð 5€J÷;r   rC   c                   ó&   • \ rS rSrSrSrSS jrSrg)r   éW   z>
Parser for multipart form data, which may include file data.
zmultipart/form-dataNc                 ó\  • U=(       d    0 nUS   nUR                  S[        R                  5      nUR                  R	                  5       nX&S'   UR
                  n [        XaXu5      nUR                  5       u  pš[        Xš5      $ ! [         a  n[        S[        U5      -  5      eSnAff = f)zá
Parses the incoming bytestream as a multipart encoded form,
and returns a DataAndFiles object.

`.data` will be a `QueryDict` containing all the form parameters.
`.files` will be a `QueryDict` containing all the form files.
Úrequestr1   ÚCONTENT_TYPEzMultipart form parse error - %sN)r3   r   r4   ÚMETAÚcopyÚupload_handlersÚDjangoMultiPartParserr(   r   r   r   r;   )r   r%   r&   r'   rK   r1   ÚmetarO   Úparserr   r   r=   s               r   r(   ÚMultiPartParser.parse]   s¦   € ð (×-¨2ˆØ  Ñ+ˆØ!×%Ñ% j´(×2JÑ2JÓKˆØ�|‰|× Ñ Ó"ˆØ)ˆ^ÑØ!×1Ñ1ˆð	KÜ*¨4¸ÓSˆFØ Ÿ,™,›.‰KˆDÜ Ó,Ð,øÜ#ó 	KÜÐ>ÄÀSÃÑIÓJÐJûð	Kús   Á(B Â
B+ÂB&Â&B+r   r*   r+   r   r   r   r   r   W   s   † ñð '€J÷Kr   r   c                   ó6   • \ rS rSrSrSrSSS.rSS jrS	 rS
r	g)ÚFileUploadParserét   z
Parser for file upload data.
z*/*zFFileUpload parse error - none of upload handlers can handle the streamz`Missing filename. Request should include a Content-Disposition header with a filename parameter.)Ú	unhandledÚno_filenameNc           	      ó²  • U=(       d    0 nUS   nUR                  S[        R                  5      nUR                  nUR                  nU R                  XU5      nU(       d  [        U R                  S   5      eUR                  SUR                  SS5      5      n	 [        UR                  SUR                  SS	5      5      5      n
U H.  nUR                  UUU
S
U5      nUc  M  [        0 SUS   05      s  $    U Vs/ s H!  oÝR                  (       d  M  UR                  PM#     nn[        S/U-   5      n[        X5      nS	/[!        U5      -  n[#        U5       H  u  nn UR%                  S
X‰X¥5        M     U HK  n[#        U5       H9  u  nn[!        U5      nUR)                  UUU   5      nUU==   U-  ss'   Ub  M8    MI     MM     [#        U5       H-  u  nnUR+                  UU   5      nUc  M  [        0 SU05      s  $    [        U R                  S   5      e! [        [        4 a    S
n
 GNnf = fs  snf ! [&         a    US
US-    n   MÙ  f = f)zÝ
Treats the incoming bytestream as a raw file upload and returns
a `DataAndFiles` object.

`.data` will be None (we expect request body to be a file content).
`.files` will be a `QueryDict` containing one 'file' element.
rK   r1   rX   ÚHTTP_CONTENT_TYPErL   Ú ÚHTTP_CONTENT_LENGTHÚCONTENT_LENGTHr   NÚfileé   iüÿÿrW   )r3   r   r4   rM   rO   Úget_filenamer   ÚerrorsÚintr:   Ú	TypeErrorÚhandle_raw_inputr   Ú
chunk_sizeÚminr   ÚlenÚ	enumerateÚnew_filer   Úreceive_data_chunkÚfile_complete)r   r%   r&   r'   rK   r1   rQ   rO   ÚfilenameÚcontent_typeÚcontent_lengthÚhandlerÚresultÚxÚpossible_sizesre   ÚchunksÚcountersÚindexÚchunkÚchunk_lengthÚfile_objs                         r   r(   ÚFileUploadParser.parse~   sn  € ð (×-¨2ˆØ  Ñ+ˆØ!×%Ñ% j´(×2JÑ2JÓKˆØ�|‰|ˆØ!×1Ñ1ˆØ×$Ñ$ V¸ÓHˆæÜ˜TŸ[™[¨Ñ7Ó8Ð8ð —x‘xÐ 3Ø $§¡¨¸Ó <ó>ˆð	"Ü  §¡Ð*?Ø*.¯(©(Ð3CÀQÓ*Gó"Ió JˆNó 'ˆGØ×-Ñ-¨fØ.2Ø.<Ø.2Ø.6ó	8ˆFð
 Ó!Ü# B¨°¸±Ð(;Ó<Ò<ñ 'ñ 1@ÓP²¨1Ç<Å<›,˜!Ÿ,œ,±ˆÐPÜ˜+˜¨Ñ7Ó8ˆ
Ü˜6Ó.ˆØ�3œ˜_Ó-Ñ-ˆä'¨Ö8‰NˆE�7ðØ× Ñ   xØ!/ö;ñ 9ó ˆEÜ"+¨OÖ"<‘��wÜ" 5›z�Ø×2Ñ2°5¸(À5¹/ÓJ�Ø˜“ <Ñ/“Ø“=Úó #=ñ ô (¨Ö8‰NˆE�7Ø×,Ñ,¨X°e©_Ó=ˆHØÓ#Ü# B¨°Ð(:Ó;Ò;ñ 9ô
 ˜Ÿ™ [Ñ1Ó2Ð2øôQ œIÐ&ó 	"Ø!‹Nð	"üò Qøô &ó Ø"1°*°5¸1±9Ð"=�Ûðús0   Â+H! Ä H:ÄH:Å%H?È!H7È6H7È?IÉIc                 ój  • [         R                  " [        5         US   S   sSSS5        $ ! , (       d  f       O= f[         R                  " [        [        [        5         US   R
                  n[        US   5      u  pVSU;   a  US   sSSS5        $ US   sSSS5        $ ! , (       d  f       g= f)zx
Detects the uploaded file name. First searches a 'filename' url kwarg.
Then tries to parse Content-Disposition header.
Úkwargsrl   NrK   ÚHTTP_CONTENT_DISPOSITIONz	filename*)Ú
contextlibÚsuppressÚKeyErrorÚAttributeErrorr:   rM   r	   )r   r%   r&   r'   rQ   ÚdispositionÚparamss          r   r`   ÚFileUploadParser.get_filenameÁ   s’   € ô
 × Ò ¤Õ*Ø! (Ñ+¨JÑ7÷ +×*×*úô × Ò ¤´¼:ÕFØ! )Ñ,×1Ñ1ˆDÜ"9¸$Ð?YÑ:ZÓ"[ÑˆKØ˜fÓ$Ø˜kÑ*÷	 GÑFð
 ˜*Ñ%÷ G×F×Fús   ›-­
;Á"*B$ÂB$Â$
B2r   r*   )
r   r   r   r   r,   r&   ra   r(   r`   r   r   r   r   rU   rU   t   s'   † ñð €Jà]Øyñ€Fô
A3õF&r   rU   )r,   r5   r}   Údjango.confr   Údjango.core.files.uploadhandlerr   Údjango.httpr   Údjango.http.multipartparserr   r   rP   r   Údjango.utils.httpr	   Úrest_frameworkr
   Úrest_framework.exceptionsr   Úrest_framework.settingsr   Úrest_framework.utilsr   r   r!   r.   rC   rU   r   r   r   Ú<module>r�      s�   ðñó Û å  Ý >Ý !Ý 1õ-å <Ý 5å $Ý 0Ý 0Ý %÷ñ ÷Bñ Bô A�ô Aô.;�ô ;ô K�jô Kô:Z&�zõ Z&r   