a
    }3e9~                     @   s  d dl Z d dlZd dlZd dl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mZmZmZmZmZmZmZmZmZmZmZmZmZ d dlmZmZmZ d dlmZm Z m!Z! ddl"m#Z#m$Z$m%Z%m&Z&m'Z' dd	l(m)Z)m*Z*m+Z+m,Z, dd
l-m.Z. ddl/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6 ddl7m8Z8 dZ9er>ddl:m;Z; G dd de<Z=G dd de<Z>ee? eee? ee?e?f f dddZ@d'ee?e?f e?ee? dddZAG dd dZBG dd dZCe6eCe2jDdG dd  d e3ZEG d!d" d"ZFee3e?e?f ZGG d#d$ d$e3ZHG d%d& d&ZIdS )(    N)deque)TracebackType)TYPE_CHECKINGAnyAsyncIteratorDequeDictIteratorListMappingOptionalSequenceTupleTypeUnioncast)	parse_qslunquote	urlencode)CIMultiDictCIMultiDictProxyMultiMapping   )CONTENT_DISPOSITIONCONTENT_ENCODINGCONTENT_LENGTHCONTENT_TRANSFER_ENCODINGCONTENT_TYPE)CHARTOKENparse_mimetypereify)HeadersParser)JsonPayloadLookupErrorOrderPayloadStringPayloadget_payloadpayload_type)StreamReader)MultipartReaderMultipartWriterBodyPartReaderBadContentDispositionHeaderBadContentDispositionParamparse_content_dispositioncontent_disposition_filename)ClientResponsec                   @   s   e Zd ZdS )r.   N__name__
__module____qualname__ r7   r7   D/home/pi/bot/my_env/lib/python3.9/site-packages/aiohttp/multipart.pyr.   A   s   r.   c                   @   s   e Zd ZdS )r/   Nr3   r7   r7   r7   r8   r/   E   s   r/   )headerreturnc                    s  t tddd t tddd}t td fdd}t tddd	}t tdd
d}dttjtdt t t ddd}| sd i fS | d^}} |st	t
|  d i fS i }|r|d}	d|	vrt	t
|  d i fS |	dd\}
}|
  }
| }|
|v r(t	t
|  d i fS  |
sFt	t|	 qn\||
r||rl||dd }n |st	t|	 qn||
r||r|dd\}}}|pd}nt	t|	 qzt||d}W n& ty   t	t|	 Y qY n0 nd}||r0d}||dd d}nV |r@d}nF|r| d|d  }||r|d ||dd d}d}|rt	t
|  d i fS |||
< q| |fS )N)stringr:   c                 S   s   t | ott| kS N)boolr   setr;   r7   r7   r8   is_tokenL   s    z+parse_content_disposition.<locals>.is_tokenc                 S   s    | d | d   kodkS   S )Nr   "r7   r?   r7   r7   r8   	is_quotedO   s    z,parse_content_disposition.<locals>.is_quotedc                    s    | o|  ddkS )N'   )countr?   r@   r7   r8   
is_rfc5987R   s    z-parse_content_disposition.<locals>.is_rfc5987c                 S   s
   |  dS )N*)endswithr?   r7   r7   r8   is_extended_paramU   s    z4parse_content_disposition.<locals>.is_extended_paramc                 S   s@   |  dd }|sdS | dr,| |d n
| |d  }| S )NrI   r   FrA   )findrJ   isdigit)r;   posZ	substringr7   r7   r8   is_continuous_paramX   s
    "z6parse_content_disposition.<locals>.is_continuous_param )chars)textrQ   r:   c                S   s   t d| dd| S )Nz\\([z])z\1)resub)rR   rQ   r7   r7   r8   unescape_   s    z+parse_content_disposition.<locals>.unescape;r   =r   rA   rD   rE   utf-8strictTFz\/)strr=   joinmaprS   escaper   splitwarningswarnr.   poplowerstriplstripr/   r   UnicodeDecodeError)r9   rC   rH   rK   rO   rU   Zdisptypepartsparamsitemkeyvalueencoding_failed_valuer7   rG   r8   r0   I   sz    &












