HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
File: //usr/local/lib/python3.10/dist-packages/aiohttp/__pycache__/multipart.cpython-310.pyc
o

���gP��@sdddlZddlZddlZddlZddlZddlZddlZddlZddlm	Z	ddl
mZddlm
Z
mZmZmZmZmZmZmZmZmZmZmZmZddlmZmZmZddlmZm Z ddl!m"Z"m#Z#dd	l$m%Z%m&Z&m'Z'm(Z(m)Z)dd
l*m+Z+m,Z,m-Z-m.Z.ddl/m0Z0ddl1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8dd
l9m:Z:ej;dkr�ddlm<Z<nddlm=Z=e=ddd�Z<dZ>e
r�ddl?m@Z@Gdd�deA�ZBGdd�deA�ZCdeeDdeeeDeeDeDfffdd�ZE	d/deeDeDfd eDdeeDfd!d"�ZFGd#d$�d$�ZGGd%d�d�ZHe8eHe4jId&�Gd'd(�d(e5��ZJGd)d*�d*�ZKee5eDeDfZLGd+d,�d,e5�ZMGd-d.�d.�ZNdS)0�N)�deque)�
TracebackType)
�
TYPE_CHECKING�Any�Deque�Dict�Iterator�List�Mapping�Optional�Sequence�Tuple�Type�Union�cast)�	parse_qsl�unquote�	urlencode)�CIMultiDict�CIMultiDictProxy�)�ZLibCompressor�ZLibDecompressor)�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)��)�Self)�TypeVarr-�BodyPartReader)�bound)�MultipartReader�MultipartWriterr/�BadContentDispositionHeader�BadContentDispositionParam�parse_content_disposition�content_disposition_filename)�ClientResponsec@�eZdZdS)r3N��__name__�
__module__�__qualname__�r=r=�</usr/local/lib/python3.10/dist-packages/aiohttp/multipart.pyr3I�r3c@r8)r4Nr9r=r=r=r>r4Mr?r4�header�returncs�dtdtfdd��dtdtfdd�}dtdtf�fdd�}dtdtfd	d
�}dtdtfdd�}d
�ttjt��d�dtdtdtfdd�}|sJdifS|�d�^}}�|�s`t�	t
|��difSi}|�rO|�d�}	d|	vryt�	t
|��difS|	�dd�\}
}|
���
�}
|��}|
|vr�t�	t
|��difS�|
�s�t�	t|	��qb||
�r�||�r�||dd��}n��|�s�t�	t|	��qbn�||
�r�||�r�|�dd�\}}
}|p�d}nt�	t|	��qbzt||d�}Wn^ty�t�	t|	��Yqbwd}||��rd}||dd��d��}n+�|��rd}n#|�r;|�d|d��}||��r;|�d�||dd��d��}d}|�rIt�	t
|��difS|||
<|se|��|fS)N�stringrAcSst|�o	tt|�kS�N)�boolr�set�rBr=r=r>�is_tokenTsz+parse_content_disposition.<locals>.is_tokencSs |d|dko
dkSS)Nr����"r=rFr=r=r>�	is_quotedWs z,parse_content_disposition.<locals>.is_quotedcs�|�o
|�d�dkS)N�'�)�countrF�rGr=r>�
is_rfc5987Z�z-parse_content_disposition.<locals>.is_rfc5987cSs
|�d�S)N�*)�endswithrFr=r=r>�is_extended_param]�
z4parse_content_disposition.<locals>.is_extended_paramcSs@|�d�d}|sdS|�d�r||d�n||d�}|��S)NrQrFrH)�findrR�isdigit)rB�pos�	substringr=r=r>�is_continuous_param`s
"z6parse_content_disposition.<locals>.is_continuous_param�)�chars�textr[cSst�d|�d�d|�S)Nz\\([z])z\1)�re�sub)r\r[r=r=r>�unescapegrPz+parse_content_disposition.<locals>.unescape�;r�=rrHrKrL�utf-8�strictTFz\/)�strrD�join�mapr]�escaper�split�warnings�warnr3�pop�lower�strip�lstripr4r�UnicodeDecodeError)r@rJrOrSrYr_�disptype�parts�params�item�key�value�encoding�_�failed�_valuer=rNr>r5Qs�*
�
�



