Viewing File: /opt/alt/python38/lib64/python3.8/site-packages/aiohttp/__pycache__/multipart.cpython-38.opt-1.pyc

U

'7`}@sddlZddlZddlZddlZddlZddlZddlZddlmZddl	m
Z
ddlmZm
Z
mZmZmZmZmZmZmZmZmZmZddlmZmZmZddlmZmZmZddl m!Z!m"Z"m#Z#m$Z$m%Z%dd	l&m'Z'm(Z(m)Z)m*Z*dd
l+m,Z,ddl-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4ddl5m6Z6d
Z7er6ddl8m9Z9Gddde:Z;Gddde:Z<ee=eee=ee=e=ffdddZ>d'ee=e=fe=ee=dddZ?GdddZ@GdddZAe4eAe0jBdGdd d e1ZCGd!d"d"ZDee1e=e=fZEGd#d$d$e1ZFGd%d&d&ZGdS)(N)deque)
TracebackType)
TYPE_CHECKINGAny
AsyncIteratorDictIteratorListMappingOptionalSequenceTupleTypeUnion)	parse_qslunquote	urlencode)CIMultiDictCIMultiDictProxyMultiMapping)CONTENT_DISPOSITIONCONTENT_ENCODINGCONTENT_LENGTHCONTENT_TRANSFER_ENCODINGCONTENT_TYPE)CHARTOKENparse_mimetypereify)
HeadersParser)JsonPayloadLookupErrorOrderPayload
StringPayloadget_payloadpayload_type)StreamReader)MultipartReaderMultipartWriterBodyPartReaderBadContentDispositionHeaderBadContentDispositionParamparse_content_dispositioncontent_disposition_filename)ClientResponsec@seZdZdS)r,N__name__
__module____qualname__r5r5D/opt/alt/python38/lib64/python3.8/site-packages/aiohttp/multipart.pyr,?sr,c@seZdZdS)r-Nr1r5r5r5r6r-Csr-)headerreturncsttdddttddd}ttdfdd}ttddd	}ttdd
d}dttjtd
tttddd}|sdifS|d^}}|st	t
|difSi}|r|d}	d|	krt	t
|difS|	dd\}
}|

}
|}|
|kr(t	t
|difS|
sFt	t|	qn\||
r||rl||dd}n|st	t|	qn||
r||r|dd\}}
}|pd}nt	t|	qzt||d}Wn(tk
rt	t|	YqYnXnd}||r2d}||ddd}nT|rBd}nD|rd||d}||r|d||ddd}d}|rt	t
|difS|||
<q||fS)N)stringr8cSst|ott|kSN)boolrsetr9r5r5r6is_tokenJsz+parse_content_disposition.<locals>.is_tokencSs |d|dkodkSS)Nr"r5r=r5r5r6	is_quotedMsz,parse_content_disposition.<locals>.is_quotedcs|o|ddkS)N')countr=r>r5r6
is_rfc5987Psz-parse_content_disposition.<locals>.is_rfc5987cSs
|dS)N*)endswithr=r5r5r6is_extended_paramSsz4parse_content_disposition.<locals>.is_extended_paramcSs@|dd}|sdS|dr,||dn
||d}|S)NrGrFr?)findrHisdigit)r9posZ	substringr5r5r6is_continuous_paramVs
"z6parse_content_disposition.<locals>.is_continuous_param)chars)textrOr8cSstd|dd|S)Nz\\([z])z\1)resub)rPrOr5r5r6unescape]sz+parse_content_disposition.<locals>.unescape;r=rr?rBrCutf-8strictTFz\/z{};{})strr;joinmaprQescapersplitwarningswarnr,poplowerstriplstripr-rUnicodeDecodeErrorformat)r7rArFrIrMrSZdisptypepartsparamsitemkeyvalueencoding_Zfailed_valuer5rEr6r.Gsz&












r.filename)rfnamer8c
sd||sdS|kr |S||kr0||Sg}tfdd|D}t|D]N\}\}}|dd\}}|dr|dd}|t|kr||qVqqV|sdSd|}d|kr|dd	\}	}}|	pd
}	t||	dS|SdS)Nz%s*c3s$|]\}}|r||fVqdSr:)
startswith).0rhriZname_sufr5r6	<genexpr>s
z/content_disposition_filename.<locals>.<genexpr>rGrr?rNrBrCrVrW)	sorteditems	enumerater\rHrXappendrYr)
rfrnreZfnparamsZnumrhrirktailrjr5rqr6r/s4

