Your IP : 216.73.216.213


Current Path : /opt/alt/python35/lib64/python3.5/site-packages/aiohttp/__pycache__/
Upload File :
Current File : //opt/alt/python35/lib64/python3.5/site-packages/aiohttp/__pycache__/multipart.cpython-35.pyc



���Z�s�@s�ddlZddlZddlZddlZddlZddlZddlZddlmZm	Z	m
Z
ddlmZm
Z
mZddlmZddlmZmZmZmZmZddlmZmZmZmZddlmZdd	lmZm Z m!Z!m"Z"m#Z#m$Z$dZ%Gdd
�d
e&�Z'Gdd�de&�Z(dd�Z)ddd�Z*Gdd�d�Z+Gdd�d�Z,e$e,�Gdd�de!��Z-Gdd
�d
�Z.Gdd�de!�Z/Gdd�d�Z0dS) �N)�Mapping�Sequence�deque)�	parse_qsl�unquote�	urlencode)�CIMultiDict�)�CONTENT_DISPOSITION�CONTENT_ENCODING�CONTENT_LENGTH�CONTENT_TRANSFER_ENCODING�CONTENT_TYPE)�CHAR�TOKEN�parse_mimetype�reify)�
HttpParser)�JsonPayload�LookupError�Payload�
StringPayload�get_payload�payload_type�MultipartReader�MultipartWriter�BodyPartReader�BadContentDispositionHeader�BadContentDispositionParam�parse_content_disposition�content_disposition_filenamec@seZdZdS)rN)�__name__�
__module__�__qualname__�r$r$�D/opt/alt/python35/lib64/python3.5/site-packages/aiohttp/multipart.pyrsc@seZdZdS)rN)r!r"r#r$r$r$r%rscs\dd��dd�}�fdd�}dd�}d	d
�}ddjttjt��d
d�}|sydifS|jd�^}}�|�s�tjt|��difSi}x�|rK|j	d�}	d|	kr�tjt|��difS|	jdd�\}
}|
j
�j�}
|j�}|
|kr]tjt|��difS�|
�s�tjt
|	��q�n�||
�r�||�r�||dd��}q>�|�s>tjt
|	��q�nf||
�rt||�r|jdd�\}}
}|pd}ntjt
|	��q�yt||d�}Wq>tk
rptjt
|	��w�Yq>Xn�d}||�r�d}||dd�jd��}nm�|�r�d}nX|rd||df}||�r|j	d�||dd�jd��}d}|r>tjt|��difS|||
<q�W|j
�|fS)NcSs|ott|�kS)N)r�set)�stringr$r$r%�is_token$sz+parse_content_disposition.<locals>.is_tokencSs |d|dkodkSS)Nrr	�"���r$)r'r$r$r%�	is_quoted'sz,parse_content_disposition.<locals>.is_quotedcs�|�o|jd�dkS)N�'�)�count)r')r(r$r%�
is_rfc5987*sz-parse_content_disposition.<locals>.is_rfc5987cSs
|jd�S)N�*)�endswith)r'r$r$r%�is_extended_param-sz4parse_content_disposition.<locals>.is_extended_paramcSsV|jd�d}|sdS|jd�r<||d�n
||d�}|j�S)Nr0r	Fr*)�findr1�isdigit)r'�posZ	substringr$r$r%�is_continuous_param0s
/z6parse_content_disposition.<locals>.is_continuous_param�chars�cSstjdj|�d|�S)Nz\\([{}])z\1)�re�sub�format)�textr7r$r$r%�unescape7sz+parse_content_disposition.<locals>.unescape�;r�=r	r,r-zutf-8�strictTFz\/z%s;%sr*r*r*)�join�mapr9�escaper�split�warnings�warnr�pop�lower�strip�lstriprr�UnicodeDecodeError)�headerr+r/r2r6r=Zdisptype�parts�params�item�key�value�encoding�_�failed�_valuer$)r(r%r"sz'

	


"	

�filenamec
sHd|�|sdS�|kr(|�S||kr<||Sg}t�fdd�|j�D��}xzt|�D]l\}\}}|jdd�\}}|jd�r�|dd�}|t|�kr�|j|�qtPqtW|s�dSdj|�}d|kr@|jdd�\}	}}|	p-d	}	t||	d
�S|SdS)Nz%s*c3s0|]&\}}|j��r||fVqdS)N)�
startswith)�.0rPrQ)�name_sufr$r%�	<genexpr>�s	z/content_disposition_filename.<locals>.<genexpr>r0r	r8r,r-zutf-8r@r*)	�sorted�items�	enumeraterDr1�str�appendrAr)
rN�namerMZfnparams�numrPrQrS�tailrRr$)rYr%r �s2
c@s^eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dS)�MultipartResponseWrapperz~Wrapper around the MultipartBodyReader.

    It takes care about
    underlying connection and close it when it needs in.
    cCs||_||_dS)N)�resp�stream)�selfrdrer$r$r%�__init__�s	z!MultipartResponseWrapper.__init__cCs|S)Nr$)rfr$r$r%�	__aiter__�sz"MultipartResponseWrapper.__aiter__c�s'|j�IdH}|dkr#t�|S)N)�next�StopAsyncIteration)rf�partr$r$r%�	__anext__�sz"MultipartResponseWrapper.__anext__cCs|jjj�S)z2Returns True when all response data had been read.)rd�content�at_eof)rfr$r$r%rn�szMultipartResponseWrapper.at_eofc�s6|jj�IdH}|jj�r2|j�IdH|S)z#Emits next multipart reader object.N)rerirn�release)rfrOr$r$r%ri�szMultipartResponseWrapper.nextc�s|jj�IdHdS)zPReleases the connection gracefully, reading all the content
        to the void.N)rdro)rfr$r$r%ro�sz MultipartResponseWrapper.releaseN)
