Ë
    täi#%  ã                  ó  — d dl mZ d dlZd dlZd dlZd dlmZ d dlm	Z	 d dl
mZ d dlmZmZ ddlmZmZ dd	lmZ dd
lmZ ddlmZ ej0                  rddlmZmZ  ej8                  e«      Ze	 G d„ d«      «       Z G d„ de«      Z y)é    )ÚannotationsN)Úcontextmanager)Ú	dataclass)ÚHTTPException)ÚBytesIOÚIOBaseé   )ÚInvalidHeaderÚTimeoutError)ÚBaseHTTPResponse)ÚRetryé   )ÚEmscriptenRequest)ÚBaseHTTPConnectionÚBaseHTTPSConnectionc                  ó6   — e Zd ZU ded<   ded<   ded<   ded<   y	)
ÚEmscriptenResponseÚintÚstatus_codezdict[str, str]ÚheaderszIOBase | bytesÚbodyr   ÚrequestN)Ú__name__Ú
__module__Ú__qualname__Ú__annotations__© ó    úr/Volumes/fast/ai/experiments/MLX_z-image/.venv/lib/python3.12/site-packages/urllib3/contrib/emscripten/response.pyr   r      s   … àÓØÓØ
ÓØÔr   r   c                  óJ  ‡ — e Zd Z	 	 d	 	 	 	 	 dˆ fd„Zedd„«       Zej                  dd„«       Zedd„«       Zedd„«       Zej                  dd„«       Z	 d	 	 	 	 	 dd„Z	dd„Z
	 	 	 d	 	 	 	 	 	 	 dd	„Z	 	 d	 	 	 	 	 dd
„Zdd„Zdd„Zedd„«       Zdd„Zdd„Zed d„«       Zˆ xZS )!ÚEmscriptenHttpResponseWrapperc           	     ó$  •— d | _         d | _        || _        || _        || _        d| _        t        ‰| �  |j                  |j                  |dddd¬«       | j                  | j                  j                  j                  «      | _        d| _        y )NFr   zHTTP/?Ú T)r   ÚstatusÚrequest_urlÚversionÚversion_stringÚreasonÚdecode_content)Ú_poolÚ_bodyÚ	_responseÚ_urlÚ_connectionÚ_closedÚsuperÚ__init__r   r   Ú_init_lengthr   ÚmethodÚlength_remainingÚlength_is_certain)ÚselfÚinternal_responseÚurlÚ
connectionÚ	__class__s       €r   r1   z&EmscriptenHttpResponseWrapper.__init__   s�   ø€ ð ˆŒ
ØˆŒ
Ø*ˆŒØˆŒ	Ø%ˆÔØˆŒÜ‰ÑØ%×-Ñ-Ø$×0Ñ0ØØØ#ØØð 	ô 	
ð !%× 1Ñ 1°$·.±.×2HÑ2H×2OÑ2OÓ PˆÔØ!&ˆÕr   c                ó   — | j                   S ©N©r-   ©r6   s    r   r8   z!EmscriptenHttpResponseWrapper.url7   s   € à�y‰yÐr   c                ó   — || _         y r<   r=   )r6   r8   s     r   r8   z!EmscriptenHttpResponseWrapper.url;   s	   € àˆ�	r   c                ó   — | j                   S r<   )r.   r>   s    r   r9   z(EmscriptenHttpResponseWrapper.connection?   s   € à×ÑÐr   c                ó   — | j                   S r<   ©Ú_retriesr>   s    r   Úretriesz%EmscriptenHttpResponseWrapper.retriesC   s   € à�}‰}Ðr   c                ó   — || _         y r<   rB   )r6   rD   s     r   rD   z%EmscriptenHttpResponseWrapper.retriesG   s   € ð  ˆ�r   c              #  óD   K  — 	 | j                  ||¬«      }|r|–— nyŒ­w)a_  
        A generator wrapper for the read() method. A call will block until
        ``amt`` bytes have been read from the connection or until the
        connection is closed.

        :param amt:
            How much of the content to read. The generator will return up to
            much data per iteration, but may return less. This is particularly
            likely when using compressed data. However, the empty string will
            never be returned.

        :param decode_content:
            If True, will attempt to decode the body based on the
            'content-encoding' header.
        )Úamtr)   N©Úread)r6   rG   r)   Údatas       r   Ústreamz$EmscriptenHttpResponseWrapper.streamL   s-   è ø€ ð$ Ø—9‘9 °^�9ÓDˆDáØ“
àð ùs   ‚ c                ó€  — | j                   j                  d«      }|�\	 |j                  d«      D �ch c]  }t        |«      ’Œ }}t	        |«      dkD  rt        d|z  «      ‚|j                  «       }|dk  rd }nd }| j                  dv sd| j                  cxk  rdk  sn |d	k(  rd}|S c c}w # t        $ r d }Y Œ@w xY w)
Nzcontent-lengthÚ,r   z8Content-Length contained multiple unmatching values (%s)r   )éÌ   i0  éd   éÈ   ÚHEAD)	r   ÚgetÚsplitr   Úlenr
   ÚpopÚ
