
­­­­­­­­­­­­­­­­­­
<!DOCTYPE html>
<html>
U
    '7`}                     @   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 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-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4 ddl5m6Z6 dZ7er6ddl8m9Z9 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Z?G dd dZ@G dd dZAe4eAe0jBdG dd  d e1ZCG d!d" d"ZDee1e=e=f ZEG d#d$ d$e1ZFG d%d& d&ZGdS )(    N)deque)TracebackType)TYPE_CHECKINGAnyAsyncIteratorDictIteratorListMappingOptionalSequenceTupleTypeUnion)	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__ r5   r5   D/opt/alt/python38/lib64/python3.8/site-packages/aiohttp/multipart.pyr,   ?   s   r,   c                   @   s   e Zd ZdS )r-   Nr1   r5   r5   r5   r6   r-   C   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|	krt	t
|  d i fS |	dd\}
}|
  }
| }|
|k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k
r   t	t|	 Y qY nX nd}||r2d}||dd d}nT |rBd}nD|rd||d }||r|d ||dd d}d}|rt	t
|  d i fS |||
< q| |fS )N)stringr8   c                 S   s   t | ott| kS N)boolr   setr9   r5   r5   r6   is_tokenJ   s    z+parse_content_disposition.<locals>.is_tokenc                 S   s    | d | d   kodkS   S )Nr   "r5   r=   r5   r5   r6   	is_quotedM   s    z,parse_content_disposition.<locals>.is_quotedc                    s    | o|  ddkS )N'   )countr=   r>   r5   r6   
is_rfc5987P   s    z-parse_content_disposition.<locals>.is_rfc5987c                 S   s
   |  dS )N*)endswithr=   r5   r5   r6   is_extended_paramS   s    z4parse_content_disposition.<locals>.is_extended_paramc                 S   s@   |  dd }|sdS | dr,| |d n
| |d  }| S )NrG   r   Fr?   )findrH   isdigit)r9   posZ	substringr5   r5   r6   is_continuous_paramV   s
    "z6parse_content_disposition.<locals>.is_continuous_param )chars)textrO   r8   c                S   s   t d| dd| S )Nz\\([z])z\1)resub)rP   rO   r5   r5   r6   unescape]   s    z+parse_content_disposition.<locals>.unescape;r   =r   r?   rB   rC   utf-8strictTFz\/z{};{})strr;   joinmaprQ   escaper   splitwarningswarnr,   poplowerstriplstripr-   r   UnicodeDecodeErrorformat)r7   rA   rF   rI   rM   rS   Zdisptypepartsparamsitemkeyvalueencoding_failed_valuer5   rE   r6   r.   G   sz    &












r.   filename)rf   namer8   c           
         s   d|  | sd S  | kr |   S || k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|kr|dd	\}	}}|	pd
}	t||	dS |S d S )Nz%s*c                 3   s$   | ]\}}|  r||fV  qd S r:   )
startswith).0rh   ri   Zname_sufr5   r6   	<genexpr>   s    
 z/content_disposition_filename.<locals>.<genexpr>rG   r   r?   rN   rB   rC   rV   rW   )	sorteditems	enumerater\   rH   rX   appendrY   r   )
rf   ro   re   Zfnparamsnumrh   ri   rk   tailrj   r5   rr   r6   r/      s4    

r/   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.
    r0   r)   N)respstreamr8   c                 C   s   || _ || _d S r:   )r{   r|   )selfr{   r|   r5   r5   r6   __init__   s    z!MultipartResponseWrapper.__init__r8   c                 C   s   | S r:   r5   r}   r5   r5   r6   	__aiter__   s    z"MultipartResponseWrapper.__aiter__)r)   r+   c                    s   |   I d H }|d krt|S r:   nextStopAsyncIterationr}   partr5   r5   r6   	__anext__   s    z"MultipartResponseWrapper.__anext__c                 C   s   | j j S )z2Returns True when all response data had been read.)r{   contentat_eofr   r5   r5   r6   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}   rg   r5   r5   r6   r      s    
