a
    _g	/                     @  s  d Z ddlmZ ddlZddlZddlZddlZddlmZ zddl	Z	W n6 e
y~   zddlZ	W n e
yx   dZ	Y n0 Y n0 zddlZW n e
y   dZY n0 G dd d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 dd deZG dd dZG dd dZG dd dZG dd dZeeeeedZe	du rned edu red dS )zq
Handlers for Content-Encoding.

See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Encoding
    )annotationsN   )DecodingErrorc                   @  s*   e Zd ZdddddZddddZdS )	ContentDecoderbytesdatareturnc                 C  s
   t  d S NNotImplementedErrorselfr    r   ]/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/httpx/_decoders.pydecode%   s    zContentDecoder.decoder	   c                 C  s
   t  d S r
   r   r   r   r   r   flush(   s    zContentDecoder.flushN)__name__
__module____qualname__r   r   r   r   r   r   r   $   s   r   c                   @  s.   e Zd ZdZdddddZddddZd	S )
IdentityDecoderz 
    Handle unencoded data.
    r   r   c                 C  s   |S r
   r   r   r   r   r   r   1   s    zIdentityDecoder.decoder   c                 C  s   dS N    r   r   r   r   r   r   4   s    zIdentityDecoder.flushN)r   r   r   __doc__r   r   r   r   r   r   r   ,   s   r   c                   @  s<   e Zd ZdZddddZddddd	Zddd
dZdS )DeflateDecoderzZ
    Handle 'deflate' decoding.

    See: https://stackoverflow.com/questions/1838699
    Noner   c                 C  s   d| _ t | _d S NT)first_attemptzlibdecompressobjdecompressorr   r   r   r   __init__?   s    zDeflateDecoder.__init__r   r   c              
   C  s~   | j }d| _ z| j|W S  tjyx } zD|rVttj | _| |W  Y d }~S tt	||W Y d }~n
d }~0 0 d S NF)
r   r"   
decompressr    errorr!   	MAX_WBITSr   r   str)r   r   Zwas_first_attemptexcr   r   r   r   C   s    zDeflateDecoder.decodec              
   C  sF   z| j  W S  tjy@ } ztt||W Y d }~n
d }~0 0 d S r
   r"   r   r    r&   r   r(   r   r)   r   r   r   r   N   s    zDeflateDecoder.flushNr   r   r   r   r#   r   r   r   r   r   r   r   8   s   r   c                   @  s<   e Zd ZdZddddZddddd	Zddd
dZdS )GZipDecoderzW
    Handle 'gzip' decoding.

    See: https://stackoverflow.com/questions/1838699
    r   r   c                 C  s   t t jdB | _d S )N   )r    r!   r'   r"   r   r   r   r   r#   \   s    zGZipDecoder.__init__r   r   c              
   C  sH   z| j |W S  tjyB } ztt||W Y d }~n
d }~0 0 d S r
   )r"   r%   r    r&   r   r(   r   r   r)   r   r   r   r   _   s    zGZipDecoder.decodec              
   C  sF   z| j  W S  tjy@ } ztt||W Y d }~n
d }~0 0 d S r
   r*   r+   r   r   r   r   e   s    zGZipDecoder.flushNr,   r   r   r   r   r-   U   s   r-   c                   @  s<   e Zd ZdZddddZddddd	Zddd
dZdS )BrotliDecoderaT  
    Handle 'brotli' decoding.

    Requires `pip install brotlipy`. See: https://brotlipy.readthedocs.io/
        or   `pip install brotli`. See https://github.com/google/brotli
    Supports both 'brotlipy' and 'Brotli' packages since they share an import
    name. The top branches are for 'brotlipy' and bottom branches for 'Brotli'
    r   r   c                 C  sL   t d u rtdd t  | _d| _|  t| jdr>| jj| _n
| jj| _d S )NzUsing 'BrotliDecoder', but neither of the 'brotlicffi' or 'brotli' packages have been installed. Make sure to install httpx using `pip install httpx[brotli]`.Fr%   )	brotliImportErrorZDecompressorr"   	seen_datahasattrr%   _decompressprocessr   r   r   r   r#   v   s    
zBrotliDecoder.__init__r   r   c              
   C  sT   |sdS d| _ z| |W S  tjyN } ztt||W Y d }~n