r!r"r#�__doc__rgrhrlrnriror$r$r$r%rc�srcc@s6eZdZdZdZdd�Zdd�Zdd�Zd	d
�Zddd
d�Z	edd�Z
dd�Zdd�Zdd�Z
dd�Zdddd�Zdddd�Zdddd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zdd)d*�Zed+d,��Zed-d.��ZdS)/rz&Multipart reader for single body part.i cCs�||_||_||_d|_|jjtd�}|dk	rQt|�nd|_d|_t	�|_
d|_d|_i|_
dS)NFr)�headers�	_boundary�_content�_at_eof�getr�int�_length�_read_bytesr�_unread�_prev_chunk�_content_eof�_cache)rf�boundaryrqrm�lengthr$r$r%rg�s				!			zBodyPartReader.__init__cCs|S)Nr$)rfr$r$r%rh�szBodyPartReader.__aiter__c�s'|j�IdH}|dkr#t�|S)N)rirj)rfrkr$r$r%rl�szBodyPartReader.__anext__c�s|j�IdH}|sdS|S)N)�read)rfrOr$r$r%ri�szBodyPartReader.next�decodeFc�s[|jr
dSt�}x+|jsC|j|j|j�IdH�qW|rW|j|�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)rt�	bytearray�extend�
read_chunk�
chunk_sizer�)rfr��datar$r$r%r�s		"
zBodyPartReader.readc�s�|jr
dS|jr-|j|�IdH}n|j|�IdH}|jt|�7_|j|jkrqd|_|jr�|jj�IdH}d|ks�td��|S)zWReads body part content chunk of the specified size.

        size: chunk size
        r�NTs
z3reader did not read all the data or it is malformed)	rtrw�_read_chunk_from_length�_read_chunk_from_streamrx�lenrs�readline�AssertionError)rf�size�chunkZclrfr$r$r%r��s					zBodyPartReader.read_chunkc�sO|jdk	std��t||j|j�}|jj|�IdH}|S)Nz(Content-Length required for chunked read)rwr��minrxrsr)rfr�r�r�r$r$r%r�s
	z&BodyPartReader._read_chunk_from_lengthc�s�|t|j�dks%td��|jdk}|rT|jj|�IdH|_|jj|�IdH}|jt|jj��7_|jdks�td��|j|}d|j}|r�|j	|�}n.|j	|t
