o
    ùT·j*!  ã                   @  s`  d dl mZ d dlZd dlZd dl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 dd	lmZ dd
lmZmZmZmZmZmZ ddlmZm Z  dgZ!G dd„ deeƒZ"G dd„ deƒZ#G dd„ deƒZ$G dd„ deeƒZ%d;dd„Z&d<dd„Z'd=d$d%„Z(d>d(d)„Z)d?d+d,„Z*d@d/d0„Z+					dAdBd5d6„Z,				dCdDd9d:„Z-dS )Eé    )ÚannotationsN)ÚAsyncGeneratorÚAsyncIterableÚAsyncIteratorÚIterableÚIteratorÚMapping)Údumps)ÚAny)Ú	urlencodeé   )ÚStreamClosedÚStreamConsumed)ÚMultipartStream)ÚAsyncByteStreamÚRequestContentÚRequestDataÚRequestFilesÚResponseContentÚSyncByteStream)Úpeek_filelike_remaining_lengthÚprimitive_value_to_strÚ
ByteStreamc                   @  s*   e Zd Zddd„Zddd	„Zddd„ZdS )r   ÚstreamÚbytesÚreturnÚNonec                 C  s
   || _ d S ©N©Ú_stream©Úselfr   © r"   úR/home/dinkstrade/pdmp-scanner/venv/lib/python3.10/site-packages/httpx2/_content.pyÚ__init__   s   
zByteStream.__init__úIterator[bytes]c                 c  s   � | j V  d S r   r   ©r!   r"   r"   r#   Ú__iter__   ó   €zByteStream.__iter__úAsyncIterator[bytes]c                 C s   �| j V  d S r   r   r&   r"   r"   r#   Ú	__aiter__"   r(   zByteStream.__aiter__N)r   r   r   r   ©r   r%   ©r   r)   )Ú__name__Ú
__module__Ú__qualname__r$   r'   r*   r"   r"   r"   r#   r      s    

c                   @  ó$   e Zd ZdZddd„Zdd	d
„ZdS )ÚIteratorByteStreamé   r   úIterable[bytes]r   r   c                 C  ó   || _ d| _t |¡| _d S ©NF)r   Ú_is_stream_consumedÚinspectÚisgeneratorÚ_is_generatorr    r"   r"   r#   r$   )   ó   zIteratorByteStream.__init__r%   c                 c  sh   � | j r
| jr
tƒ ‚d| _ t| jdƒr,| j | j¡}|r*|V  | j | j¡}|sd S d S | jE d H  d S )NTÚread)r6   r9   r   Úhasattrr   r;   Ú
CHUNK_SIZE)r!   Úchunkr"   r"   r#   r'   .   s   €þzIteratorByteStream.__iter__N)r   r3   r   r   r+   )r-   r.   r/   r=   r$   r'   r"   r"   r"   r#   r1   &   ó    
r1   c                   @  r0   )ÚAsyncIteratorByteStreamr2   r   úAsyncIterable[bytes]r   r   c                 C  r4   r5   )r   r6   r7   Ú
isasyncgenr9   r    r"   r"   r#   r$   A   r:   z AsyncIteratorByteStream.__init__r)   c              	   C sÈ   �| j r
| jr
tƒ ‚d| _ t| jdƒr2| j | j¡I d H }|r0|V  | j | j¡I d H }|sd S d S | j ¡ }z|2 z	3 d H W }|V  q:6 W t|t	ƒrT| 
¡ I d H  d S d S t|t	ƒrc| 
¡ I d H  w w )NTÚaread)r6   r9   r   r<   r   rC   r=   r*   Ú
isinstancer   Úaclose)r!   r>   r   Úpartr"   r"   r#   r*   F   s(   €þ
ÿ
ÿÿz!AsyncIteratorByteStream.__aiter__N)r   rA   r   r   r,   )r-   r.   r/   r=   r$   r*   r"   r"   r"   r#   r@   >   r?   r@   c                   @  s$   e Zd ZdZd
dd„Zddd„Zd	S )ÚUnattachedStreamzÀ
    If a request or response is serialized using pickle, then it is no longer
    attached to a stream for I/O purposes. Any stream operations should result
    in `httpx2.StreamClosed`.
    r   r%   c                 C  s   t ƒ ‚r   ©r   r&   r"   r"   r#   r'   d   s   zUnattachedStream.__iter__r)   c                 C s   �t ƒ ‚r   rH   r&   r"   r"   r#   r*   g   s   €zUnattachedStream.__aiter__Nr+   r,   )r-   r.   r/   Ú__doc__r'   r*   r"   r"   r"   r#   rG   ]   s    
rG   Úcontentú4str | bytes | Iterable[bytes] | AsyncIterable[bytes]r   ú7tuple[dict[str, str], SyncByteStream | AsyncByteStream]c                 C  sÄ   t | ttfƒr't | tƒr|  d¡n| }t|ƒ}|rdt|ƒini }|t|ƒfS t | tƒrJt | tƒsJt| ƒ}|d u r>ddi}ndt|ƒi}|t	| ƒfS t | t
ƒrYddi}|t| ƒfS tdt| ƒ›�ƒ‚)Núutf-8úContent-LengthzTransfer-EncodingÚchunkedzUnexpected type for 'content', )rD   r   ÚstrÚencodeÚlenr   r   Údictr   r1   r   r@   Ú	TypeErrorÚtype)rJ   ÚbodyÚcontent_lengthÚheadersÚcontent_length_or_noner"   r"   r#   Úencode_contentl   s   

rZ   Údatar   ú!tuple[dict[str, str], ByteStream]c                   sˆ   g }|   ¡ D ]!\‰ }t|ttfƒr| ‡ fdd„|D ƒ¡ q| ˆ t|ƒf¡ qt|dd� d¡}t	t
|ƒƒ}d}||dœ}|t|ƒfS )Nc                   s   g | ]}ˆ t |ƒf‘qS r"   )r   )Ú.0Úitem©Úkeyr"   r#   Ú
<listcomp>�   s    z*encode_urlencoded_data.<locals>.<listcomp>T)ÚdoseqrM   z!application/x-www-form-urlencoded©rN   zContent-Type)ÚitemsrD   ÚlistÚtupleÚextendÚappendr   r   rQ   rP   rR   r   )r[   Ú
plain_dataÚvaluerV   rW   Úcontent_typerX   r"   r_   r#   Úencode_urlencoded_data‰   s   
rl   Úfilesr   Úboundaryúbytes | Noneú&tuple[dict[str, str], MultipartStream]c                 C  s   t | ||d�}| ¡ }||fS )N)r[   rm   rn   )r   Úget_headers)r[   rm   rn   Ú	multipartrX   r"   r"   r#   Úencode_multipart_data—   s   rs   ÚtextrP   c                 C  ó0   |   d¡}tt|ƒƒ}d}||dœ}|t|ƒfS )NrM   ztext/plain; charset=utf-8rc   ©rQ   rP   rR   r   )rt   rV   rW   rk   rX   r"   r"   r#   Úencode_textŸ   ó
   

rw   Úhtmlc                 C  ru   )NrM   ztext/html; charset=utf-8rc   rv   )ry   rV   rW   rk   rX   r"   r"   r#   Úencode_html§   rx   rz   Újsonr
   c                 C  s<   t | dddd� d¡}tt|ƒƒ}d}||dœ}|t|ƒfS )NF)ú,ú:)Úensure_asciiÚ
separatorsÚ	allow_nanrM   zapplication/jsonrc   )Ú
json_dumpsrQ   rP   rR   r   )r{   rV   rW   rk   rX   r"   r"   r#   Úencode_json¯   s
   
r‚   úRequestContent | NoneúRequestData | NoneúRequestFiles | Noneú
Any | Nonec                 C  sz   |durt |tƒsd}tj|tdd� t|ƒS | durt| ƒS |r)t|p%i ||ƒS |r/t|ƒS |dur7t|ƒS i t	dƒfS )z€
    Handles encoding the given `content`, `data`, `files`, and `json`,
    returning a two-tuple of (<headers>, <stream>).
    Nz5Use 'content=<...>' to upload raw bytes/text content.é   )Ú
stackleveló    )
rD   r   ÚwarningsÚwarnÚDeprecationWarningrZ   rs   rl   r‚   r   )rJ   r[   rm   r{   rn   Úmessager"   r"   r#   Úencode_request·   s   rŽ   úResponseContent | Noneú
str | Nonec                 C  sL   | durt | ƒS |durt|ƒS |durt|ƒS |dur t|ƒS i tdƒfS )zc
    Handles encoding the given `content`, returning a two-tuple of
    (<headers>, <stream>).
    Nr‰   )rZ   rw   rz   r‚   r   )rJ   rt   ry   r{   r"   r"   r#   Úencode_responseÚ   s   
r‘   )rJ   rK   r   rL   )r[   r   r   r\   )r[   r   rm   r   rn   ro   r   rp   )rt   rP   r   r\   )ry   rP   r   r\   )r{   r
   r   r\   )NNNNN)rJ   rƒ   r[   r„   rm   r…   r{   r†   rn   ro   r   rL   )NNNN)
rJ   r�   rt   r�   ry   r�   r{   r†   r   rL   ).Ú
__future__r   r7   rŠ   Úcollections.abcr   r   r   r   r   r   r{   r	   r�   Útypingr
   Úurllib.parser   Ú_exceptionsr   r   Ú
_multipartr   Ú_typesr   r   r   r   r   r   Ú_utilsr   r   Ú__all__r   r1   r@   rG   rZ   rl   rs   rw   rz   r‚   rŽ   r‘   r"   r"   r"   r#   Ú<module>   sB      





	û$ü