r0   filename)rg   namer:   c           
         s   d|  | sd S  | v r |   S || v r0| | S g }t  fdd|  D }t|D ]N\}\}}|dd\}}|dr|d d }|t|kr|| qV qqV|sd S d|}d|v r|dd	\}	}}|	pd
}	t||	dS |S d S )Nz%s*c                 3   s$   | ]\}}|  r||fV  qd S r<   )
startswith).0ri   rj   Zname_sufr7   r8   	<genexpr>   s   z/content_disposition_filename.<locals>.<genexpr>rI   r   rA   rP   rD   rE   rX   rY   )	sorteditems	enumerater^   rJ   rZ   appendr[   r   )
rg   rp   rf   Zfnparamsnumri   rj   rl   tailrk   r7   rs   r8   r1      s4    

r1   c                   @   st   e Zd ZdZddddddZd dd	d
Zed dddZedddZ	e
ed  dddZddddZdS )MultipartResponseWrapperzzWrapper around the MultipartReader.

    It takes care about
    underlying connection and close it when it needs in.
    r2   r+   N)respstreamr:   c                 C   s   || _ || _d S r<   )r|   r}   )selfr|   r}   r7   r7   r8   __init__   s    z!MultipartResponseWrapper.__init__r:   c                 C   s   | S r<   r7   r~   r7   r7   r8   	__aiter__   s    z"MultipartResponseWrapper.__aiter__)r+   r-   c                    s   |   I d H }|d u rt|S r<   nextStopAsyncIterationr~   partr7   r7   r8   	__anext__   s    z"MultipartResponseWrapper.__anext__c                 C   s   | j j S )z2Returns True when all response data had been read.)r|   contentat_eofr   r7   r7   r8   r      s    zMultipartResponseWrapper.at_eofc                    s,   | j  I dH }| j  r(|  I dH  |S )z#Emits next multipart reader object.N)r}   r   r   releaser~   rh   r7   r7   r8   r      s    
zMultipartResponseWrapper.nextc                    s   | j  I dH  dS )z_Release the connection gracefully.

        All remaining content is read to the void.
        N)r|   r   r   r7   r7   r8   r      s    z MultipartResponseWrapper.release)r4   r5   r6   __doc__r   r   r   r   r=   r   r   r   r   r7   r7   r7   r8   r{      s   
	r{   c                   @   s  e Zd ZdZdZededdddZed  dd	d
Z	edddZ
ee dddZddeedddZefeedddZeedddZeedddZedddZddddZddee ed d!d"Zddee eeeef  d d#d$Zddee eeeef  d d%d&Zedd'd(Zeed)d*d+Zeed)d,d-Zeed)d.d/Z eed0d1d2Z!e"ee dd3d4Z#e"ee dd5d6Z$dS )7r-   z&Multipart reader for single body part.i    CIMultiDictProxy[str]N)boundaryheadersr   r:   c                 C   s`   || _ || _|| _d| _| j td }|d ur6t|nd | _d| _t	 | _
d | _d| _i | _d S )NFr   )r   	_boundary_content_at_eofgetr   int_length_read_bytesr   _unread_prev_chunk_content_eof_cache)r~   r   r   r   lengthr7   r7   r8   r     s    zBodyPartReader.__init__r   c                 C   s   | S r<   r7   r   r7   r7   r8   r     s    zBodyPartReader.__aiter__c                    s   |   I d H }|d u rt|S r<   r   r   r7   r7   r8   r     s    zBodyPartReader.__anext__c                    s   |   I d H }|sd S |S r<   )readr   r7   r7   r8   r     s    zBodyPartReader.nextFdecode)r   r:   c                   sB   | j r
dS t }| j s0|| | jI dH  q|r>| |S |S )zReads body part data.

        decode: Decodes data following by encoding
                method from Content-Encoding header. If it missed
                data remains untouched
            N)r   	bytearrayextend
read_chunk
chunk_sizer   )r~   r   datar7   r7   r8   r      s    
zBodyPartReader.read)sizer:   c                    s   | j r
dS | jr"| |I dH }n| |I dH }|  jt|7  _| j| jkrVd| _ | j r|| j I dH }d|ks|J d|S )zWReads body part content chunk of the specified size.

        size: chunk size
        r   NT   
