o
    h                     @   s  d dl Z d dl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 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  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ee%e&e
e& ee& f dee	e%e%f eeef f fddZ'dedee	e%e%f e!f fddZ(dededee& dee	e%e%f ef fddZ)de%dee	e%e%f e!f fddZ*d e%dee	e%e%f e!f fd!d"Z+d#edee	e%e%f e!f fd$d%Z,					d*dee dee dee d#ee dee& dee	e%e%f eeef f fd&d'Z-				d+dee dee% d ee% d#ee dee	e%e%f eeef f f
d(d)Z.dS ),    N)dumps)
AnyAsyncIterableAsyncIteratorDictIterableIteratorMappingOptionalTupleUnion)	urlencode   )StreamClosedStreamConsumed)MultipartStream)AsyncByteStreamRequestContentRequestDataRequestFilesResponseContentSyncByteStream)peek_filelike_lengthprimitive_value_to_strc                   @   sB   e Zd ZdeddfddZdee fddZdee fdd	ZdS )

ByteStreamstreamreturnNc                 C   s
   || _ d S N_streamselfr    r"   D/var/www/html/ai/venv/lib/python3.10/site-packages/httpx/_content.py__init__    s   
zByteStream.__init__c                 c   s    | j V  d S r   r   r!   r"   r"   r#   __iter__#      zByteStream.__iter__c                 C  s   | j V  d S r   r   r%   r"   r"   r#   	__aiter__&   r'   zByteStream.__aiter__)	__name__
__module____qualname__bytesr$   r   r&   r   r(   r"   r"   r"   r#   r      s    r   c                   @   8   e Zd ZdZdee ddfddZdee fddZdS )	IteratorByteStream   r   r   Nc                 C      || _ d| _t|| _d S NF)r   _is_stream_consumedinspectisgenerator_is_generatorr    r"   r"   r#   r$   -      zIteratorByteStream.__init__c                 c   sn    | j r
| jr
t d| _ t| jdr,| j| j}|r*|V  | j| j}|sd S d S | jD ]}|V  q/d S )NTread)r2   r5   r   hasattrr   r7   
CHUNK_SIZEr!   chunkpartr"   r"   r#   r&   2   s   
zIteratorByteStream.__iter__)	r)   r*   r+   r9   r   r,   r$   r   r&   r"   r"   r"   r#   r.   *       r.   c                   @   r-   )	AsyncIteratorByteStreamr/   r   r   Nc                 C   r0   r1   )r   r2   r3   
isasyncgenr5   r    r"   r"   r#   r$   F   r6   z AsyncIteratorByteStream.__init__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2 z	3 d H W }|V  q56 d S )NTaread)r2   r5   r   r8   r   r@   r9   r:   r"   r"   r#   r(   K   s   z!AsyncIteratorByteStream.__aiter__)	r)   r*   r+   r9   r   r,   r$   r   r(   r"   r"   r"   r#   r>   C   r=   r>   c                   @   s4   e Zd ZdZdee fddZdee f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 `httpx.StreamClosed`.
    r   c                 C   s   t  r   r   r%   r"   r"   r#   r&   c   s   zUnattachedStream.__iter__c                 C  s   t  r   rB   r%   r"   r"   r#   r(   f   s   zUnattachedStream.__aiter__N)	r)   r*   r+   __doc__r   r,   r&   r   r(   r"   r"   r"   r#   rA   \   s    rA   contentr   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', )
isinstancer,   strencodelenr   r   dictr   r.   r   r>   	TypeErrortype)rD   bodycontent_lengthheaderscontent_length_or_noner"   r"   r#   encode_contentk   s   

rS   datac                    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)doseqrE   z!application/x-www-form-urlencodedrF   zContent-Type)itemsrH   listtupleextendappendr   r   rJ   rI   rK   r   )rT   
plain_datavaluerO   rP   content_typerQ   r"   rW   r#   encode_urlencoded_data   s   
rd   filesboundaryc                 C   s   t | ||d}| }||fS )N)rT   re   rf   )r   get_headers)rT   re   rf   	multipartrQ   r"   r"   r#   encode_multipart_data   s   ri   textc                 C   0   |  d}tt|}d}||d}|t|fS )NrE   ztext/plain; charset=utf-8r[   rJ   rI   rK   r   )rj   rO   rP   rc   rQ   r"   r"   r#   encode_text   
   

rm   htmlc                 C   rk   )NrE   ztext/html; charset=utf-8r[   rl   )ro   rO   rP   rc   rQ   r"   r"   r#   encode_html   rn   rp   jsonc                 C   s4   t | d}tt|}d}||d}|t|fS )NrE   zapplication/jsonr[   )
json_dumpsrJ   rI   rK   r   )rq   rO   rP   rc   rQ   r"   r"   r#   encode_json   s
   
rs   c                 C   sv   |durt |tsd}t|t t|S | durt| S |r't|p#i ||S |r-t|S |dur5t|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.    )
rH   r	   warningswarnDeprecationWarningrS   ri   rd   rs   r   )rD   rT   re   rq   rf   messager"   r"   r#   encode_request   s   ry   c                 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>).
    Nrt   )rS   rm   rp   rs   r   )rD   rj   ro   rq   r"   r"   r#   encode_response   s   
rz   )NNNNN)NNNN)/r3   ru   rq   r   rr   typingr   r   r   r   r   r   r	   r
   r   r   urllib.parser   _exceptionsr   r   
_multipartr   _typesr   r   r   r   r   r   _utilsr   r   r   r.   r>   rA   rI   r,   rS   rd   ri   rm   rp   rs   ry   rz   r"   r"   r"   r#   <module>   s    0 


"""	
$