r/c@steZdZdZddddddZddd	d
Zedddd
ZedddZ	e
eddddZddddZdS)MultipartResponseWrapperzzWrapper around the MultipartReader.

    It takes care about
    underlying connection and close it when it needs in.
    r0r)N)respstreamr8cCs||_||_dSr:)ryrz)selfryrzr5r5r6__init__sz!MultipartResponseWrapper.__init__r8cCs|Sr:r5r{r5r5r6	__aiter__sz"MultipartResponseWrapper.__aiter__)r)r+cs|IdH}|dkrt|Sr:nextStopAsyncIterationr{partr5r5r6	__anext__sz"MultipartResponseWrapper.__anext__cCs|jjS)z2Returns True when all response data had been read.)rycontentat_eofr~r5r5r6rszMultipartResponseWrapper.at_eofcs,|jIdH}|jr(|IdH|S)z#Emits next multipart reader object.N)rzrrreleaser{rgr5r5r6rs
zMultipartResponseWrapper.nextcs|jIdHdS)zPReleases the connection gracefully, reading all the content
        to the void.N)ryrr~r5r5r6rsz MultipartResponseWrapper.release)
r2r3r4__doc__r|rrrr;rrrrr5r5r5r6rxs
	rxc@seZdZdZdZededdddZeddd	d
Z	edddZ
eedd
dZdde
edddZefeedddZeedddZeedddZedddZddddZddeeed d!d"Zddeeeeeefd d#d$Zddeeeeeefd d%d&Ze
dd'd(Zeed)d*d+Zeed)d,d-Zeed)d.d/Z eed0d1d2Z!e"eedd3d4Z#e"eedd5d6Z$dS)7r+z&Multipart reader for single body part.i CIMultiDictProxy[str]N)boundaryheadersrr8cCs`||_||_||_d|_|jtd}|dk	r6t|nd|_d|_t	|_
d|_d|_i|_
dS)NFr)r	_boundary_content_at_eofgetrint_length_read_bytesr_unread_prev_chunk_content_eof_cache)r{rrrZlengthr5r5r6r|szBodyPartReader.__init__r}cCs|Sr:r5r~r5r5r6r
szBodyPartReader.__aiter__cs|IdH}|dkrt|Sr:rrr5r5r6rszBodyPartReader.__anext__cs|IdH}|sdS|Sr:)readrr5r5r6rszBodyPartReader.nextFdecode)rr8csB|jr
dSt}|js0|||jIdHq|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	bytearrayextend
read_chunk
chunk_sizer)r{rdatar5r5r6rs
zBodyPartReader.read)sizer8csp|jr
dS|jr"||IdH}n||IdH}|jt|7_|j|jkrVd|_|jrl|jIdH}|S)zWReads body part content chunk of the specified size.

        size: chunk size
        rNT)rr_read_chunk_from_length_read_chunk_from_streamrlenrreadline)r{rchunkZclrfr5r5r6r,szBodyPartReader.read_chunkcs(t||j|j}|j|IdH}|Sr:)minrrrr)r{rrrr5r5r6rBsz&BodyPartReader._read_chunk_from_lengthc	s|jdk}|r"|j|IdH|_|j|IdH}|jt|j7_|j|}d|j}|rp||}n ||tdt	|jt	|}|dkrt