ValueErrorr$   )r6   Úrequest_methodÚcontent_lengthÚvalÚlengthsÚlengths         r   r2   z*EmscriptenHttpResponseWrapper._init_lengthf   sß   € à%)§\¡\×%5Ñ%5Ð6FÓ%GˆàÐ%ð"ð 0>×/CÑ/CÀCÔ/HÓIÑ/H¨œ3˜s�8Ð/H�ÐIÜ�w“< !Ò#Ü'ð1Ø3AñBóð ð !Ÿ™›�ð ˜A’:Ø!‘Fð ˆFð �K‰K˜:Ñ%Ø�d—k‘kÔ' CÔ'Ø Ò'àˆFàˆùò1 Jøô ò Ø’ðús"   ŸB/ ²B*Á.B/ Â*B/ Â/B=Â<B=c                óî  — | j                   sP| j                  �Dt        | j                  j                  t        «      r!| j                  j                  j
                  ry| j                  «       5  t        | j                  j                  t        «      sYt        | j                  j                  «      | _        d| _	        t        | j                  j                  «      | j                  _        |�-|dk\  r(d}| j                  j                  j                  |«      }n-| j                  j                  j                  «       }|r|| _        | j                  �'t        | j                  t        |«      z
  d«      | _        t        |«      dk(  s| j                  r3| j                  dk(  r$| j                  j                  j                  «        t        j                   t"        |«      cd d d «       S # 1 sw Y   y xY w)Nr   Tr   F)r/   r,   Ú
isinstancer   r   ÚclosedÚ_error_catcherrT   r4   r5   r   rI   r+   ÚmaxÚcloseÚtypingÚcastÚbytes)r6   rG   r)   Úcache_contentrJ   s        r   rI   z"EmscriptenHttpResponseWrapper.read‹   sa  € ð �LŠLØ�~‰~Ð%Ü˜4Ÿ>™>×.Ñ.´Ô7¸D¿N¹N×<OÑ<O×<VÒ<Vàà× Ñ Õ"ä˜dŸn™n×1Ñ1´6Ô:Ü(+¨D¯N©N×,?Ñ,?Ó(@�Ô%Ø)-�Ô&ä&-¨d¯n©n×.AÑ.AÓ&B�—‘Ô#Øˆ 3¨!¢8à %�Ø—~‘~×*Ñ*×/Ñ/°Ó4‘à—~‘~×*Ñ*×/Ñ/Ó1�Ù Ø!%�D”JØ×$Ñ$Ð0Ü(+¨D×,AÑ,AÄCÈÃIÑ,MÈqÓ(Q�Ô%Ü�4‹y˜AŠ~Ø×&Ò&¨4×+@Ñ+@ÀAÒ+Eð —‘×#Ñ#×)Ñ)Ô+Ü—;‘;œu dÓ+÷- #×"Ò"ús   Á.E3G+Ç+G4c              #  ó@   K  — 	 | j                  ||«      }|sy |–— Œ­wr<   rH   )r6   rG   r)   rd   s       r   Úread_chunkedz*EmscriptenHttpResponseWrapper.read_chunked°   s+   è ø€ ð Ø—I‘I˜c >Ó2ˆEÙØØŠKð	 ùs   ‚c                óŽ   — | j                   r| j                  sy | j                   j                  | j                  «       d | _        y r<   )r*   r.   Ú	_put_connr>   s    r   Úrelease_connz*EmscriptenHttpResponseWrapper.release_conn¼   s4   € Ø�zŠz ×!1Ò!1Øà�
‰
×Ñ˜T×-Ñ-Ô.ØˆÕr   c                ó$   — | j                  «        y r<   )ra   r>   s    r   Ú
drain_connz(EmscriptenHttpResponseWrapper.drain_connÃ   s   € Ø�
‰
�r   c                óV   — | j                   r| j                   S | j                  d¬«      S )NT)re   )r+   rI   r>   s    r   rJ   z"EmscriptenHttpResponseWrapper.dataÆ   s$   € à�:Š:Ø—:‘:Ðà—9‘9¨4�9Ó0Ð0r   c                ób   — | j                   j                  d«      }t        j                  |«      S )aÄ  
        Deserializes the body of the HTTP response as a Python object.

        The body of the HTTP response must be encoded using UTF-8, as per
        `RFC 8529 Section 8.1 <https://www.rfc-editor.org/rfc/rfc8259#section-8.1>`_.

        To use a custom JSON decoder pass the result of :attr:`HTTPResponse.data` to
        your custom decoder instead.

        If the body of the HTTP response is not decodable to UTF-8, a
        `UnicodeDecodeError` will be raised. If the body of the HTTP response is not a
        valid JSON document, a `json.JSONDecodeError` will be raised.

        Read more :ref:`here <json_content>`.

        :returns: The body of the HTTP response as a Python object.
        zutf-8)rJ   ÚdecodeÚ_jsonÚloads)r6   rJ   s     r   Újsonz"EmscriptenHttpResponseWrapper.jsonÍ   s'   € ð$ �y‰y×Ñ Ó(ˆÜ�{‰{˜4Ó Ð r   c                ó  — | j                   s}t        | j                  j                  t        «      r$| j                  j                  j                  «        | j                  r!| j                  j                  «        d | _        d| _         y y )NT)r/   r]   r,   r   r   ra   r.   r>   s    r   ra   z#EmscriptenHttpResponseWrapper.closeâ   sb   € Ø�|Š|Ü˜$Ÿ.™.×-Ñ-¬vÔ6Ø—‘×#Ñ#×)Ñ)Ô+Ø×ÒØ× Ñ ×&Ñ&Ô(Ø#'�Ô ØˆD�Lð r   c              #  óø  K  — ddl m}m} d}	 d–— d}	 |syt        | j                  j                  t        «      rD| j                  j                  j                  s$| j                  j                  j                  «        | j                  «        yt        | j                  j                  t        «      r2| j                  j                  j                  r| j                  «        yyy# |$ r}t        t	        |«      «      ‚d}~w|$ r}t        t	        |«      «      ‚d}~ww xY w# |syt        | j                  j                  t        «      rD| j                  j                  j                  s$| j                  j                  j                  «        | j                  «        w t        | j                  j                  t        «      r2| j                  j                  j                  r| j                  «        w w w xY w­w)zý
        Catch Emscripten specific exceptions thrown by fetch.py,
        instead re-raising urllib3 variants, so that low-level exceptions
        are not leaked in the high-level api.

        On exit, release the connection back to the pool.
        r   )Ú_RequestErrorÚ_TimeoutErrorFNT)Úfetchru   rv   r   Ústrr   r]   r,   r   r   r^   ra   rj   )r6   ru   rv   Ú