zMultipartResponseWrapper.nextc                    s   | j  I dH  dS )zPReleases the connection gracefully, reading all the content
        to the void.N)r{   r   r   r5   r5   r6   r      s    z MultipartResponseWrapper.release)r2   r3   r4   __doc__r~   r   r   r   r;   r   r   r   r   r5   r5   r5   r6   rz      s   
	rz   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   r8   c                 C   s`   || _ || _|| _d| _| j td }|d k	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   lengthr5   r5   r6   r~      s    zBodyPartReader.__init__r   c                 C   s   | S r:   r5   r   r5   r5   r6   r     s    zBodyPartReader.__aiter__c                    s   |   I d H }|d krt|S r:   r   r   r5   r5   r6   r     s    zBodyPartReader.__anext__c                    s   |   I d H }|sd S |S r:   )readr   r5   r5   r6   r     s    zBodyPartReader.nextFdecode)r   r8   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   datar5   r5   r6   r     s    
zBodyPartReader.read)sizer8   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|t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AssertionError)r}   r   chunkZclrfr5   r5   r6   r   ,  s    zBodyPartReader.read_chunkc                    s:   | j d k	stdt|| j | j }| j|I d H }|S )Nz(Content-Length required for chunked read)r   r   minr   r   r   )r}   r   r   r   r5   r5   r6   r   B  s    z&BodyPartReader._read_chunk_from_lengthc              	      sR  |t | jd kstd| jd k}|r<| j|I d H | _| j|I d H }|  jt| j 7  _| jdk sxtd| jd k	st| j| }d| j }|r|	|}n |	|t
dt | jt | }|dkrBt ( tjdtd | j||d   W 5 Q R X ||kr$| jd | | _|t | j| }|sBd	| _| j}|| _|S )
NrC   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   r   rJ   maxr]   catch_warningsfilterwarningsDeprecationWarningZunread_datar   )r}   r   Zfirst_chunkr   windowrR   idxresultr5   r5   r6   r   J  s8    


 


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   rp   r   rstriprw   )r}   linesliner   Zlast_boundary	next_liner5   r5   r6   r   l  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   r5   r5   r6   r     s    zBodyPartReader.release)rj   rj   r8   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   NrV   default)r   get_charsetr   r}   rj   r   r5   r5   r6   rP     s    zBodyPartReader.textc                   s:   | j ddI dH }|sdS |p(| jdd}t||S )z<Like read(), but assumes that body parts contains JSON data.Tr   NrV   r   )r   r   jsonloadsr   r   r5   r5   r6   r     s
    zBodyPartReader.jsonc                   sL   | j ddI dH }|sg S |dk	r(|}n| jdd}t| |d|dS )zXLike read(), but assumes that body parts contains form
        urlencoded data.
        Tr   NrV   r   )keep_blank_valuesrj   )r   r   r   r   r   )r}   rj   r   Zreal_encodingr5   r5   r6   form  s    zBodyPartReader.formc                 C   s   | j S )z<Returns True if the boundary was reached or False otherwise.r   r   r5   r5   r6   r     s    zBodyPartReader.at_eof)r   r8   c                 C   s,   t | jkr| |}t| jkr(| |S |S )zrDecodes data according the specified Content-Encoding
        or Content-Transfer-Encoding headers value.
        )r   r   _decode_content_transferr   _decode_content)r}   r   r5   r5   r6   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 )NrN   deflategzip   identityunknown content encoding: )r   r   r   r`   zlib