(t
jdt
d|j||dW5QRX||kr|jd||_|t	|j|}|sd|_|j}||_|S)N
rignore)categoryT)rrrrrrrrJmaxrr]catch_warningsfilterwarningsDeprecationWarningZunread_datar)r{rZfirst_chunkrZwindowrRidxresultr5r5r6rJs,


 

z&BodyPartReader._read_chunk_from_streamcs|jr
dS|jr|j}n|jIdH}||jrz|d}|j}|jd}||ksb||krd|_|j|dSn4|jIdH}||jr|dd}|j||S)z Reads body part by line by line.rNr--T)	rrpopleftrrrorrstriprv)r{lineZslinerZ
last_boundary	next_liner5r5r6rls$

zBodyPartReader.readlinecs(|jr
dS|js$||jIdHq
dS)z0Like read(), but reads all the data to the void.N)rrrr~r5r5r6rszBodyPartReader.release)rjrjr8cs,|jddIdH}|p |jdd}||S)z;Like read(), but assumes that body part contains text data.TrNrVdefault)rget_charsetrr{rjrr5r5r6rPszBodyPartReader.textcs:|jddIdH}|sdS|p(|jdd}t||S)z<Like read(), but assumes that body parts contains JSON data.TrNrVr)rrjsonloadsrrr5r5r6rs
zBodyPartReader.jsoncsL|jddIdH}|sgS|dk	r(|}n|jdd}t||d|dS)zXLike read(), but assumes that body parts contains form
        urlencoded data.
        TrNrVr)Zkeep_blank_valuesrj)rrrrr)r{rjrZ
real_encodingr5r5r6formszBodyPartReader.formcCs|jS)z<Returns True if the boundary was reached or False otherwise.rr~r5r5r6rszBodyPartReader.at_eof)rr8cCs,t|jkr||}t|jkr(||S|S)zrDecodes data according the specified Content-Encoding
        or Content-Transfer-Encoding headers value.
        )rr_decode_content_transferr_decode_content)r{rr5r5r6rs




zBodyPartReader.decodecCsb|jtd}|dkr*t|tjS|dkrDt|dtjS|dkrP|Std|dS)NrNdeflategzipidentityunknown content encoding: )rrrr`zlib
decompress	MAX_WBITSRuntimeErrorr{rrjr5r5r6rszBodyPartReader._decode_contentcCsT|jtd}|dkr$t|S|dkr6t|S|dkrB|Std	|dS)NrNbase64quoted-printable)binaryZ8bitZ7bit%unknown content transfer encoding: {})
rrrr`rZ	b64decodebinasciiZa2b_qprrdrr5r5r6rs

z'BodyPartReader._decode_content_transfer)rr8cCs$|jtd}t|}|jd|S)z>Returns charset parameter from Content-Type header or default.rNcharset)rrrr
parameters)r{rctypemimetyper5r5r6rszBodyPartReader.get_charsetcCst|jt\}}t|dS)zoReturns name specified in Content-Disposition header or None
        if missed or header is malformed.
        rnr.rrrr/r{rkrfr5r5r6rnszBodyPartReader.namecCst|jt\}}t|dS)zsReturns filename specified in Content-Disposition header or None
        if missed or header is malformed.
        rmrrr5r5r6rmszBodyPartReader.filename)%r2r3r4rrbytesr(r|rrrrrr;rrrrrrrrXrPrrrr	r
rrrrrrrrnrmr5r5r5r6r+s8"&&
r+)ordercs8eZdZeeeddfddZeddddZZS)BodyPartReaderPayloadN)riargskwargsr8csTtj|f||i}|jdk	r,|j|d<|jdk	r@|j|d<|rP|jd|dS)Nrnrm
attachmentT)rT)superr|rnrmZset_content_disposition)r{rirrrf	__class__r5r6r|s



zBodyPartReaderPayload.__init__writerr8csJ|j}|jddIdH}|rF|||IdH|jddIdH}qdS)Ni)r)rlrwriter)r{rZfieldrr5r5r6rs
zBodyPartReaderPayload.write)r2r3r4r+rr|r
__classcell__r5r5rr6rsrc@s.eZdZdZeZdZeZe	e
e
feddddZe
dddd	Zeedefdd
dZeded
ddZedddZeedefdddZddddZedefdddZdedefdddZe
dddZedddZddd d!Zddd"d#Zddd$d%Zddd&d'Z dS)(r)zMultipart body reader.N)rrr8cCs:||_d||_||_d|_d|_d|_g|_dS)Nz--FT)	r
_get_boundaryencoderr
_last_partr_at_bofr)r{rrr5r5r6r|szMultipartReader.__init__r+r}cCs|Sr:r5r~r5r5r6rszMultipartReader.__aiter__cs|IdH}|dkrt|Sr:rrr5r5r6r"szMultipartReader.__anext__r0)responser8cCs||||j|j}|S)zConstructs reader instance from HTTP response.

        :param response: :class:`~aiohttp.client.ClientResponse` instance
        )response_wrapper_clsrr)clsrobjr5r5r6