dt|j�t|���}|dkrt|jj||d��||krL|jd|�|_|t|j�|�}|std|_|j}||_|S)Nr-z<Chunk size must be greater or equal than boundary length + 2�zReading after EOFs
rT)
r�rrr�rzrsrr{rvrnr3�maxZunread_datart)rfr�Zfirst_chunkr�Zwindowr:�idx�resultr$r$r%r�s.	

.			z&BodyPartReader._read_chunk_from_streamc�s�|jr
dS|jr(|jj�}n|jj�IdH}|j|j�r�|jd�}|j}|jd}||ks�||kr�d|_|jj|�dSnF|jj�IdH}|j|j�r�|dd�}|jj|�|S)z Reads body part by line by line.r�Ns
s--Tr-���)	rtry�popleftrsr�rWrr�rstripr_)rf�line�sliner}�
last_boundary�	next_liner$r$r%r�5s$			
	zBodyPartReader.readlinec�s6|jr
dSx"|js1|j|j�IdHqWdS)z0Like read(), but reads all the data to the void.N)rtr�r�)rfr$r$r%roRs	zBodyPartReader.releaserRNc�s<|jdd�IdH}|p,|jdd�}|j|�S)z;Like read(), but assumes that body part contains text data.r�TN�defaultzutf-8)r�get_charsetr�)rfrRr�r$r$r%r<YszBodyPartReader.textc�sO|jdd�IdH}|s!dS|p6|jdd�}tj|j|��S)z<Like read(), but assumes that body parts contains JSON data.r�TNr�zutf-8)rr��json�loadsr�)rfrRr�r$r$r%r�as
zBodyPartReader.jsonc�s^|jdd�IdH}|s!dS|p6|jdd�}t|j�j|�ddd|�S)zXLike read(), but assumes that body parts contains form
        urlencoded data.
        r�TNr�zutf-8�keep_blank_valuesrR)rr�rr�r�)rfrRr�r$r$r%�formiszBodyPartReader.formcCs|jS)z<Returns True if the boundary was reached or False otherwise.)rt)rfr$r$r%rnuszBodyPartReader.at_eofcCs>t|jkr|j|�}t|jkr:|j|�S|S)zrDecodes data according the specified Content-Encoding
        or Content-Transfer-Encoding headers value.
        )r
rq�_decode_content_transferr�_decode_content)rfr�r$r$r%r�ys

zBodyPartReader.decodecCs|jtj�}|dkr3tj|tj�S|dkrVtj|dtj�S|dkrf|Stdj|���dS)N�deflate�gzip��identityzunknown content encoding: {})rqrrH�zlib�
decompress�	MAX_WBITS�RuntimeErrorr;)rfr�rRr$r$r%r��szBodyPartReader._decode_contentcCsn|jtj�}|dkr,tj|�S|dkrEtj|�S|dkrU|Stdj|���dS)N�base64zquoted-printable�binary�8bit�7bitz%unknown content transfer encoding: {})r�r�r�)	rqr
rHr��	b64decode�binascii�a2b_qpr�r;)rfr�rRr$r$r%r��s

	z'BodyPartReader._decode_content_transfercCs4|jjtd�}t|�}|jjd|�S)z>Returns charset parameter from Content-Type header or default.r8�charset)rqrurr�
parameters)rfr��ctype�mimetyper$r$r%r��szBodyPartReader.get_charsetcCs+t|jjt��\}}t|d�S)zoReturns name specified in Content-Disposition header or None
        if missed or header is malformed.
        r`)rrqrur
r )rfrSrNr$r$r%r`�szBodyPartReader.namecCs+t|jjt��\}}t|d�S)zsReturns filename specified in Content-Disposition header or None
        if missed or header is malformed.
        rV)rrqrur