z3reader did not read all the data or it is malformed)r   r   _read_chunk_from_length_read_chunk_from_streamr   lenr   readline)r~   r   chunkZclrfr7   r7   r8   r   0  s    zBodyPartReader.read_chunkc                    s:   | j d usJ dt|| j | j }| j|I d H }|S )Nz(Content-Length required for chunked read)r   minr   r   r   )r~   r   r   r   r7   r7   r8   r   F  s    z&BodyPartReader._read_chunk_from_lengthc                    sh  |t | jd ksJ d| jd u }|r<| j|I d H | _| j|I d H }|  jt| j 7  _| jdk sxJ d| jd usJ | j| }d| j }|r||}n ||t	dt | jt | }|dkrXt
 2 t
jdtd | j||d   W d    n1 s0    Y  ||kr:| jd | | _|t | j| }|sXd	| _| j}|| _|S )
NrE   z<Chunk size must be greater or equal than boundary length + 2   zReading after EOFr   r   ignore)categoryT)r   r   r   r   r   r   r   r   rL   maxr_   catch_warningsfilterwarningsDeprecationWarningZunread_datar   )r~   r   Zfirst_chunkr   ZwindowrT   idxresultr7   r7   r8   r   N  s8    


 

4
z&BodyPartReader._read_chunk_from_streamc                    s   | j r
dS | jr| j }n| j I dH }|| jrz|d}| j}| jd }||ksb||krd| _ | j| dS n4| j I dH }|| jr|dd }| j| |S )z Reads body part by line by line.r   Nr      --T)	r   r   popleftr   r   rq   r   rstriprx   )r~   linesliner   last_boundary	next_liner7   r7   r8   r   p  s$    

zBodyPartReader.readlinec                    s(   | j r
dS | j s$| | jI dH  q
dS )z0Like read(), but reads all the data to the void.N)r   r   r   r   r7   r7   r8   r     s    zBodyPartReader.release)rk   rk   r:   c                   s,   | j ddI dH }|p | jdd}||S )z;Like read(), but assumes that body part contains text data.Tr   NrX   default)r   get_charsetr   r~   rk   r   r7   r7   r8   rR     s    zBodyPartReader.textc                   sH   | j ddI dH }|sdS |p(| jdd}ttttf t||S )z<Like read(), but assumes that body parts contains JSON data.Tr   NrX   r   )	r   r   r   r   rZ   r   jsonloadsr   r   r7   r7   r8   r     s
    zBodyPartReader.jsonc                   sL   | j ddI dH }|sg S |dur(|}n| jdd}t| |d|dS )zFLike read(), but assumes that body parts contain form urlencoded data.Tr   NrX   r   )keep_blank_valuesrk   )r   r   r   r   r   )r~   rk   r   Zreal_encodingr7   r7   r8   form  s    zBodyPartReader.formc                 C   s   | j S )z<Returns True if the boundary was reached or False otherwise.r   r   r7   r7   r8   r     s    zBodyPartReader.at_eof)r   r:   c                 C   s,   t | jv r| |}t| jv r(| |S |S )zDecodes data.

        Decoding is done according the specified Content-Encoding
        or Content-Transfer-Encoding headers value.
        )r   r   _decode_content_transferr   _decode_content)r~   r   r7   r7   r8   r     s
    



zBodyPartReader.decodec                 C   sb   | j td }|dkr*t|tj S |dkrDt|dtj S |dkrP|S td| d S )NrP   deflategzip   identityunknown content encoding: )r   r   r   rb   zlib
decompress	MAX_WBITSRuntimeErrorr~   r   rk   r7   r7   r8   r     s    zBodyPartReader._decode_contentc                 C   sT   | j td }|dkr$t|S |dkr6t|S |dv rB|S td	|d S )NrP   base64quoted-printable)binary8bit7bit%unknown content transfer encoding: {})
r   r   r   rb   r   	b64decodebinasciia2b_qpr   formatr   r7   r7   r8   r     s    

z'BodyPartReader._decode_content_transfer)r   r:   c                 C   s$   | j td}t|}|jd|S )z>Returns charset parameter from Content-Type header or default.rP   charset)r   r   r   r    
parameters)r~   r   ctypemimetyper7   r7   r8   r     s    zBodyPartReader.get_charsetc                 C   s   t | jt\}}t|dS )z|Returns name specified in Content-Disposition header.

        If the header is missing or malformed, returns None.
        rp   r0   r   r   r   r1   r~   rl   rg   r7   r7   r8   rp     s    zBodyPartReader.namec                 C   s   t | jt\}}t|dS )zReturns filename specified in Content-Disposition header.

        Returns None if the header is missing or malformed.
        ro   r   r   r7   r7   r8   ro     s    zBodyPartReader.filename)%r4   r5   r6   r   r   bytesr*   r   r   r   r   r   r   r=   r   r   r   r   r   r   r   rZ   rR   r   r   r   r
   r   r   r   r   r   r   r   r!   rp   ro   r7   r7   r7   r8   r-      s4   "&&r-   )orderc                       s8   e Zd Zeeedd fddZeddddZ  ZS )BodyPartReaderPayloadN)rj   argskwargsr:   c                    s^   t  j|g|R i | i }|jd ur2|j|d< |jd urF|j|d< |rZ| jdi | d S )Nrp   ro   