d }~0 0 d S Nr   T)r3   r5   r1   r&   r   r(   r/   r   r   r   r      s    zBrotliDecoder.decodec              
   C  s`   | j s
dS zt| jdr"| j  W dS  tjyZ } ztt||W Y d }~n
d }~0 0 d S )Nr   finish)r3   r4   r"   r8   r1   r&   r   r(   r+   r   r   r   r      s    
zBrotliDecoder.flushNr,   r   r   r   r   r0   l   s   		r0   c                   @  s<   e Zd ZdZddddZddddd	Zddd
dZdS )ZStandardDecoderz
    Handle 'zstd' RFC 8878 decoding.

    Requires `pip install zstandard`.
    Can be installed as a dependency of httpx using `pip install httpx[zstd]`.
    r   r   c                 C  s*   t d u rtdd t   | _d| _d S )NzXUsing 'ZStandardDecoder', ...Make sure to install httpx using `pip install httpx[zstd]`.F)	zstandardr2   ZstdDecompressorr!   r"   r3   r   r   r   r   r#      s    zZStandardDecoder.__init__r   r   c              
   C  s   t d usJ d| _t }zP|| j| | jjrh| jjrh| jj}t 	 
 | _|| j| q.W n4 t jy } ztt||W Y d }~n
d }~0 0 | S r   )r:   r3   ioBytesIOwriter"   r%   eofunused_datar;   r!   Z	ZstdErrorr   r(   getvalue)r   r   outputr@   r)   r   r   r   r      s    $zZStandardDecoder.decodec                 C  s,   | j s
dS | j }| jjs$tdt|S )Nr   zZstandard data is incomplete)r3   r"   r   r?   r   r   )r   retr   r   r   r      s    
zZStandardDecoder.flushNr,   r   r   r   r   r9      s   
r9   c                   @  s>   e Zd ZdZdddddZdddd	d
ZddddZdS )MultiDecoderzE
    Handle the case where multiple encodings have been applied.
    ztyping.Sequence[ContentDecoder]r   )childrenr	   c                 C  s   t t|| _dS )zm
        'children' should be a sequence of decoders in the order in which
        each was applied.
        N)listreversedrE   )r   rE   r   r   r   r#      s    zMultiDecoder.__init__r   r   c                 C  s   | j D ]}||}q|S r
   )rE   r   r   r   childr   r   r   r      s    
zMultiDecoder.decoder   c                 C  s&   d}| j D ]}|||  }q
|S r   )rE   r   r   rH   r   r   r   r      s    
zMultiDecoder.flushNr,   r   r   r   r   rD      s   rD   c                   @  s@   e Zd ZdZddddddZdd	d
ddZd	dddZdS )ByteChunkerz>
    Handles returning byte content in fixed-size chunks.
    N
int | Noner   
chunk_sizer	   c                 C  s   t  | _|| _d S r
   )r<   r=   _buffer_chunk_sizer   rM   r   r   r   r#      s    
zByteChunker.__init__r   zlist[bytes]contentr	   c                   s    j d u r|r|gS g S  j|  j  j kr j  fddtdt j D }t|d  j kr jd  j  |S  jd  j|d   j  |d d S ng S d S )Nc                   s   g | ]}|| j   qS r   rO   .0ir   valuer   r   
<listcomp>   s   z&ByteChunker.decode.<locals>.<listcomp>r   	rO   rN   r>   tellrA   rangelenseektruncater   rR   chunksr   rW   r   r      s"    



zByteChunker.decoder   c                 C  s.   | j  }| j d | j   |r*|gS g S Nr   rN   rA   r_   r`   rW   r   r   r   r     s    

zByteChunker.flush)Nr,   r   r   r   r   rJ      s   rJ   c                   @  s@   e Zd ZdZddddddZdd	d
ddZd	dddZdS )TextChunkerz>
    Handles returning text content in fixed-size chunks.
    NrK   r   rL   c                 C  s   t  | _|| _d S r
   )r<   StringIOrN   rO   rP   r   r   r   r#     s    
zTextChunker.__init__r(   	list[str]rQ   c                   s    j d u r|r|gS g S  j|  j  j kr j  fddtdt j D }t|d  j kr jd  j  |S  jd  j|d   j  |d d S ng S d S )Nc                   s   g | ]}|| j   qS r   rS   rT   rW   r   r   rY     s   z&TextChunker.decode.<locals>.<listcomp>r   rZ   r[   ra   r   rW   r   r     s"    



zTextChunker.decoder   c                 C  s.   | j  }| j d | j   |r*|gS g S rc   rd   rW   r   r   r   r   +  s    

zTextChunker.flush)Nr,   r   r   r   r   re     s   re   c                   @  s@   e Zd ZdZddddddZddd	d
dZddddZdS )TextDecoderz8
    Handles incrementally decoding bytes into text
    utf-8r(   r   )encodingr	   c                 C  s   t |dd| _d S )Nreplace)errors)codecsgetincrementaldecoderdecoder)r   rj   r   r   r   r#   7  s    zTextDecoder.__init__r   r   c                 C  s   | j |S r
   ro   r   r   r   r   r   r   :  s    zTextDecoder.decoder   c                 C  s   | j ddS r7   rp   r   r   r   r   r   =  s    zTextDecoder.flushN)ri   r,   r   r   r   r   rh   2  s   rh   c                   @  s<   e Zd ZdZddddZdddd	d
ZddddZdS )LineDecoderz
    Handles incrementally reading lines from text.

    Has the same behaviour as the stdllib splitlines,
    but handling the input iteratively.
    r   r   c                 C  s   g | _ d| _d S r$   )buffertrailing_crr   r   r   r   r#   I  s    zLineDecoder.__init__r(   rg   )textr	   c                 C  s   d}| j rd| }d| _ |dr4d| _ |d d }|s<g S |d |v }| }t|dkrt|st| j|d  g S | jrd| j|d  g|dd   }g | _|s| g| _|S )	Nu   
  FTrZ   r   r    )rs   endswith
splitlinesr^   rr   appendjoinpop)r   rt   ZNEWLINE_CHARSZtrailing_newlinelinesr   r   r   r   M  s(    
"zLineDecoder.decodec                 C  s.   | j s| jsg S d| j g}g | _ d| _|S )Nrv   F)rr   rs   rz   )r   r|   r   r   r   r   s  s    zLineDecoder.flushNr,   r   r   r   r   rq   A  s   &rq   )identitygzipdeflatebrzstdr   r   )r   
__future__r   rm   r<   typingr    _exceptionsr   r1   r2   Z
brotlicffir:   r   r   r   r-   r0   r9   rD   rJ   re   rh   rq   ZSUPPORTED_DECODERSr{   r   r   r   r   <module>   sL   
5*''=	