�>r5�filenamerr�namec
s�d|�|sdS�|vr|�S||vr||Sg}t�fdd�|��D��}t|�D]%\}\}}|�dd�\}}|�d�rD|dd�}|t|�krP|�|�q+|sUdSd�|�}d|vrq|�dd	�\}	}}|	pjd
}	t||	d�S|S)Nz%s*c3s&�|]\}}|���r||fVqdSrC)�
startswith)�.0rtru��name_sufr=r>�	<genexpr>�s��
�z/content_disposition_filename.<locals>.<genexpr>rQrrHrZrKrLrbrc)	�sorted�items�	enumeraterhrRrd�appendrer)
rrr{rq�fnparams�numrtrurw�tailrvr=r~r>r6�s4�

r6c@speZdZdZ						ddd	�Zdd
d�Zdedfd
d�Zdefdd�Z	de
edfdd�Zddd�ZdS)�MultipartResponseWrapperzzWrapper around the MultipartReader.

    It takes care about
    underlying connection and close it when it needs in.
    �respr7�streamr1rANcCs||_||_dSrC)r�r�)�selfr�r�r=r=r>�__init__�s
z!MultipartResponseWrapper.__init__cC�|SrCr=�r�r=r=r>�	__aiter__��z"MultipartResponseWrapper.__aiter__)r1r/c�� �|��IdH}|durt�|SrC��next�StopAsyncIteration�r��partr=r=r>�	__anext__��
�z"MultipartResponseWrapper.__anext__cCs|jj��S)z2Returns True when all response data had been read.)r��content�at_eofr�r=r=r>r���zMultipartResponseWrapper.at_eofc�s.�|j��IdH}|j��r|��IdH|S)z#Emits next multipart reader object.N)r�r�r��release�r�rsr=r=r>r��s
�
zMultipartResponseWrapper.nextc�s�|j��IdHdS)z_Release the connection gracefully.

        All remaining content is read to the void.
        N)r�r�r�r=r=r>r��s�z MultipartResponseWrapper.release)r�r7r�r1rAN)rAr��rAN)
r:r;r<�__doc__r�r�rr�rDr�rr�r�r=r=r=r>r��s$��
�

�

�	r�c
@s�eZdZdZdZddd�deddd	ed
edeeddfd
d�Z	de
de
fdd�Zdefdd�Zdeefdd�Z
dd�dedefdd�Zefdedefdd�Zdedefdd�Zdedefd d!�Zdefd"d#�Zd>d$d%�Zdd&�d'eedefd(d)�Zdd&�d'eedeeeeffd*d+�Zdd&�d'eedeeeeffd,d-�Zdefd.d/�Zd0edefd1d2�Zd0edefd3d4�Zd0edefd5d6�Z d7edefd8d9�Z!e"deefd:d;��Z#e"deefd<d=��Z$dS)?r/z&Multipart reader for single body part.i �mixedN��subtype�default_charset�boundary�headers�CIMultiDictProxy[str]r�r�r�rAcCs�||_||_t|�d|_||_||_d|_|dk|_|jr dn|j�t	d�}|dur/t
|�nd|_d|_t
�|_d|_d|_i|_dS)NrLF�	form-datar)r��	_boundary�len�
_boundary_len�_content�_default_charset�_at_eof�
_is_form_data�getr�int�_length�_read_bytesr�_unread�_prev_chunk�_content_eof�_cache)r�r�r�r�r�r��lengthr=r=r>r�	s	