from_response*s
	zMultipartReader.from_responsecCs|jS)zSReturns True if the final boundary was reached or
        False otherwise.
        rr~r5r5r6r8szMultipartReader.at_eofcsb|jr
dS|IdH|jr4|IdHd|_n|IdH|jrLdS|IdH|_|jS)z#Emits the next multipart body part.NF)r_maybe_release_last_partr_read_until_first_boundary_read_boundaryfetch_next_partrr~r5r5r6r>szMultipartReader.nextcs2|js.|IdH}|dkrq.|IdHqdS)z=Reads all the body parts to the void till the final boundary.N)rrrrr5r5r6rPs
zMultipartReader.releasecs|IdH}||S)z"Returns the next body part reader.N)
_read_headers_get_part_reader)r{rr5r5r6rXszMultipartReader.fetch_next_partr)rr8cCs\|td}t|}|jdkrF|jdkr8t|||jS|||jS||j||jSdS)zDispatches the response by the `Content-Type` header, returning
        suitable reader instance.

        :param dict headers: Response headers
        rNZ	multipartN)rrrtypemultipart_reader_clsrpart_reader_clsr)r{rrrr5r5r6r_s	

z MultipartReader._get_part_readercCsPt|jt}d|jkr*td|jt|jd}t|dkrLtd||S)Nrz$boundary missed for Content-Type: %sFz&boundary %r is too long (70 chars max))rrrr
ValueErrorr)r{rrr5r5r6rrs

zMultipartReader._get_boundarycs |jr|jS|jIdHSr:)rr_rrr~r5r5r6	_readlines
zMultipartReader._readlinecsX|IdH}|dkr$td|j|}||jkr:dS||jdkrd|_dSqdS)Nrz#Could not find starting boundary %rrT)rrrrrr{rr5r5r6rs
z*MultipartReader._read_until_first_boundarycs|IdH}||jkrnv||jdkr~d|_|IdH}|IdH}|dddkrl|j|q|j||gntd|d|jdS)NrTrCzInvalid boundary z, expected )rrrrrrvrr)r{rZepiloguerr5r5r6rs
zMultipartReader._read_boundarycsHdg}|jIdH}|}|||sq0qt}||\}}|S)Nr)rrrarvr Z
parse_headers)r{linesrparserrZraw_headersr5r5r6rs
zMultipartReader._read_headerscs>|jdk	r:|js$|jIdH|j|jjd|_dS)z8Ensures that the last read body part is read completely.N)rrrrrr~r5r5r6rs


z(MultipartReader._maybe_release_last_part)!r2r3r4rrxrrr+rr
rXr(r|rrrrrclassmethodrr;rrrrrrrrrrrrr5r5r5r6r)s8



	
r)csreZdZdZd)eeeddfdd
Zdddd	Zeee	ee	ee
dd
ddZee
dd
dZedddZedddZedZedZeedddZeedddZd*eeeeedddZeedddZd+eeeeeddd Zd,e e!e"eefe#eeffeeeedd!d"Z$eeedd#d$Z%d-eedd&d'd(Z&Z'S).r*zMultipart body writer.mixedN)subtyperr8csr|dk	r|ntj}z|d|_Wntk
rDtddYnXd|d|j}tj	d|dg|_
dS)Nasciiz(boundary should contain ASCII only charsz
multipart/z; boundary=)content_type)uuidZuuid4hexrrUnicodeEncodeErrorr_boundary_valuerr|_parts)r{rrrrr5r6r|szMultipartWriter.__init__r}cCs|Sr:r5r~r5r5r6	__enter__szMultipartWriter.__enter__)exc_typeexc_valexc_tbr8cCsdSr:r5)r{rr	r
r5r5r6__exit__szMultipartWriter.__exit__cCs
t|jSr:)iterrr~r5r5r6__iter__szMultipartWriter.__iter__cCs
t|jSr:)rrr~r5r5r6__len__szMultipartWriter.__len__cCsdS)NTr5r~r5r5r6__bool__szMultipartWriter.__bool__s\A[!#$%&'*+\-.^_`|~\w]+\Zs[\x00-\x08\x0A-\x1F\x7F]cCs^|j}t|j|r|dSt|j|r4td|dd}|dd}d|ddS)zyWrap boundary parameter value in quotes, if necessary.

        Reads self.boundary and returns a unicode sting.
        rz*boundary value contains invalid characters\s\\"s\"r@)	rrQmatch_valid_tchar_regexrsearch_invalid_qdtext_char_regexrreplace)r{riZquoted_value_contentr5r5r6rs
zMultipartWriter._boundary_valuecCs|jdS)Nr)rrr~r5r5r6rszMultipartWriter.boundary)rrr8cCsn|dkrt}t|tr.|j|||Szt||d}Wn tk
r^td|YnX||SdS)NrzCannot create payload from %r)	r
isinstancer$rupdateappend_payloadr&r"	TypeError)r{rrpayloadr5r5r6rvs