clean_exitÚes        r   r_   z,EmscriptenHttpResponseWrapper._error_catcherë   sv  è ø€ ÷ 	8àˆ
ð	(Ûð ‰Jñ ô ˜tŸ~™~×2Ñ2´FÔ;Ø ŸN™N×/Ñ/×6Ò6à—N‘N×'Ñ'×-Ñ-Ô/à×!Ñ!Õ#ô
 ˜tŸ~™~×2Ñ2´FÔ;ØŸ™×+Ñ+×2Ò2à×%Ñ%Õ'ð 3ð <øð+ ò 	'Üœs 1›vÓ&Ð&ûØò 	(Ü¤ A£Ó'Ð'ûð	(ûñ
 ô ˜tŸ~™~×2Ñ2´FÔ;Ø ŸN™N×/Ñ/×6Ò6à—N‘N×'Ñ'×-Ñ-Ô/à×!Ñ!Õ#ô
 ˜tŸ~™~×2Ñ2´FÔ;ØŸ™×+Ñ+×2Ò2à×%Ñ%Õ'ð 3ð <üsA   ‚G:ŽC' •CG:Ã'D!Ã,D Ä D!ÄDÄD!Ä!D$ Ä$CG7Ç7G:)NN)r7   r   r8   ú
str | Noner9   ú/BaseHTTPConnection | BaseHTTPSConnection | None)Úreturnr{   )r8   r{   r}   ÚNone)r}   r|   )r}   úRetry | None)rD   r   r}   r~   )i   N)rG   ú
int | Noner)   úbool | Noner}   ztyping.Generator[bytes])rW   r{   r}   r€   )NNF)rG   r€   r)   r�   re   Úboolr}   rd   )r}   r~   )r}   rd   )r}   z
typing.Any)r}   ztyping.Generator[None])r   r   r   r1   Úpropertyr8   Úsetterr9   rD   rK   r2   rI   rg   rj   rl   rJ   rr   ra   r   r_   Ú__classcell__)r:   s   @r   r!   r!      s_  ø„ ð ØFJð	'à-ð'ð ð'ð Dõ	'ð0 òó ðð 	‡Z�Zòó ðð ò ó ð ð òó ðð ‡^�^ò ó ð ð
 FJðØðØ7Bðà	 óó4#ðN Ø&*Ø#ð	#,àð#,ð $ð#,ð ð	#,ð
 
ó#,ðN Ø&*ð
àð
ð $ð
ð 
!ó	
ó óð ò1ó ð1ó!ó* ð ò)(ó ô)(r   r!   )!Ú
__future__r   rr   rp   Úloggingrb   Ú
contextlibr   Údataclassesr   Úhttp.clientr   Úior   r   Ú
exceptionsr
   r   Úresponser   Ú
util.retryr   r   r   ÚTYPE_CHECKINGÚ_base_connectionr   r   Ú	getLoggerr   Úlogr   r!   r   r   r   Ú<module>r“      so   ðÝ "ã Û Û Ý %Ý !Ý 6ß ç 5Ý (Ý Ý &à	×ÒßKà€g×Ñ˜Ó!€ð ÷ð ó ðôw(Ð$4õ w(r   