
    )JfJ%                       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j        rddlmZmZ  ej        e          Ze	 G d d                      Z G d de          Z dS )    )annotationsN)contextmanager)	dataclass)HTTPException)BytesIOIOBase   )InvalidHeaderTimeoutError)BaseHTTPResponse)Retry   )EmscriptenRequest)BaseHTTPConnectionBaseHTTPSConnectionc                  8    e Zd ZU ded<   ded<   ded<   ded<   d	S )
EmscriptenResponseintstatus_codezdict[str, str]headerszIOBase | bytesbodyr   requestN)__name__
__module____qualname____annotations__     f/home/alex/cs2snipeproduction/venv/lib/python3.11/site-packages/urllib3/contrib/emscripten/response.pyr   r      sB         r   r   c                  4    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	 d0d1dZ	d2dZ
	 	 	 d3d4dZ	 	 d)d1d Zd5d!Zd5d"Zed6d#            Zd7d%Zd5d&Zed8d(            Z xZS )9EmscriptenHttpResponseWrapperNinternal_responser   url
str | None
connection/BaseHTTPConnection | BaseHTTPSConnection | Nonec                   d | _         d | _        || _        || _        || _        d| _        t                                          |j        |j	        |ddd           | 
                    | j        j        j                  | _        d| _        d S )NFr    T)r   statusrequest_urlversionreasondecode_content)_pool_body	_response_url_connection_closedsuper__init__r   r   _init_lengthr   methodlength_remaininglength_is_certain)selfr"   r#   r%   	__class__s       r   r5   z&EmscriptenHttpResponseWrapper.__init__   s     

*	%%-$0 	 	
 	
 	
 !% 1 1$.2H2O P P!&r   returnc                    | j         S Nr1   r:   s    r   r#   z!EmscriptenHttpResponseWrapper.url6   s
    yr   Nonec                    || _         d S r>   r?   )r:   r#   s     r   r#   z!EmscriptenHttpResponseWrapper.url:   s    			r   c                    | j         S r>   )r2   r@   s    r   r%   z(EmscriptenHttpResponseWrapper.connection>   s    r   Retry | Nonec                    | j         S r>   _retriesr@   s    r   retriesz%EmscriptenHttpResponseWrapper.retriesB   s
    }r   rH   c                    || _         d S r>   rF   )r:   rH   s     r   rH   z%EmscriptenHttpResponseWrapper.retriesF   s      r      amt
int | Noner-   bool | None#typing.Generator[bytes, None, None]c              #  J   K   	 |                      ||          }|r|V  ndS !)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.
        T)rK   r-   Nread)r:   rK   r-   datas       r   streamz$EmscriptenHttpResponseWrapper.streamK   s=      $	99^9DDD 



	r   request_methodc                t   | j                             d          }|t	 d |                    d          D             }t          |          dk    rt	          d|z            |                                }|dk     rd }n# t          $ r d }Y nw xY wd }| j        dv sd| j        cxk    rd	k     sn |d
k    rd}|S )Nzcontent-lengthc                ,    h | ]}t          |          S r   )r   ).0vals     r   	<setcomp>z=EmscriptenHttpResponseWrapper._init_length.<locals>.<setcomp>p   s    III3s88IIIr   ,r   z8Content-Length contained multiple unmatching values (%s)r   )   i0  d      HEAD)r   getsplitlenr
   pop
ValueErrorr)   )r:   rT   content_lengthlengthslengths        r   r6   z*EmscriptenHttpResponseWrapper._init_lengthe   s
   %)\%5%56F%G%G%" JI~/C/CC/H/HIIIw<<!##'13AB   ! A::!F	     F K:%%dk''''C''''''Fs   AA? ?BBFcache_contentboolbytesc                   | j         s7| j        0t          | j        j        t                    r| j        j        j        rdS |                                 5  t          | j        j        t                    sHt          | j        j                  | _        d| _	        t          | j        j                  | j        _        |d}| j        j                            |          }| j        *t          | j        t          |          z
  d          | _        | j	        r| j        dk    st          |          |k     r| j        j                                         t          j        t           |          cd d d            S | j        j                                        }|r|| _        | j        *t          | j        t          |          z
  d          | _        t          |          dk    s| j	        r)| j        dk    r| j        j                                         t          j        t           |          cd d d            S # 1 swxY w Y   d S )Nr   TFr   )r3   r0   