decompress	MAX_WBITSRuntimeErrorr}   r   rj   r5   r5   r6   r     s    zBodyPartReader._decode_contentc                 C   sT   | j td }|dkr$t|S |dkr6t|S |dkrB|S td	|d S )NrN   base64quoted-printable)binary8bit7bit%unknown content transfer encoding: {})
r   r   r   r`   r   	b64decodebinasciia2b_qpr   rd   r   r5   r5   r6   r     s    

z'BodyPartReader._decode_content_transfer)r   r8   c                 C   s$   | j td}t|}|jd|S )z>Returns charset parameter from Content-Type header or default.rN   charset)r   r   r   r   
parameters)r}   r   ctypemimetyper5   r5   r6   r     s    zBodyPartReader.get_charsetc                 C   s   t | jt\}}t|dS )zoReturns name specified in Content-Disposition header or None
        if missed or header is malformed.
        ro   r.   r   r   r   r/   r}   rk   rf   r5   r5   r6   ro     s    zBodyPartReader.namec                 C   s   t | jt\}}t|dS )zsReturns filename specified in Content-Disposition header or None
        if missed or header is malformed.
        rn   r   r   r5   r5   r6   rn     s    zBodyPartReader.filename)%r2   r3   r4   r   r   bytesr(   r~   r   r   r   r   r   r;   r   r   r   r   r   r   r   rX   rP   r   r   r   r	   r   r   r   r   r   r   r   r   ro   rn   r5   r5   r5   r6   r+      s8     "&&
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)ri   argskwargsr8   c                    sT   t  j|f|| i }|jd k	r,|j|d< |jd k	r@|j|d< |rP| jd| d S )Nro   rn   
attachmentT)r   T)superr~   ro   rn   Zset_content_disposition)r}   ri   r   r   rf   	__class__r5   r6   r~     s    



zBodyPartReaderPayload.__init__writerr8   c                    sJ   | j }|jddI d H }|rF|||I d H  |jddI d H }qd S )Ni   )r   )rm   r   writer   )r}   r   fieldr   r5   r5   r6   r     s
    zBodyPartReaderPayload.write)r2   r3   r4   r+   r   r~   r   __classcell__r5   r5   r   r6   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   r8   c                 C   s:   || _ d|    | _|| _d | _d| _d| _g | _d S )Nz--FT)	r   _get_boundaryencoder   r   
_last_partr   _at_bofr   )r}   r   r   r5   r5   r6   r~     s    zMultipartReader.__init__r+   r   c                 C   s   | S r:   r5   r   r5   r5   r6   r     s    zMultipartReader.__aiter__c                    s   |   I d H }|d krt|S r:   r   r   r5   r5   r6   r   "  s    zMultipartReader.__anext__r0   )responser8   c                 C   s   |  || |j|j}|S )zConstructs reader instance from HTTP response.

        :param response: :class:`~aiohttp.client.ClientResponse` instance
        )response_wrapper_clsr   r   )clsr   objr5   r5   r6   from_response*  s
    	 zMultipartReader.from_responsec                 C   s   | j S )zSReturns True if the final boundary was reached or
        False otherwise.
        r   r   r5   r5   r6   r   8  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   r5   r5   r6   r   >  s    zMultipartReader.nextc                    s2   | j s.|  I dH }|dk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   r5   r5   r6   r   P  s
    zMultipartReader.releasec                    s   |   I dH }| |S )z"Returns the next body part reader.N)_read_headers_get_part_reader)r}   r   r5   r5   r6   r   X  s    zMultipartReader.fetch_next_partr   )r   r8   c                 C   s\   | td}t|}|jdkrF| jdkr8t| || jS | || jS | | j|| jS dS )zDispatches the response by the `Content-Type` header, returning
        suitable reader instance.

        :param dict headers: Response headers
        rN   	multipartN)r   r   r   typemultipart_reader_clsr   part_reader_clsr   )r}   r   r   r   r5   r5   r6   r   _  s    	

z MultipartReader._get_part_readerc                 C   sb   t | jt }|jdks tdd|jk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   r   
ValueErrorr   )r}   r   r   r5   r5   r6   r   r  s    

zMultipartReader._get_boundaryc                    s    | j r| j  S | j I d H S r:   )r   r_   r   r   r   r5   r5   r6   	_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   r5   r5   r6   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   TrC   zInvalid boundary z, expected )r  r   r   r   r   rw   r   r  )r}   r   epiloguer   r5   r5   r6   r     s    
zMultipartReader._read_boundaryc                    sH   dg}| j  I d H }| }|| |sq0qt }||\}}|S )Nr   )r   r   ra   rw   r    Zparse_headers)r}   linesr   parserr   Zraw_headersr5   r5   r6   r     s    
zMultipartReader._read_headersc                    s>   | j dk	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   r5   r5   r6   r     s
    

z(MultipartReader._maybe_release_last_part)!r2   r3   r4   r   rz   r   r  r+   r  r
   rX   r(   r~   r   r   r   r   r   classmethodr   r;   r   r   r   r   r   r   r   r  r   r   r   r   r5   r5   r5   r6   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   r8   c                    sr   |d k	r|nt  j}z|d| _W n tk
rD   tdd Y nX d| d| j }t j	d |d g | _
d S )Nasciiz(boundary should contain ASCII only charsz
multipart/z; boundary=)content_type)uuidZuuid4hexr   r   UnicodeEncodeErrorr  _boundary_valuer   r~   _parts)r}   r  r   r   r   r5   r6   r~     s    zMultipartWriter.__init__r   c                 C   s   | S r:   r5   r   r5   r5   r6   	__enter__  s    zMultipartWriter.__enter__)exc_typeexc_valexc_tbr8   c                 C   s   d S r:   r5   )r}   r  r  r  r5   r5   r6   __exit__  s    zMultipartWriter.__exit__c                 C   s
   t | jS r:   )iterr  r   r5   r5   r6   __iter__  s    zMultipartWriter.__iter__c                 C   s
   t | jS r:   )r   r  r   r5   r5   r6   __len__  s    zMultipartWriter.__len__c                 C   s   dS )NTr5   r   r5   r5   r6   __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   \"r@   )	r   rQ   match_valid_tchar_regexr   search_invalid_qdtext_char_regexr  replace)r}   ri   Zquoted_value_contentr5   r5   r6   r    s    
zMultipartWriter._boundary_valuec                 C   s   | j dS )Nr  )r   r   r   r5   r5   r6   r     s    zMultipartWriter.boundary)r   r   r8   c                 C   sn   |d krt  }t|tr.|j| | |S zt||d}W n  tk
r^   td| Y nX | |S d S )Nr   zCannot create payload from %r)	r   
isinstancer$   r   updateappend_payloadr&   r"   	TypeError)r}   r   r   payloadr5   r5   r6   rw     s    

zMultipartWriter.append)r+  r8   c                 C   s   |j td }|r,|dkr,td| |dkr8d}|j td }|dkr`td||dkrld}|j}|dk	r|s|st||j t	< | j
|||f |S )	z)Adds a new body part to multipart writer.rN   )r   r   r   r   r   N)rN   r   r   r   r   r   )r   r   r   r`   r   r   rd   r   rX   r   r  rw   )r}   r+  rj   te_encodingr   r5   r5   r6   r)  "  s.    zMultipartWriter.append_payloadc                 C   s    |dkrt  }| t||dS )zHelper to append JSON part.Nr&  )r   r)  r!   )r}   r   r   r5   r5   r6   append_jsonB  s    zMultipartWriter.append_jsonc                 C   sV   t |ttfst|dk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   r   listru   r   r)  r%   )r}   r   r   r   r5   r5   r6   append_formK  s    
  zMultipartWriter.append_formc                 C   sv   d}| j D ]P\}}}|s&|s&|jdk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   NrC      )r  r   r   r   r   _binary_headers)r}   totalr   rj   r,  r5   r5   r6   r   `  s&    	zMultipartWriter.sizeT)r   close_boundaryr8   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   r2  MultipartPayloadWriterenable_compressionenable_encoding	write_eof)r}   r   r4  r   rj   r,  wr5   r5   r6   r   t  s    