zMultipartWriter.append)rr8cCs|jtd}|r,|dkr,td||dkr8d}|jtd}|dkr`td||dkrld}|j}|dk	r|s|st||jt	<|j
|||f|S)	z)Adds a new body part to multipart writer.rN)rrrrrN)rNrrrrr)rrrr`rrrdrrXrrrv)r{rrjte_encodingrr5r5r6r"s.zMultipartWriter.append_payloadcCs |dkrt}|t||dS)zHelper to append JSON part.Nr)rrr!)r{rrr5r5r6append_jsonBszMultipartWriter.append_jsoncCsD|dkrt}t|tr$t|}t|dd}|t||ddS)z&Helper to append form urlencoded part.NT)Zdoseqz!application/x-www-form-urlencoded)rr)rrr
listrtrrr%)r{rrrr5r5r6append_formKs
zMultipartWriter.append_formcCsvd}|jD]P\}}}|s&|s&|jdkr,dS|tdt|jd|jt|jd7}q
|dt|jd7}|S)zSize of the payload.rNrC)rrrrr_binary_headers)r{Ztotalrrjrr5r5r6r`s&	zMultipartWriter.sizeT)rclose_boundaryr8cs|jD]\}}}|d|jdIdH||jIdH|sD|rt|}|rZ|||rh||||IdH|IdHn||IdH|dIdHq|r|d|jdIdHdS)zWrite body.rrNs--
)rrrr"MultipartPayloadWriterenable_compressionenable_encoding	write_eof)r{rr#rrjrwr5r5r6rts

zMultipartWriter.write)rN)N)N)N)T)(r2r3r4rrXrr|rr
BaseExceptionrrr_Partr
rrr;rrQcompilerrpropertyrrrrr$rvrrrrr
r
r rrrr5r5rr6r*sD


!

r*c@s\eZdZeddddZeddddZdeddd	d
Zdddd
Ze	ddddZ
dS)r$NrcCs||_d|_d|_d|_dSr:)_writer	_encoding	_compress_encoding_buffer)r{rr5r5r6r|szMultipartPayloadWriter.__init__rcCs*|dkr||_t|_n|dkr&d|_dS)Nrr)r.rr0)r{rjr5r5r6r&s

z&MultipartPayloadWriter.enable_encodingrcCs,|dkrdtjntj}tj|d|_dS)Nrr)Zwbits)rrZcompressobjr/)r{rjZ	zlib_moder5r5r6r%sz)MultipartPayloadWriter.enable_compressionr}cs\|jdk	r.|j}|r.d|_||IdH|jdkrX|jrX|jt|jIdHdS)Nr)r/flushrr.r0r-r	b64encoderr5r5r6r's


z MultipartPayloadWriter.write_eof)rr8cs|jdk	r"|r"|j|}|s"dS|jdkr|j}|||rtt|d\}}|d|d||dd}|_|rt|}|j	
|IdHn6|jdkr|j	
t|IdHn|j	
|IdHdS)Nrr)
r/compressr.r0rdivmodrrr2r-rrZb2a_qp)r{rZbufZdivmodZ	enc_chunkZb64chunkr5r5r6rs"


$

zMultipartPayloadWriter.write)r)r2r3r4rr|rXr&r%r'rrr5r5r5r6r$s
r$)rm)HrrrrQrr]rcollectionsrtypesrtypingrrrrrr	r
rrr
rrZurllib.parserrrZ	multidictrrrZhdrsrrrrrZhelpersrrrrZhttpr rr!r"r#r$r%r&r'Zstreamsr(__all__Z
client_reqrepr0RuntimeWarningr,r-rXr.r/rxr+Z	try_firstrr)r*r*r$r5r5r5r6<module>sR8$	d
!-z;H
Back to Directory File Manager