attachmentT)r   T)superr   rp   ro   Zset_content_disposition)r~   rj   r   r   rg   	__class__r7   r8   r     s    



zBodyPartReaderPayload.__init__writerr:   c                    sJ   | j }|jddI d H }|rF|||I d H  |jddI d H }qd S )Ni   )r   )rn   r   writer   )r~   r   fieldr   r7   r7   r8   r     s
    zBodyPartReaderPayload.write)r4   r5   r6   r-   r   r   r   __classcell__r7   r7   r   r8   r     s   r   c                   @   s.  e Zd ZdZeZdZeZe	e
e
f eddddZed ddd	Zeed ef  dd
dZededddZedddZeed ef  dddZddddZed ef dddZded ef dddZe
dddZedddZddd d!Zddd"d#Zddd$d%Zddd&d'Z dS )(r+   zMultipart body reader.N)r   r   r:   c                 C   s:   || _ d|    | _|| _d | _d| _d| _g | _d S )Nz--FT)	r   _get_boundaryencoder   r   
_last_partr   _at_bofr   )r~   r   r   r7   r7   r8   r     s    zMultipartReader.__init__r-   r   c                 C   s   | S r<   r7   r   r7   r7   r8   r      s    zMultipartReader.__aiter__c                    s   |   I d H }|d u rt|S r<   r   r   r7   r7   r8   r   %  s    zMultipartReader.__anext__r2   )responser:   c                 C   s   |  || |j|j}|S )zConstructs reader instance from HTTP response.

        :param response: :class:`~aiohttp.client.ClientResponse` instance
        )response_wrapper_clsr   r   )clsr   objr7   r7   r8   from_response-  s    	zMultipartReader.from_responsec                 C   s   | j S )z@Returns True if the final boundary was reached, false otherwise.r   r   r7   r7   r8   r   ;  s    zMultipartReader.at_eofc                    sb   | j r