isinstancer   r   closed_error_catcherra   r8   r9   r   rQ   maxclosetypingcastri   r/   )r:   rK   r-   rg   rR   s        r   rQ   z"EmscriptenHttpResponseWrapper.read   s{    L	~%4>.77 &<@N<O<V & 3  "" 	0 	0dn16:: C(+DN,?(@(@%)-&&-dn.A&B&B# %~*//44(4,/0ED		0QST,U,UD)* 0t/D/I/IcO OO O N'--///{5$//%	0 	0 	0 	0 	0 	0 	0 	0( ~*//11  &!%DJ(4,/0ED		0QST,U,UD)t99>>* "/3/D/I/I N'--///{5$//=	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0s   DH;:B4H;;H?H?c              #  F   K   	 |                      ||          }|sd S |V  r>   rP   )r:   rK   r-   ri   s       r   read_chunkedz*EmscriptenHttpResponseWrapper.read_chunked   s9      	IIc>22E KKK		r   c                r    | j         r| j        sd S | j                             | j                   d | _        d S r>   )r.   r2   	_put_connr@   s    r   release_connz*EmscriptenHttpResponseWrapper.release_conn   sB    z 	!1 	4
T-...r   c                .    |                                   d S r>   )ro   r@   s    r   
drain_connz(EmscriptenHttpResponseWrapper.drain_conn   s    

r   c                J    | j         r| j         S |                     d          S )NT)rg   )r/   rQ   r@   s    r   rR   z"EmscriptenHttpResponseWrapper.data   s(    : 	1:9949000r   
typing.Anyc                ^    | j                             d          }t          j        |          S )a  
        Parses the body of the HTTP response as JSON.

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

        This method can raise either `UnicodeDecodeError` or `json.JSONDecodeError`.

        Read more :ref:`here <json>`.
        zutf-8)rR   decode_jsonloads)r:   rR   s     r   jsonz"EmscriptenHttpResponseWrapper.json   s)     y(({4   r   c                    | j         smt          | j        j        t                    r| j        j                                         | j        r | j                                         d | _        d| _         d S d S )NT)r3   rk   r0   r   r   ro   r2   r@   s    r   ro   z#EmscriptenHttpResponseWrapper.close   sw    | 	 $.-v66 ,#))+++ ( &&(((#' DLLL	  	 r   "typing.Generator[None, None, None]c              #    K   ddl m}m} d}	 dV  d}nM# |$ r!}t          t	          |                    d}~w|$ r!}t          t	          |                    d}~ww xY w	 |sdt          | j        j        t                    r/| j        j        j
        s| j        j                                         |                                  dS t          | j        j        t                    r'| j        j        j
        r|                                  dS dS dS # |sct          | j        j        t                    r/| j        j        j
        s| j        j                                         |                                  w t          | j        j        t                    r&| j        j        j
        r|                                  w w w xY 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)fetchr   r   r   strr   rk   r0   r   r   rl   ro   rv   )r:   r   r   
clean_exites        r   rm   z,EmscriptenHttpResponseWrapper._error_catcher   s      	87777777
	(EEE JJ 	' 	' 	's1vv&&& 	( 	( 	(A'''	(   ( t~2F;;0 N/60 N'--///!!#####
 t~2F;;(+2( %%'''''	( ( ( (  ( t~2F;;0 N/60 N'--///!!####
 t~2F;;(+2( %%''''	( (s/    D A6AAAD B-G )NN)r"   r   r#   r$   r%   r&   )r<   r$   )r#   r$   r<   rA   )r<   r&   )r<   rD   )rH   rD   r<   rA   )rJ   N)rK   rL   r-   rM   r<   rN   )rT   r$   r<   rL   )NNF)rK   rL   r-   rM   rg   rh   r<   ri   )r<   rA   )r<   ri   )r<   rz   )r<   r   )r   r   r   r5   propertyr#   setterr%   rH   rS   r6   rQ   rs   rv   rx   rR   r   ro   r   rm   __classcell__)r;   s   @r   r!   r!      s        FJ	' ' ' ' ' ' '.    X 	Z   Z       X     X ^      ^ 
 FJ    4# # # #N &*#	+0 +0 +0 +0 +0^ &*
 
 
 
 
           1 1 1 X1! ! ! !        )( )( )( ^)( )( )( )( )(r   r!   )!
__future__r   r   r}   loggingrp   
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      sz   " " " " " "       % % % % % % ! ! ! ! ! ! 6 6 6 6 6 6         5 5 5 5 5 5 5 5 ( ( ( ( ( (       & & & & & &	 LKKKKKKKKg!!        v( v( v( v( v($4 v( v( v( v( v(r   