zBodyPartReader.__init__r�cCr�rCr=r�r=r=r>r�"r�zBodyPartReader.__aiter__c�r�rCr�r�r=r=r>r�%s
�zBodyPartReader.__anext__c�s�|��IdH}|sdS|SrC)�readr�r=r=r>r�+s
�zBodyPartReader.nextF��decoder�c�sH�|jrdSt�}|js|�|�|j�IdH�|jr|r"|�|�S|S)z�Reads 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��datar=r=r>r�1s��
zBodyPartReader.read�sizec	�sf�|jrdS|jr|�|�IdH}n|�|�IdH}|j�t�}|r�|��dkr�d�|�	��}t
|�d}|dkr�|��s�d|}d}|jrW|jd|�}|jt
|�d�|_t
|�|krl||j
�dt
|��IdH7}|sqd|_|d�|�	��7}||7}t
|�d}|dkr�|��r=|jt
|�7_|j|jkr�d|_|jr�|j
��IdH}d|ks�Jd��|S)	zWReads body part content chunk of the specified size.

        size: chunk size
        r�N�base64�rT�
z3reader did not read all the data or it is malformed)r�r��_read_chunk_from_length�_read_chunk_from_streamr�r�rrlrerhr�r�r�r�r�r��readline)	r�r��chunkrv�stripped_chunk�	remainder�over_chunk_size�
over_chunk�clrfr=r=r>r�AsB��
�zBodyPartReader.read_chunkc�sL�|jdus
Jd��t||j|j�}|j�|�IdH}|j��r$d|_|S)Nz(Content-Length required for chunked readT)r��minr�r�r�r�r�)r�r�r�r�r=r=r>r�ps�
z&BodyPartReader._read_chunk_from_lengthc�s��||jks
Jd��|jdu}|r|j�|�IdH|_d}t|�|jkrO||j�|�IdH7}|jt|j���7_|jdksDJd��|jrHnt|�|jks$t|�|kre|j�||d��|d|�}|jduslJ�|j|}d|j	}|r~|�
|�}n|�
|tdt|j�t|���}|dkr�t�
��tjdtd�|j�||d��Wd�n1s�wY||kr�|jd|�|_|t|j�|�}|s�d	|_|j}||_|S)
Nz<Chunk size must be greater or equal than boundary length + 2r�r+zReading after EOFr�r�ignore)�categoryT)r�r�r�r�r�r�r�r��unread_datar�rU�maxri�catch_warnings�filterwarnings�DeprecationWarningr�)r�r��first_chunkr��windowr^�idx�resultr=r=r>r�zsJ��
�

 
�z&BodyPartReader._read_chunk_from_streamc�s��|jrdS|jr|j��}n|j��IdH}|�|j�r?|�d�}|j}|jd}||ks2||kr=d|_|j�|�dS|S|j��IdH}|�|j�rS|dd�}|j�|�|S)z Reads body part by line by line.r�Nr��--T���)	r�r��popleftr�r�r|r��rstripr�)r��line�sliner��
last_boundary�	next_liner=r=r>r��s(�

�zBodyPartReader.readlinec�s2�|jrdS|js|�|j�IdH|jr	dSdS)z0Like read(), but reads all the data to the void.N)r�r�r�r�r=r=r>r��s��zBodyPartReader.release)rvrvc�s.�|jdd�IdH}|p|jdd�}|�|�S)z;Like read(), but assumes that body part contains text data.Tr�Nrb��default)r��get_charsetr��r�rvr�r=r=r>r\�s�
zBodyPartReader.textc�sJ�|jdd�IdH}|sdS|p|jdd�}ttttft�|�|���S)z<Like read(), but assumes that body parts contains JSON data.Tr�Nrbr�)	r�r�rrrdr�json�loadsr�r�r=r=r>r��s�zBodyPartReader.jsonc�sr�|jdd�IdH}|sgS|dur|}n|jdd�}z	|���|�}Wn
ty1td|��wt|d|d�S)zFLike read(), but assumes that body parts contain form urlencoded data.Tr�Nrbr�z'data cannot be decoded with %s encoding)�keep_blank_valuesrv)r�r�r�r�ro�
ValueErrorr)r�rvr��
real_encoding�decoded_datar=r=r>�form�s"���zBodyPartReader.formcC�|jS)z<Returns True if the boundary was reached or False otherwise.�r�r�r=r=r>r���zBodyPartReader.at_eofr�cCs2t|jvr
|�|�}|jst|jvr|�|�S|S)z�Decodes data.

        Decoding is done according the specified Content-Encoding
        or Content-Transfer-Encoding headers value.
        )rr��_decode_content_transferr�r�_decode_content)r�r�r=r=r>r��s