dS |  I dH  | jr4|  I dH  d| _n|  I dH  | j rLdS |  I dH | _| jS )z#Emits the next multipart body part.NF)r   _maybe_release_last_partr   _read_until_first_boundary_read_boundaryfetch_next_partr   r   r7   r7   r8   r   ?  s    zMultipartReader.nextc                    s2   | j s.|  I dH }|du rq.| I dH  q dS )z=Reads all the body parts to the void till the final boundary.N)r   r   r   r   r7   r7   r8   r   Q  s
    zMultipartReader.releasec                    s   |   I dH }| |S )z"Returns the next body part reader.N)_read_headers_get_part_reader)r~   r   r7   r7   r8   r   Y  s    zMultipartReader.fetch_next_partr   )r   r:   c                 C   s\   | td}t|}|jdkrF| jdu r8t| || jS | || jS | | j|| jS dS )zDispatches the response by the `Content-Type` header.

        Returns a suitable reader instance.

        :param dict headers: Response headers
        rP   	multipartN)r   r   r    typemultipart_reader_clsr   part_reader_clsr   )r~   r   r   r   r7   r7   r8   r  `  s    


z MultipartReader._get_part_readerc                 C   sb   t | jt }|jdks J dd|jvr<td| jt  |jd }t|dkr^td| |S )Nr  z!multipart/* content type expectedr   z$boundary missed for Content-Type: %sF   z&boundary %r is too long (70 chars max))r    r   r   r  r   
ValueErrorr   )r~   r   r   r7   r7   r8   r   t  s    

zMultipartReader._get_boundaryc                    s    | j r| j  S | j I d H S r<   )r   ra   r   r   r   r7   r7   r8   	_readline  s    
zMultipartReader._readlinec                    sX   |   I d H }|dkr$td| j | }|| jkr:d S || jd kr d| _d S q d S )Nr   z#Could not find starting boundary %rr   T)r  r  r   r   r   r~   r   r7   r7   r8   r     s    
z*MultipartReader._read_until_first_boundaryc                    s   |   I d H  }|| jkrnv|| jd kr~d| _|   I d H }|   I d H }|d d dkrl| j| q| j||g ntd|d| jd S )Nr   TrE   zInvalid boundary z, expected )r  r   r   r   r   rx   r   r  )r~   r   epiloguer   r7   r7   r8   r     s    
zMultipartReader._read_boundaryc                    sH   dg}| j  I d H }| }|| |sq0qt }||\}}|S )Nr   )r   r   rc   rx   r"   parse_headers)r~   linesr   parserr   Zraw_headersr7   r7   r8   r     s    
zMultipartReader._read_headersc                    s>   | j dur:| j  s$| j  I dH  | j| j j d| _ dS )z8Ensures that the last read body part is read completely.N)r   r   r   r   r   r   r7   r7   r8   r     s
    

z(MultipartReader._maybe_release_last_part)!r4   r5   r6   r   r{   r   r  r-   r  r   rZ   r*   r   r   r   r   r   r   classmethodr   r=   r   r   r   r   r  r   r   r  r   r   r   r   r7   r7   r7   r8   r+     s8   

	
r+   c                       sr  e Zd ZdZd)eee dd fddZd ddd	Zeee	  ee	 ee
 dd
ddZee dddZedddZedddZedZedZeedddZeedddZd*eeee  edddZeedddZd+eeee  eddd Zd,e e!e"eef  e#eef f eee  edd!d"Z$eee dd#d$Z%d-eedd&d'd(Z&  Z'S ).r,   zMultipart body writer.mixedN)subtyper   r:   c                    sp   |d ur|nt  j}z|d| _W n tyB   tdd Y n0 d| d| j }t j	d |d g | _
d S )Nasciiz(boundary should contain ASCII only charsz
multipart/z; boundary=)content_type)uuiduuid4hexr   r   UnicodeEncodeErrorr  _boundary_valuer   r   _parts)r~   r  r   r   r   r7   r8   r     s    zMultipartWriter.__init__r   c                 C   s   | S r<   r7   r   r7   r7   r8   	__enter__  s    zMultipartWriter.__enter__)exc_typeexc_valexc_tbr:   c                 C   s   d S r<   r7   )r~   r  r  r  r7   r7   r8   __exit__  s    zMultipartWriter.__exit__c                 C   s
   t | jS r<   )iterr  r   r7   r7   r8   __iter__  s    zMultipartWriter.__iter__c                 C   s
   t | jS r<   )r   r  r   r7   r7   r8   __len__  s    zMultipartWriter.__len__c                 C   s   dS )NTr7   r   r7   r7   r8   __bool__  s    zMultipartWriter.__bool__s   \A[!#$%&'*+\-.^_`|~\w]+\Zs   [\x00-\x08\x0A-\x1F\x7F]c                 C   s^   | j }t| j|r|dS t| j|r4td|dd}|dd}d|d d S )zyWrap boundary parameter value in quotes, if necessary.

        Reads self.boundary and returns a unicode sting.
        r  z*boundary value contains invalid characters   \s   \\   "s   \"rB   )	r   rS   match_valid_tchar_regexr   search_invalid_qdtext_char_regexr  replace)r~   rj   Zquoted_value_contentr7   r7   r8   r    s    
zMultipartWriter._boundary_valuec                 C   s   | j dS )Nr  )r   r   r   r7   r7   r8   r     s    zMultipartWriter.boundary)r   r   r:   c                 C   sl   |d u rt  }t|tr.|j| | |S zt||d}W n ty\   td| Y n0 | |S d S )Nr   zCannot create payload from %r)	r   
isinstancer&   r   updateappend_payloadr(   r$   	TypeError)r~   r   r   payloadr7   r7   r8   rx     s    

