o
    Þ­j‰  ã                   @  sT  d dl mZ 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 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.d/„Z)					d@dAd4d5„Z*				dBdCd8d9„Z+dS )Dé    )ÚannotationsN)Údumps)ÚAnyÚAsyncIterableÚAsyncIteratorÚIterableÚIteratorÚMapping)Ú	urlencodeé   )ÚStreamClosedÚStreamConsumed)ÚMultipartStream)ÚAsyncByteStreamÚRequestContentÚRequestDataÚRequestFilesÚResponseContentÚSyncByteStream)Úpeek_filelike_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!   úK/var/www/html/CropPilot/venv/lib/python3.10/site-packages/httpx/_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  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)r5   r8   r   Úhasattrr   r:   Ú
CHUNK_SIZE©r    ÚchunkÚpartr!   r!   r"   r&   2   s   €þ
ÿzIteratorByteStream.__iter__N)r   r2   r   r   r*   )r,   r-   r.   r<   r#   r&   r!   r!   r!   r"   r0   *   ó    
r0   c                   @  r/   )ÚAsyncIteratorByteStreamr1   r   úAsyncIterable[bytes]r   r   c                 C  r3   r4   )r   r5   r6   Ú
isasyncgenr8   r   r!   r!   r"   r#   F   r9   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2 z	3 d H W }|V  q56 d S )NTÚaread)r5   r8   r   r;   r   rD   r<   r=   r!   r!   r"   r)   K   s   €þÿz!AsyncIteratorByteStream.__aiter__N)r   rB   r   r   r+   )r,   r-   r.   r<   r#   r)   r!   r!   r!   r"   rA   C   r@   rA   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 `httpx.StreamClosed`.
    r   r$   c                 C  s   t ƒ ‚r   ©r   r%   r!   r!   r"   r&   c   s   zUnattachedStream.__iter__r(   c                 C s   �t ƒ ‚r   rF   r%   r!   r!   r"   r)   f   s   €zUnattachedStream.__aiter__Nr*   r+   )r,   r-   r.   Ú__doc__r&   r)   r!   r!   r!   r"   rE   \   s    
rE   Ú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', )Ú
isinstancer   ÚstrÚencodeÚlenr   r   Údictr   r0   r   rA   Ú	TypeErrorÚtype)rH   ÚbodyÚcontent_lengthÚheadersÚcontent_length_or_noner!   r!   r"   Úencode_contentk   s   

rY   Ú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)ÚdoseqrK   z!application/x-www-form-urlencoded©rL   zContent-Type)ÚitemsrN   ÚlistÚtupleÚextendÚappendr   r
   rP   rO   rQ   r   )rZ   Ú
plain_dataÚvaluerU   rV   Úcontent_typerW   r!   r^   r"   Úencode_urlencoded_dataˆ   s   
rk   Úfilesr   Úboundaryúbytes | Noneú&tuple[dict[str, str], MultipartStream]c                 C  s   t | ||d�}| ¡ }||fS )N)rZ   rl   rm   )r   Úget_headers)rZ   rl   rm   Ú	multipartrW   r!   r!   r"   Úencode_multipart_data˜   s   rr   ÚtextrO   c                 C  ó0   |   d¡}tt|ƒƒ}d}||dœ}|t|ƒfS )NrK   ztext/plain; charset=utf-8rb   ©rP   rO   rQ   r   )rs   rU   rV   rj   rW   r!   r!   r"   Úencode_text    ó
   

rv   Úhtmlc                 C  rt   )NrK   ztext/html; charset=utf-8rb   ru   )rx   rU   rV   rj   rW   r!   r!   r"   Úencode_html¨   rw   ry   Újsonr   c                 C  s4   t | ƒ d¡}tt|ƒƒ}d}||dœ}|t|ƒfS )NrK   zapplication/jsonrb   )Ú
json_dumpsrP   rO   rQ   r   )rz   rU   rV   rj   rW   r!   r!   r"   Úencode_json°   s
   
r|   úRequestContent | NoneúRequestData | NoneúRequestFiles | Noneú
Any | Nonec                 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.ó    )
rN   r	   ÚwarningsÚwarnÚDeprecationWarningrY   rr   rk   r|   r   )rH   rZ   rl   rz   rm   Ú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�   )rY   rv   ry   r|   r   )rH   rs   rx   rz   r!   r!   r"   Úencode_responseÛ   s   
r‰   )rH   rI   r   rJ   )rZ   r   r   r[   )rZ   r   rl   r   rm   rn   r   ro   )rs   rO   r   r[   )rx   rO   r   r[   )rz   r   r   r[   )NNNNN)rH   r}   rZ   r~   rl   r   rz   r€   rm   rn   r   rJ   )NNNN)
rH   r‡   rs   rˆ   rx   rˆ   rz   r€   r   rJ   ),Ú
__future__r   r6   r‚   rz   r   r{   Útypingr   r   r   r   r   r	   Úurllib.parser
   Ú_exceptionsr   r   Ú
_multipartr   Ú_typesr   r   r   r   r   r   Ú_utilsr   r   Ú__all__r   r0   rA   rE   rY   rk   rr   rv   ry   r|   r†   r‰   r!   r!   r!   r"   Ú<module>   s@      





	û$ü