r )rfrSrNr$r$r%rV�szBodyPartReader.filename)r!r"r#rpr�rgrhrlrirr�r�r�r�ror<r�r�rnr�r�r�r�rr`rVr$r$r$r%r�s,
	

	cs.eZdZ�fdd�Zdd�Z�S)�BodyPartReaderPayloadcsnt�j|||�i}|jdk	r8|j|d<|jdk	rT|j|d<|rj|jd|�dS)Nr`rV�
attachment)�superrgr`rVZset_content_disposition)rfrQ�args�kwargsrN)�	__class__r$r%rg�s

zBodyPartReaderPayload.__init__c�s^|j}|jdd�IdH}x7|rY|j|j|��|jdd�IdH}q#WdS)Nr�r-r�ii)rUr��writer�)rf�writer�fieldr�r$r$r%r��s
		zBodyPartReaderPayload.write)r!r"r#rgr�r$r$)r�r%r��sr�c@s�eZdZdZeZdZeZdd�Z	dd�Z
dd�Zed	d
��Z
dd�Zd
d�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd �ZdS)!rzMultipart body reader.NcCsS||_d|j�j�|_||_d|_d|_d|_g|_dS)Nz--FT)	rq�
_get_boundary�encoderrrs�
_last_partrt�_at_bofry)rfrqrmr$r$r%rg�s					zMultipartReader.__init__cCs|S)Nr$)rfr$r$r%rh�szMultipartReader.__aiter__c�s'|j�IdH}|dkr#t�|S)N)rirj)rfrkr$r$r%rl�szMultipartReader.__anext__cCs%|j|||j|j��}|S)z�Constructs reader instance from HTTP response.

        :param response: :class:`~aiohttp.client.ClientResponse` instance
        )�response_wrapper_clsrqrm)�cls�response�objr$r$r%�
from_response�szMultipartReader.from_responsecCs|jS)zSReturns True if the final boundary was reached or
        False otherwise.
        )rt)rfr$r$r%rn�szMultipartReader.at_eofc�sw|jr