zMultipartWriter.append)r.  r:   c                 C   s   |j td }|r,|dvr,td| |dkr8d}|j td }|dvr`td||dkrld}|j}|dur|s|st||j t	< | j
|||f |S )	z)Adds a new body part to multipart writer.rP   )r   r   r   r   r   N)rP   r   r   r   r   r   )r   r   r   rb   r   r   r   r   rZ   r   r  rx   )r~   r.  rk   te_encodingr   r7   r7   r8   r,  $  s.    zMultipartWriter.append_payloadc                 C   s    |du rt  }| t||dS )zHelper to append JSON part.Nr)  )r   r,  r#   )r~   r   r   r7   r7   r8   append_jsonD  s    zMultipartWriter.append_jsonc                 C   sV   t |ttfsJ |du r t }t |tr6t| }t|dd}| t||ddS )z&Helper to append form urlencoded part.NT)doseqz!application/x-www-form-urlencoded)r   r  )	r*  r   r   r   listrv   r   r,  r'   )r~   r   r   r   r7   r7   r8   append_formM  s    
zMultipartWriter.append_formc                 C   sv   d}| j D ]P\}}}|s&|s&|jdu r, dS |tdt| j d |j t|j d 7 }q
|dt| j d 7 }|S )zSize of the payload.r   NrE      )r  r   r   r   r   _binary_headers)r~   totalr   rk   r/  r7   r7   r8   r   b  s&    	zMultipartWriter.sizeT)r   close_boundaryr:   c                    s   | j D ]\}}}|d| j d I dH  ||jI dH  |sD|rt|}|rZ|| |rh|| ||I dH  | I dH  n||I dH  |dI dH  q|r|d| j d I dH  dS )zWrite body.r   r   Ns   --
)r  r   r   r5  MultipartPayloadWriterenable_compressionenable_encoding	write_eof)r~   r   r7  r   rk   r/  wr7   r7   r8   r   v  s    

zMultipartWriter.write)r  N)N)N)N)T)(r4   r5   r6   r   rZ   r   r   r  r   BaseExceptionr   r  r	   _Partr  r   r   r=   r!  rS   compiler%  r'  propertyr  r   r   r   r&   rx   r,  r0  r   r   r   r   r3  r   r   r   r7   r7   r   r8   r,     sB   


!  
r,   c                   @   sd   e Zd ZeddddZeddddZdejfee	dd	d
dZ
ddddZeddddZdS )r8  Nr   c                 C   s   || _ d | _d | _d | _d S r<   )_writer	_encoding	_compress_encoding_buffer)r~   r   r7   r7   r8   r     s    zMultipartPayloadWriter.__init__r   c                 C   s*   |dkr|| _ t | _n|dkr&d| _ d S )Nr   r   )rB  r   rD  )r~   rk   r7   r7   r8   r:    s
    
z&MultipartPayloadWriter.enable_encodingr   )rk   strategyr:   c                 C   s.   |dkrdt j nt j }t j||d| _d S )Nr   r   )wbitsrE  )r   r   compressobjrC  )r~   rk   rE  	zlib_moder7   r7   r8   r9    s    z)MultipartPayloadWriter.enable_compressionr   c                    s\   | j d ur.| j  }|r.d | _ | |I d H  | jdkrX| jrX| jt| jI d H  d S )Nr   )rC  flushr   rB  rD  rA  r   	b64encoder	  r7   r7   r8   r;    s    


z MultipartPayloadWriter.write_eof)r   r:   c                    s   | j d ur"|r"| j |}|s"d S | jdkr| j}|d us>J || |rtt|d\}}|d |d  ||d d   }| _|rt|}| j	
|I d H  n6| jdkr| j	
t|I d H  n| j	
|I d H  d S )Nr   r   r   )rC  compressrB  rD  r   divmodr   r   rJ  rA  r   r   b2a_qp)r~   r   bufdivmodZ	enc_chunkZb64chunkr7   r7   r8   r     s$    


$

zMultipartPayloadWriter.write)r4   r5   r6   r   r   rZ   r:  r   Z_DEFAULT_STRATEGYr   r9  r;  r   r   r7   r7   r7   r8   r8    s   r8  )ro   )Jr   r   r   rS   r  r_   r   collectionsr   typesr   typingr   r   r   r   r   r	   r
   r   r   r   r   r   r   r   urllib.parser   r   r   Z	multidictr   r   r   hdrsr   r   r   r   r   Zhelpersr   r   r    r!   httpr"   r.  r#   r$   r%   r&   r'   r(   r)   Zstreamsr*   __all__Zclient_reqrepr2   RuntimeWarningr.   r/   rZ   r0   r1   r{   r-   Z	try_firstr   r+   r>  r,   r8  r7   r7   r7   r8   <module>   sP   @$	d !/ { 8 H