zBodyPartReader.decodecCsF|j�td���}|dkr|S|dvrt|dd��|�Std|����)NrZ�identity>�gzip�deflateT)rv�suppress_deflate_header�unknown content encoding: )r�r�rrlr�decompress_sync�RuntimeError�r�r�rvr=r=r>r��s��zBodyPartReader._decode_contentcCsP|j�td���}|dkrt�|�S|dkrt�|�S|dvr!|Std|����)NrZr��quoted-printable)�binary�8bit�7bit�#unknown content transfer encoding: )	r�r�rrlr��	b64decode�binascii�a2b_qpr�r�r=r=r>r�s

z'BodyPartReader._decode_content_transferr�cCs*|j�td�}t|�}|j�d|jp|�S)z>Returns charset parameter from Content-Type header or default.rZ�charset)r�r�rr �
parametersr�)r�r��ctype�mimetyper=r=r>r�szBodyPartReader.get_charsetcC�t|j�t��\}}t|d�S)z|Returns name specified in Content-Disposition header.

        If the header is missing or malformed, returns None.
        r{�r5r�r�rr6�r�rwrrr=r=r>r{�
zBodyPartReader.namecCr)zReturns filename specified in Content-Disposition header.

        Returns None if the header is missing or malformed.
        rzrrr=r=r>rz&r	zBodyPartReader.filenamer�)%r:r;r<r�r��bytesr*rdrr�r-r�r�r�rDr�r�r�r�r�r�r�r\rrr�r	r
r�r�r�r�r�r�r!r{rzr=r=r=r>r/sN������
�/
,
((
)�ordercsbeZdZUeed<dedededdf�fdd�Zddededefd
d�Zdeddfdd�Z	�Z
S)�BodyPartReaderPayloadryru�args�kwargsrANcsbt�j|g|�Ri|��i}|jdur|j|d<|jdur#|j|d<|r/|jdi|��dSdS)Nr{rz�
attachmentT)rT)�superr�r{rz�set_content_disposition)r�rur
rrr��	__class__r=r>r�4s



�zBodyPartReaderPayload.__init__rbrcrv�errorscCstd��)NzUnable to decode.)�	TypeError�r�rvrr=r=r>r�@szBodyPartReaderPayload.decode�writerc�sR�|j}|jdd�IdH}|r'|�|�|��IdH|jdd�IdH}|sdSdS)Ni)r�)ryr��writer�)r�r�fieldr�r=r=r>rCs��zBodyPartReaderPayload.write�rbrc)r:r;r<r/�__annotations__rr�rdr�r�
__classcell__r=r=rr>r0s