zMultipartWriter.write)r  N)N)N)N)T)(r2   r3   r4   r   rX   r   r~   r  r   BaseExceptionr   r  r   _Partr  r   r  r;   r  rQ   compiler"  r$  propertyr  r   r   r   r$   rw   r)  r-  r   r   r   r
   r0  r   r   r   r5   r5   r   r6   r*     sD   


!  
 
r*   c                   @   s\   e Zd ZeddddZeddddZdeddd	d
ZddddZe	ddddZ
dS )r5  Nr   c                 C   s   || _ d | _d | _d | _d S r:   )_writer	_encoding	_compress_encoding_buffer)r}   r   r5   r5   r6   r~     s    zMultipartPayloadWriter.__init__r   c                 C   s*   |dkr|| _ t | _n|dkr&d| _ d S )Nr   r   )r?  r   rA  )r}   rj   r5   r5   r6   r7    s
    
z&MultipartPayloadWriter.enable_encodingr   c                 C   s,   |dkrdt j nt j }t j|d| _d S )Nr   r   )Zwbits)r   r   compressobjr@  )r}   rj   Z	zlib_moder5   r5   r6   r6    s    z)MultipartPayloadWriter.enable_compressionr   c                    s\   | j d k	r.| j  }|r.d | _ | |I d H  | jdkrX| jrX| jt| jI d H  d S )Nr   )r@  flushr   r?  rA  r>  r   	b64encoder  r5   r5   r6   r8    s    


z MultipartPayloadWriter.write_eof)r   r8   c                    s   | j d k	r"|r"| j |}|s"d S | jdkr| j}|d k	s>t|| |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   )r@  compressr?  rA  r   r   divmodr   r   rD  r>  r   r   b2a_qp)r}   r   bufZdivmodZ	enc_chunkZb64chunkr5   r5   r6   r     s$    


$

zMultipartPayloadWriter.write)r   )r2   r3   r4   r   r~   rX   r7  r6  r8  r   r   r5   r5   r5   r6   r5    s
   r5  )rn   )Hr   r   r   rQ   r  r]   r   collectionsr   typesr   typingr   r   r   r   r   r	   r
   r   r   r   r   r   urllib.parser   r   r   Z	multidictr   r   r   Zhdrsr   r   r   r   r   Zhelpersr   r   r   r   httpr    r+  r!   r"   r#   r$   r%   r&   r'   Zstreamsr(   __all__Zclient_reqrepr0   RuntimeWarningr,   r-   rX   r.   r/   rz   r+   Z	try_firstr   r)   r;  r*   r5  r5   r5   r5   r6   <module>   sR   8$	d 
 !- z ; H