dS|j�IdH|jr@|j�IdHd|_n|j�IdH|jr\dS|j�IdH|_|jS)z#Emits the next multipart body part.NF)rt�_maybe_release_last_partr��_read_until_first_boundary�_read_boundary�fetch_next_partr�)rfr$r$r%ri�s			zMultipartReader.nextc�sAx:|js<|j�IdH}|dkr*P|j�IdHqWdS)z=Reads all the body parts to the void till the final boundary.N)rtriro)rfrOr$r$r%ro	s
zMultipartReader.releasec�s|j�IdH}|j|�S)z"Returns the next body part reader.N)�
_read_headers�_get_part_reader)rfrqr$r$r%r�szMultipartReader.fetch_next_partcCs�|jtd�}t|�}|jdkre|jdkrRt|�||j�S|j||j�S|j|j||j�SdS)z�Dispatches the response by the `Content-Type` header, returning
        suitable reader instance.

        :param dict headers: Response headers
        r8�	multipartN)rurr�type�multipart_reader_clsrs�part_reader_clsrr)rfrqr�r�r$r$r%r�sz MultipartReader._get_part_readercCs�t|jt�}|jdks.td��d|jkrTtd|jt��|jd}t|�dkr�td|��|S)Nr�z!multipart/* content type expectedr}z$boundary missed for Content-Type: %s�Fz&boundary %r is too long (70 chars max))rrqrr�r�r��
ValueErrorr�)rfr�r}r$r$r%r�&s	

zMultipartReader._get_boundaryc�s(|jr|jj�S|jj�IdHS)N)ryrGrsr�)rfr$r$r%�	_readline8s	
zMultipartReader._readlinec�szxs|j�IdH}|dkr3td|j��|j�}||jkrRdS||jdkrd|_dSqWdS)Nr�z#Could not find starting boundary %rs--T)r�r�rrr�rt)rfr�r$r$r%r�=s
	z*MultipartReader._read_until_first_boundaryc�s�|j�IdHj�}||jkr)n�||jdkr�d|_|j�IdH}|j�IdH}|dd�dkr�|jj|�q�|jj||g�ntd||jf��dS)Ns--Tr-z Invalid boundary %r, expected %r)r�r�rrrtryr_r�r�)rfr��epiloguer�r$r$r%r�Js	zMultipartReader._read_boundaryc�sfdg}x8|jj�IdH}|j�}|j|�|sPqWt�}|j|�^}}|S)Nr�)rsr�rIr_r�
parse_headers)rf�linesr��parserrqrSr$r$r%r�bs	
	zMultipartReader._read_headersc�sS|jdk	rO|jj�s0|jj�IdH|jj|jj�d|_dS)z8Ensures that the last read body part is read completely.N)r�rnroryr�)rfr$r$r%r�ns
z(MultipartReader._maybe_release_last_part)r!r"r#rprcr�r�rr�rgrhrl�classmethodr�rnriror�r�r�r�r�r�r�r�r$r$r$r%r�s&	

cs�eZdZdZdd�fdd�Zdd�Zdd	�Zd
d�Zdd
�Ze	j
d�Ze	j
d�Ze
dd��Ze
dd��Zddd�Zdd�Zddd�Zddd�Ze
dd��Zdd�Z�S) rzMultipart body writer.�mixedNcs�|dk	r|ntj�j}y|jd�|_Wn!tk
rZtd�d�YnXdj||j�}t	�j
dd|�g|_t�|_
|j|j
t<dS)N�asciiz(boundary should contain ASCII only charszmultipart/{}; boundary={}�content_type)�uuidZuuid4�hexr�rr�UnicodeEncodeErrorr�r;�_boundary_valuer�rg�_partsr�_headersr�r)rf�subtyper}r�)r�r$r%rgzs!
		zMultipartWriter.__init__cCs|S)Nr$)rfr$r$r%�	__enter__�szMultipartWriter.__enter__cCsdS)Nr$)rf�exc_type�exc_val�exc_tbr$r$r%�__exit__�szMultipartWriter.__exit__cCs
t|j�S)N)�iterr�)rfr$r$r%�__iter__�szMultipartWriter.__iter__cCs
t|j�S)N)r�r�)rfr$r$r%�__len__�szMultipartWriter.__len__s\A[!#$%&'*+\-.^_`|~\w]+\Zs[\x00-\x08\x0A-\x1F\x7F]cCs�|j}tj|j|�r+|jd�Stj|j|�rLtd��|jdd�}|jdd�}d|jd�dS)zyWrap boundary parameter value in quotes, if necessary.

        Reads self.boundary and returns a unicode sting.
        r�z*boundary value contains invalid characterss\s\\�"s\"r))	rrr9�match�_valid_tchar_regexr��search�_invalid_qdtext_char_regexr��replace)rfrQZquoted_value_contentr$r$r%r��s	
zMultipartWriter._boundary_valuecCs|jjd�S)Nr�)rrr�)rfr$r$r%r}�szMultipartWriter.boundarycCs�|dkrt�}t|t�r\|jdk	rF|jj|�n	||_|j|�Sy|jt|d|��SWntk
r�t	�YnXdS)Nrq)
r�
isinstancerrq�updater��append_payloadrr�	TypeError)rfr�rqr$r$r%r_�s		

zMultipartWriter.appendcCsHt|jkr|j|jt<|jjtd�j�}|ra|dkratdj|���|dkrsd}|jjtd�j�}|dkr�td
j|���|d	kr�d}|j	}|dk	r�|p�|r�t
|�|jt<djdd�|jj
�D��jd
�d}|jj||||f�|S)z)Adds a new body part to multipart writer.r8r�r�r�zunknown content encoding: {}Nr��quoted-printabler�z%unknown content transfer encoding: {}cSs(g|]\}}|d|d�qS)z: z
r$)rX�k�vr$r$r%�
<listcomp>�s	z2MultipartWriter.append_payload.<locals>.<listcomp>zutf-8s
)r�r�r�)r8r�r�r�)rrqr�rurrHr�r;r
r�r^rrAr\r�r�r_)rf�payloadrR�te_encodingr�rqr$r$r%r��s,			
zMultipartWriter.append_payloadcCs.|dkrt�}|jt|d|��S)zHelper to append JSON part.Nrq)rr�r)rfr�rqr$r$r%�append_json�s	zMultipartWriter.append_jsoncCs�t|ttf�st�|dkr0t�}t|t�rQt|j��}t|dd�}|jt	|d|dd��S)z&Helper to append form urlencoded part.N�doseqTrqr�z!application/x-www-form-urlencoded)
r�rrr�r�listr\rr�r)rfr�rqr�r$r$r%�append_form�s	zMultipartWriter.append_formcCs�|js
dSd}xl|jD]a\}}}}|sJ|sJ|jdkrNdS|dt|j�d|jt|�d7}qW|dt|j�d7}|S)zSize of the payload.rNr-�)r�r�r�rr)rf�totalrkrqrRr�r$r$r%r�s	%zMultipartWriter.sizec�s|js
dSx�|jD]�\}}}}|jd|jd�IdH|j|�IdH|sd|r�t|�}|r�|j|�|r�|j|�|j|�IdH|j�IdHn|j|�IdH|jd�IdHqW|jd|jd�IdHdS)zWrite body.Ns--s
s--
)r�r�rr�MultipartPayloadWriter�enable_compression�enable_encoding�	write_eof)rfr�rkrqrRr��wr$r$r%r�s 	

zMultipartWriter.write)r!r"r#rprgr�r�r�r�r9�compiler�r��propertyr�r}r_r�r�r�r�r�r$r$)r�r%rws  #c@sOeZdZdd�Zdd�Zddd�Zdd	�Zd
d�ZdS)
rcCs||_d|_d|_dS)N)�_writer�	_encoding�	_compress)rfr�r$r$r%rg:s		zMultipartPayloadWriter.__init__cCs=|dkr$||_t�|_n|dkr9d|_dS)Nr�zquoted-printable)r	r��_encoding_buffer)rfrRr$r$r%r?s
	z&MultipartPayloadWriter.enable_encodingr�cCs<|dkrdtjntj}tjd|�|_dS)Nr�r��wbits)r�r��compressobjr
)rfrR�	zlib_moder$r$r%rFs#z)MultipartPayloadWriter.enable_compressionc�s||jdk	r?|jj�}|r?d|_|j|�IdH|jdkrx|jrx|jjtj|j��IdHdS)Nr�)r
�flushr�r	rrr��	b64encode)rfr�r$r$r%rKs		z MultipartPayloadWriter.write_eofc�s|jdk	r1|r1|jj|�}|s1dS|jdkr�|jj|�|jr|j}tt|�d�\}}|d|d�||dd�}|_|rtj|�}|j	j
|�IdHnE|jdkr|j	j
tj|��IdHn|j	j
|�IdHdS)Nr�r�zquoted-printable)
r
�compressr	rr��divmodr�r�rrr�r��b2a_qp)rfr��bufferZdiv�modZ	enc_chunkr$r$r%r�Ws"		,!zMultipartPayloadWriter.writeN)r!r"r#rgrrrr�r$r$r$r%r8s
r)rrrrrrr )1r�r�r�r9r�rEr��collectionsrrr�urllib.parserrrZ	multidictr�hdrsr
rrr
r�helpersrrrr�httprr�rrrrrr�__all__�RuntimeWarningrrrr rcrr�rrrr$r$r$r%�<module>s6(".b%���