o
    n~b5                  	   @   s$  U 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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 d dlmZ ddlmZ ddlmZ dd	lmZmZm Z m!Z!m"Z" dd
l#m$Z$ ddl%m&Z&m'Z'm(Z( dZ)dZ*e&e+ e,d< erd dlm-Z- G dd de.Z/G dd de0ej1Z2dedededdfddZ3e2j4dded dede2ddfdd Z5G d!d" d"Z6ed Z7ee7ef Z8G d#d$ d$Z9G d%d deZ:G d&d' d'e:Z;G d(d) d)e;Z<G d*d+ d+e<Z=G d,d- d-e:Z>G d.d/ d/e>Z?G d0d1 d1e>Z@G d2d3 d3e>ZAG d4d5 d5e;ZBer-d d6lmCZCmDZD eDeE ZFeCeE ZGnd d6lHmCZCmDZD eDZFeCZGG d7d8 d8e:ZIG d9d: d:eIZJe9 ZKeKLe;eEeMeNf eKLe<e0 eKLe=ejO eKLe?ejP eKLe@ejQ eKLeAejRejSf eKLe>ejT eKLeJe$ eKjLeIeCe2jUd dS );    N)ABCabstractmethod)chain)IOTYPE_CHECKINGAny
ByteStringDictIterableOptionalTextIOTupleTypeUnion)CIMultiDict   )hdrs)AbstractStreamWriter)PY_36content_disposition_headerguess_filenameparse_mimetypesentinel)StreamReader)FinalJSONEncoder_CIMultiDict)PAYLOAD_REGISTRYget_payloadpayload_typePayloadBytesPayloadStringPayloadIOBasePayloadBytesIOPayloadBufferedReaderPayloadTextIOPayloadStringIOPayloadJsonPayloadAsyncIterablePayloadi   TOO_LARGE_BYTES_BODY)Listc                   @   s   e Zd ZdS )LookupErrorN)__name__
__module____qualname__ r0   r0   :/usr/local/lib/python3.10/dist-packages/aiohttp/payload.pyr,   <   s    r,   c                   @   s   e Zd ZdZdZdZdS )Ordernormal	try_firsttry_lastN)r-   r.   r/   r3   r4   r5   r0   r0   r0   r1   r2   @   s    r2   dataargskwargsreturnr    c                 O   s   t j| g|R i |S N)r   get)r6   r7   r8   r0   r0   r1   r   F   s   r   orderfactorytyper=   c                C   s   t j| ||d d S Nr<   )r   register)r>   r?   r=   r0   r0   r1   register_payloadJ   s   rB   c                   @   sD   e Zd ZejddededdfddZded	 ded	 fd
dZdS )r   r<   r?   r=   r9   Nc                C   s   || _ || _d S r:   )r?   r=   )selfr?   r=   r0   r0   r1   __init__Q   s   
zpayload_type.__init__r>   r    c                 C   s   t || j| jd |S r@   )rB   r?   r=   )rC   r>   r0   r0   r1   __call__U   s   zpayload_type.__call__)	r-   r.   r/   r2   r3   r   rD   r   rE   r0   r0   r0   r1   r   P   s    r   c                   @   s`   e Zd ZdZdddZeddeded	d
deddf
ddZej	dde
dededdfddZdS )PayloadRegistryzZPayload registry.

    note: we need zope.interface for more efficient adapter search
    r9   Nc                 C   s   g | _ g | _g | _d S r:   )_first_normal_lastrC   r0   r0   r1   rD   d   s   
zPayloadRegistry.__init__)_CHAINr6   r7   rK   z!Type[chain[_PayloadRegistryItem]]r8   r    c                O   sT   t |tr|S || j| j| jD ]\}}t ||r&||g|R i |  S qt r:   )
isinstancer    rG   rH   rI   r,   )rC   r6   rK   r7   r8   r>   r?   r0   r0   r1   r;   i   s   

zPayloadRegistry.getr<   r>   r?   r=   c                C   sh   |t ju r| j||f d S |t ju r| j||f d S |t ju r-| j||f d S td|)NzUnsupported order )	r2   r4   rG   appendr3   rH   r5   rI   
ValueError)rC   r>   r?   r=   r0   r0   r1   rA   x   s   


zPayloadRegistry.register)r9   N)r-   r.   r/   __doc__rD   r   r   r;   r2   r3   PayloadTyperA   r0   r0   r0   r1   rF   ^   s2    
	
rF   c                   @   s$  e Zd ZdZdZdeddfdedeee	e
eef eeeef  f  dee dee dee ded	dfd
dZed	ee fddZed	ee fddZed	e	fddZed	efddZed	ee fddZed	efddZ		d#dedededed	df
ddZed ed	dfd!d"ZdS )$r    application/octet-streamNvalueheaderscontent_typefilenameencodingr8   r9   c                 K   s   || _ || _t | _|| _|tur|d ur|| jtj< n"| jd ur7t	| jd }|d u r0| j
}|| jtj< n| j
| jtj< | j|pDi  d S Nr   )	_encoding	_filenamer   _headers_valuer   r   CONTENT_TYPE	mimetypes
guess_type_default_content_typeupdate)rC   rR   rS   rT   rU   rV   r8   r0   r0   r1   rD      s   
zPayload.__init__c                 C      | j S )zSize of the payload.)_sizerJ   r0   r0   r1   size      zPayload.sizec                 C   ra   )zFilename of the payload.)rY   rJ   r0   r0   r1   rU      rd   zPayload.filenamec                 C   ra   )zCustom item headers)rZ   rJ   r0   r0   r1   rS      rd   zPayload.headersc                 C   s$   d dd | j D dd S )N c                 S   s    g | ]\}}|d  | d qS )z: z
r0   ).0kvr0   r0   r1   
<listcomp>   s     z+Payload._binary_headers.<locals>.<listcomp>utf-8s   
)joinrS   itemsencoderJ   r0   r0   r1   _binary_headers   s   zPayload._binary_headersc                 C   ra   )zPayload encoding)rX   rJ   r0   r0   r1   rV      rd   zPayload.encodingc                 C   s   | j tj S )zContent type)rZ   r   r\   rJ   r0   r0   r1   rT      s   zPayload.content_typeTrj   disptypequote_fields_charsetparamsc                 K   s"   t |f||d|| jtj< dS )z$Sets ``Content-Disposition`` header.)rp   rq   N)r   rZ   r   CONTENT_DISPOSITION)rC   ro   rp   rq   rr   r0   r0   r1   set_content_disposition   s   zPayload.set_content_dispositionwriterc                    s   dS )zLWrite payload.

        writer is an AbstractStreamWriter instance:
        Nr0   rC   ru   r0   r0   r1   write   s    zPayload.write)Trj   )r-   r.   r/   r_   rb   r   r   r   r   r   r	   strr
   r   rD   propertyintrc   rU   rS   bytesrn   rV   rT   boolrt   r   r   rw   r0   r0   r0   r1   r       sf     	


c                       s@   e Zd Zdedededdf fddZdeddfd	d
Z  ZS )r!   rR   r7   r8   r9   Nc                    s   t |tttfstdt|d|vrd|d< t j|g|R i | t |tr0|j| _	nt
|| _	| j	tkrOtrAd| i}ni }tjdtfi | d S d S )Nz%value argument must be byte-ish, not rT   rQ   sourcez}Sending a large body directly with raw bytes might lock the event loop. You should probably pass an io.BytesIO object instead)rL   r{   	bytearray
memoryview	TypeErrorr?   superrD   nbytesrb   lenr*   r   warningswarnResourceWarningrC   rR   r7   r8   	__class__r0   r1   rD      s&   





zBytesPayload.__init__ru   c                    s   | | jI d H  d S r:   )rw   r[   rv   r0   r0   r1   rw      s   zBytesPayload.write)	r-   r.   r/   r   r   rD   r   rw   __classcell__r0   r0   r   r1   r!      s    r!   c                       sF   e Zd Zddddededee dee deddf fd	d
Z  ZS )r"   NrV   rT   rR   r7   rV   rT   r8   r9   c                   sp   |d u r|d u rd}d}nt |}|jdd}n
|d u r!d| }|}t j||g|R ||d| d S )Nrj   text/plain; charset=utf-8charsettext/plain; charset=%sr   )r   
parametersr;   r   rD   rm   )rC   rR   rV   rT   r7   r8   Zreal_encodingmimetyper   r0   r1   rD      s&   	
zStringPayload.__init__)r-   r.   r/   rx   r   r   rD   r   r0   r0   r   r1   r"      s     r"   c                       s2   e Zd Zdee dededdf fddZ  ZS )r'   rR   r7   r8   r9   Nc                    "   t  j| g|R i | d S r:   )r   rD   readr   r   r0   r1   rD        "zStringIOPayload.__init__)r-   r.   r/   r   rx   r   rD   r   r0   r0   r   r1   r'     s    *r'   c                       sZ   e Zd ZU ee ed< 	ddee dedededdf
 fd	d
ZdeddfddZ	  Z
S )r#   r[   
attachmentrR   dispositionr7   r8   r9   Nc                    sl   d|vr
t ||d< t j|g|R i | | jd ur0|d ur2tj| jvr4| j|| jd d S d S d S d S )NrU   )rU   )r   r   rD   rY   r   rs   rS   rt   )rC   rR   r   r7   r8   r   r0   r1   rD   !  s   zIOBasePayload.__init__ru   c              
      s   t  }z@|d | jjdI d H }|r8||I d H  |d | jjdI d H }|sW |d | jjI d H  d S W |d | jjI d H  d S |d | jjI d H  w )N   )asyncioget_event_looprun_in_executorr[   r   rw   close)rC   ru   loopchunkr0   r0   r1   rw   -  s   2zIOBasePayload.write)r   )r-   r.   r/   r   r   __annotations__rx   rD   r   rw   r   r0   r0   r   r1   r#     s   
 r#   c                       sx   e Zd ZU eed< ddddededee dee ded	df fd
dZe	d	ee
 fddZded	dfddZ  ZS )r&   r[   Nr   rR   r7   rV   rT   r8   r9   c                   sf   |d u r|d u rd}d}nt |}|jdd}n|d u r!d| }t j|g|R ||d| d S )Nrj   r   r   r   rT   rV   )r   r   r;   r   rD   )rC   rR   rV   rT   r7   r8   r   r   r0   r1   rD   ;  s$   	
zTextIOPayload.__init__c                 C   4   zt | j j| j  W S  ty   Y d S w r:   osfstatr[   filenost_sizetellOSErrorrJ   r0   r0   r1   rc   W  s
   zTextIOPayload.sizeru   c              
      s   t  }zN|d | jjdI d H }|rF| jr|j| jdn| }||I d H  |d | jjdI d H }|sW |d | jjI d H  d S W |d | jjI d H  d S |d | jjI d H  w )Nr   )rV   )	r   r   r   r[   r   rX   rm   rw   r   )rC   ru   r   r   r6   r0   r0   r1   rw   ^  s   	2	zTextIOPayload.write)r-   r.   r/   r   r   r   r   rx   rD   ry   rz   rc   r   rw   r   r0   r0   r   r1   r&   8  s(   
 r&   c                   @   s   e Zd ZedefddZdS )r$   r9   c                 C   s.   | j  }| j dtj}| j | || S rW   )r[   r   seekr   SEEK_END)rC   positionendr0   r0   r1   rc   o  s   
zBytesIOPayload.sizeN)r-   r.   r/   ry   rz   rc   r0   r0   r0   r1   r$   n  s    r$   c                   @   s"   e Zd Zedee fddZdS )r%   r9   c                 C   r   r:   r   rJ   r0   r0   r1   rc   x  s
   zBufferedReaderPayload.sizeN)r-   r.   r/   ry   r   rz   rc   r0   r0   r0   r1   r%   w  s    r%   c                       sD   e Zd Zddejfdedededededed	d
f fddZ  Z	S )r(   rj   zapplication/jsonrR   rV   rT   dumpsr7   r8   r9   Nc                    s.   t  j|||g|R ||d| d S )Nr   )r   rD   rm   )rC   rR   rV   rT   r   r7   r8   r   r0   r1   rD     s   

zJsonPayload.__init__)
r-   r.   r/   jsonr   r   rx   r   rD   r   r0   r0   r   r1   r(     s&    r(   )AsyncIterableAsyncIteratorc                       sD   e Zd ZdZdedededdf fddZdeddfd	d
Z  Z	S )r)   NrR   r7   r8   r9   c                    sT   t |tstdt|d|vrd|d< t j|g|R i | | | _d S )NzOvalue argument must support collections.abc.AsyncIterablebe interface, got {!r}rT   rQ   )	rL   r   r   formatr?   r   rD   	__aiter___iterr   r   r0   r1   rD     s   

zAsyncIterablePayload.__init__ru   c                    sL   | j r$z	 | j  I d H }||I d H  q ty#   d | _ Y d S w d S r:   )r   	__anext__rw   StopAsyncIteration)rC   ru   r   r0   r0   r1   rw     s   zAsyncIterablePayload.write)
r-   r.   r/   r   _AsyncIterabler   rD   r   rw   r   r0   r0   r   r1   r)     s    r)   c                       s.   e Zd Zdedededdf fddZ  ZS )StreamReaderPayloadrR   r7   r8   r9   Nc                    r   r:   )r   rD   Ziter_anyr   r   r0   r1   rD     r   zStreamReaderPayload.__init__)r-   r.   r/   r   r   rD   r   r0   r0   r   r1   r     s    &r   )Vr   enumior   r]   r   r   abcr   r   	itertoolsr   typingr   r   r   r   r	   r
   r   r   r   r   r   Z	multidictr   re   r   r   helpersr   r   r   r   r   streamsr   Ztypedefsr   r   r   __all__r*   rz   r   r+   	Exceptionr,   rx   Enumr2   r   r3   rB   r   rP   Z_PayloadRegistryItemrF   r    r!   r"   r'   r#   r&   r$   r%   r(   r   r   r{   Z_AsyncIteratorr   collections.abcr)   r   r   rA   r~   r   StringIO
TextIOBaseBytesIOBufferedReaderBufferedRandomIOBaser5   r0   r0   r0   r1   <module>   s   
 4

'U 6	