rc@s4eZdZUdZeZdZeede	d<e
Zdee
e
fdeddfdd�Zd	edefd
d�Zdeede
ffdd
�Zedddefdd��Zdefdd�Zdeede
ffdd�Zd)dd�Zdede
ffdd�Zdddede
ffdd�Zde
fdd�Zdefdd �Zd)d!d"�Zd)d#d$�Z d*d%d&�Z!d)d'd(�Z"dS)+r1zMultipart body reader.N�multipart_reader_clsr�r�rAcCs~t|t�|_|jjdksJd��d|jjvrtd|t��||_d|����|_	||_
d|_d|_d|_
d|_g|_dS)N�	multipartz!multipart/* content type expectedr�z$boundary missed for Content-Type: %s�--FT)r r�	_mimetype�typerr�r��
_get_boundary�encoder�r�r��
_last_partr��_at_bofr�)r�r�r�r=r=r>r�Vs
�
zMultipartReader.__init__r�cCr�rCr=r�r=r=r>r�gr�zMultipartReader.__aiter__c�r�rCr�r�r=r=r>r�jr�zMultipartReader.__anext__�responser7cCs|�|||j|j��}|S)z�Constructs reader instance from HTTP response.

        :param response: :class:`~aiohttp.client.ClientResponse` instance
        )�response_wrapper_clsr�r�)�clsr&�objr=r=r>�
from_responsers	�zMultipartReader.from_responsecCr�)z@Returns True if the final boundary was reached, false otherwise.r�r�r=r=r>r��r�zMultipartReader.at_eofc�s��|jrdS|��IdH|jr|��IdHd|_n|��IdH|jr'dS|��IdH}|jduro|jjdkrot	|t
�rot|j�
t��\}}|�
d�dkro|�d�IdH}t|�dkratd��|����|_|��IdH}||_|jS)	z#Emits the next multipart body part.NFr�r{�	_charset_� �zInvalid default charset)r��_maybe_release_last_partr%�_read_until_first_boundary�_read_boundary�fetch_next_partr$r r��
isinstancer/r5r�r�rr�r�r�rmr�r�)r�r�rwrrrr=r=r>r��s0�
�zMultipartReader.nextc�s>�|js|��IdH}|durdS|��IdH|jrdSdS)z=Reads all the body parts to the void till the final boundary.N)r�r�r�r�r=r=r>r��s��zMultipartReader.releasec�s�|��IdH}|�|�S)z"Returns the next body part reader.N)�
_read_headers�_get_part_reader)r�r�r=r=r>r1�s�
zMultipartReader.fetch_next_partr�cCsd|�td�}t|�}|jdkr#|jdurt|�||j�S|�||j�S|j|j||j|jj	|j
d�S)z�Dispatches the response by the `Content-Type` header.

        Returns a suitable reader instance.

        :param dict headers: Response headers
        rZrNr�)r�rr r!rr��part_reader_clsr�r r�r�)r�r�rrr=r=r>r4�s


�z MultipartReader._get_part_readercCs(|jjd}t|�dkrtd|��|S)Nr��Fz&boundary %r is too long (70 chars max))r rr�r�)r�r�r=r=r>r"�szMultipartReader._get_boundaryc�s"�|jr	|j��S|j��IdHSrC)r�rkr�r�r�r=r=r>�	_readline�s�
zMultipartReader._readlinec�sX�	|��IdH}|dkrtd|j��|��}||jkrdS||jdkr+d|_dSq)NTr�z#Could not find starting boundary %rr�)r7r�r�r�r��r�r�r=r=r>r/�s��
�z*MultipartReader._read_until_first_boundaryc�s��|��IdH��}||jkrdS||jdkrCd|_|��IdH}|��IdH}|dd�dkr9|j�|�dS|j�||g�dStd|�d|j����)Nr�TrLzInvalid boundary z, expected )r7r�r�r�r�r�r�r�)r�r��epiloguer�r=r=r>r0�s�
zMultipartReader._read_boundaryc�sL�dg}	|j��IdH}|��}|�|�|snqt�}|�|�\}}|S)Nr�)r�r�rmr�r"�
parse_headers)r��linesr��parserr��raw_headersr=r=r>r3s�
�zMultipartReader._read_headersc�sD�|jdur |j��s|j��IdH|j�|jj�d|_dSdS)z8Ensures that the last read body part is read completely.N)r$r�r�r�r�r�r=r=r>r.
s�


�z(MultipartReader._maybe_release_last_partr�)rAr�)#r:r;r<r�r�r'rrrrr/r5r
rdr*r�r-r�rr��classmethodr*rDr�r�r�r1r4r"r
r7r/r0r3r.r=r=r=r>r1KsF

���

�
#

��

�


r1cs�eZdZUdZded<d5dedeeddf�fdd	�
Zd6d
d�Zdee	e
d
ee
deeddfdd�Zde
efdd�Zdefdd�Zdefdd�Ze�d�Ze�d�Zedefdd��Zedefdd��Zd7dedeeeefdefdd �Zd!edefd"d#�Z	d7dedeeeefdefd$d%�Z 	d7de!e"e#eefeeeffdeeeefdefd&d'�Z$edeefd(d)��Z%d8d,ed-edefd.d/�Z&d9d1ed2eddfd3d4�Z'�Z(S):r2zMultipart body writer.Nryr�r�r�rAcsv|dur|nt��j}z|�d�|_Wntytd�d�wd|�d|j��}t�j	d|d�g|_
|dk|_dS)N�asciiz(boundary should contain ASCII only charsz
multipart/z; boundary=)�content_typer�)�uuid�uuid4�hexr#r��UnicodeEncodeErrorr��_boundary_valuerr��_partsr�)r�r�r�rrr=r>r�s
�zMultipartWriter.__init__cCr�rCr=r�r=r=r>�	__enter__0r�zMultipartWriter.__enter__�exc_type�exc_val�exc_tbcCsdSrCr=)r�rHrIrJr=r=r>�__exit__3szMultipartWriter.__exit__cC�
t|j�SrC)�iterrFr�r=r=r>�__iter__;rTzMultipartWriter.__iter__cCrLrC)r�rFr�r=r=r>�__len__>rTzMultipartWriter.__len__cCsdS)NTr=r�r=r=r>�__bool__Ar�zMultipartWriter.__bool__s\A[!#$%&'*+\-.^_`|~\w]+\Zs[\x00-\x08\x0A-\x1F\x7F]cCs^|j}t�|j|�r|�d�St�|j|�rtd��|�dd�}|�dd�}d|�d�dS)zzWrap boundary parameter value in quotes, if necessary.

        Reads self.boundary and returns a unicode string.
        r?z*boundary value contains invalid characters�\s\\�"s\"rI)	r�r]�match�_valid_tchar_regexr��search�_invalid_qdtext_char_regexr��replace)r�ru�quoted_value_contentr=r=r>rEGs
zMultipartWriter._boundary_valuecCs|j�d�S)Nr?)r�r�r�r=r=r>r�gr�zMultipartWriter.boundaryr)r�cCsd|durt�}t|t�r|j�|�|�|�Szt||d�}Wn
ty,td|��w|�|�S)N�r�zCannot create payload from %r)	rr2r&r��update�append_payloadr(r$r)r�r)r��payloadr=r=r>r�ks

�
zMultipartWriter.appendr\cCs�d}d}|jr(ttth|j��@rJ�t|jvr'dt|j���}|j	d|d�nH|j�
td���}|r>|dvr>td|����|dkrDd}|j�
td���}|d	vrXtd
|����|dkr^d}|j
}|durp|sp|spt|�|jt<|j�|||f�|S)z)Adds a new body part to multipart writer.Nzsection-r�)r{rZ)r�r�r�r�r�)rZr�r�r�r�r�)r�rrrr��keysrr�rFrr�rlr�r�rdr�)r�r\rv�te_encodingr{r�r=r=r>r[zs4��
�zMultipartWriter.append_payloadcCs |durt�}|�t||d��S)zHelper to append JSON part.NrY)rr[r#)r�r)r�r=r=r>�append_json�szMultipartWriter.append_jsoncCsVt|ttf�s	J�|durt�}t|t�rt|���}t|dd�}|�t||dd��S)z&Helper to append form urlencoded part.NT)�doseqz!application/x-www-form-urlencoded)r�r@)	r2rr
r�listr�rr[r')r�r)r�r�r=r=r>�append_form�s
��zMultipartWriter.append_formcCsvd}|jD](\}}}|s|s|jdurdS|tdt|j�d|jt|j�d�7}q|dt|j�d7}|S)zSize of the payload.rNrLr�)rFr�r�r�r��_binary_headers)r��totalr�rvr^r=r=r>r��s&������	zMultipartWriter.sizerbrcrvrcsd����fdd��jD��S)NrZc3s:�|]\}}}d�jd|j����|��VqdS)rz
N)r�rcr�)r}r��_e�_te�rvrr�r=r>r��s������
�z)MultipartWriter.decode.<locals>.<genexpr>)rerFrr=rgr>r��s�zMultipartWriter.decodeTr�close_boundaryc�s��|jD]d\}}}|jrt|jvsJ�d|jtvsJ�|�d|jd�IdH|�|j�IdH|s6|rXt|�}|rA|�|�|rH|�	|�|�|�IdH|�
�IdHn|�|�IdH|�d�IdHq|rz|�d|jd�IdHdSdS)zWrite body.zname=r�r�Ns--
)rFr�rr�rr�rc�MultipartPayloadWriter�enable_compression�enable_encoding�	write_eof)r�rrhr�rvr^�wr=r=r>r�s(�

�zMultipartWriter.write)r�N)rAr2rCr)T))r:r;r<r�rrdrr�rGr�
BaseExceptionrrKr�_PartrNr�rOrDrPr]�compilerTrV�propertyrEr�rr
r&r�r[r_rrr
rbr�r�rrr=r=rr>r2sZ
 

���
�

$'���
����
� 
r2c@sjeZdZdeddfdd�Zdeddfdd�Zd	ejfded
e	ddfdd�Z
dd
d�Zdeddfdd�Z
dS)rirrANcCs||_d|_d|_d|_dSrC)�_writer�	_encoding�	_compress�_encoding_buffer)r�rr=r=r>r��s
zMultipartPayloadWriter.__init__rvcCs0|dkr
||_t�|_dS|dkrd|_dSdS)Nr�r�)rsr�ru)r�rvr=r=r>rk�s
�z&MultipartPayloadWriter.enable_encodingr��strategycCst|d|d�|_dS)NT)rvr�rv)rrt)r�rvrvr=r=r>rjs
�z)MultipartPayloadWriter.enable_compressionc�sf�|jdur|j��}|rd|_|�|�IdH|jdkr/|jr1|j�t�|j��IdHdSdSdS)Nr�)rt�flushrrsrurrr��	b64encoder8r=r=r>rls�


�z MultipartPayloadWriter.write_eofr�c�s��|jdur|r|j�|�IdH}|sdS|jdkr[|j}|dus#J�|�|�|rWtt|�d�\}}|d|d�||dd�}|_|rYt�|�}|j	�
|�IdHdSdSdS|jdkrn|j	�
t�|��IdHdS|j	�
|�IdHdS)Nr�r+r�)
rt�compressrsrur��divmodr�r�rxrrrr�b2a_qp)r�r��buf�div�mod�	enc_chunk�b64chunkr=r=r>rs*�


$
�
zMultipartPayloadWriter.writer�)r:r;r<rr�rdrk�zlib�Z_DEFAULT_STRATEGYr�rjrlr
rr=r=r=r>ri�s���
�
	ri)rz)Or�rr�r]�sysrArir��collectionsr�typesr�typingrrrrrr	r
rrr
rrr�urllib.parserrr�	multidictrr�compression_utilsrr�hdrsrrrrr�helpersrrr r!�httpr"r\r#r$r%r&r'r(r)�streamsr*�version_infor-r.�__all__�
client_reqrepr7�RuntimeWarningr3r4rdr5r6r�r/�	try_firstrr1ror2rir=r=r=r>�<module>sj<$	
�
�d�
��
�!/.L`