o
    E“hî"  ã                   @   sö   d 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 n ey)   dZY nw 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ƒZG dd„ dƒZe
eeedœZedu rye d¡ dS dS )zq
Handlers for Content-Encoding.

See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Encoding
é    Né   )ÚDecodingErrorc                   @   s,   e Zd Zdedefdd„Zdefdd„ZdS )ÚDecoderÚdataÚreturnc                 C   ó   t ƒ ‚©N©ÚNotImplementedError©Úselfr   © r   úJ/var/www/html/env_mimamsha/lib/python3.10/site-packages/httpx/_decoders.pyÚdecode   ó   zDecoder.decodec                 C   r   r   r	   ©r   r   r   r   Úflush   r   zDecoder.flushN)Ú__name__Ú
__module__Ú__qualname__Úbytesr   r   r   r   r   r   r      s    r   c                   @   s0   e Zd ZdZdedefdd„Zdefdd„ZdS )	ÚIdentityDecoderz 
    Handle unencoded data.
    r   r   c                 C   s   |S r   r   r   r   r   r   r   !   ó   zIdentityDecoder.decodec                 C   s   dS ©Nó    r   r   r   r   r   r   $   r   zIdentityDecoder.flushN)r   r   r   Ú__doc__r   r   r   r   r   r   r   r      s    r   c                   @   ó:   e Zd ZdZddd„Zdedefdd„Zdefd	d
„ZdS )ÚDeflateDecoderzZ
    Handle 'deflate' decoding.

    See: https://stackoverflow.com/questions/1838699
    r   Nc                 C   s   d| _ t ¡ | _d S )NT)Úfirst_attemptÚzlibÚdecompressobjÚdecompressorr   r   r   r   Ú__init__/   s   zDeflateDecoder.__init__r   c              
   C   sf   | j }d| _ z| j |¡W S  tjy2 } z|r+t tj ¡| _|  |¡W  Y d }~S t|‚d }~ww )NF)	r   r!   Ú
decompressr   Úerrorr    Ú	MAX_WBITSr   r   )r   r   Úwas_first_attemptÚexcr   r   r   r   3   s   €üzDeflateDecoder.decodec              
   C   ó.   z| j  ¡ W S  tjy } zt|‚d }~ww r   ©r!   r   r   r$   r   ©r   r'   r   r   r   r   >   ó   €ÿzDeflateDecoder.flush©r   N©r   r   r   r   r"   r   r   r   r   r   r   r   r   (   s
    
r   c                   @   r   )ÚGZipDecoderzW
    Handle 'gzip' decoding.

    See: https://stackoverflow.com/questions/1838699
    r   Nc                 C   s   t  t jdB ¡| _d S )Né   )r   r    r%   r!   r   r   r   r   r"   L   s   zGZipDecoder.__init__r   c              
   C   s0   z| j  |¡W S  tjy } zt|‚d }~ww r   )r!   r#   r   r$   r   ©r   r   r'   r   r   r   r   O   s   €ÿzGZipDecoder.decodec              
   C   r(   r   r)   r*   r   r   r   r   U   r+   zGZipDecoder.flushr,   r-   r   r   r   r   r.   E   s
    
r.   c                   @   r   )Ú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   Nc                 C   sH   t d usJ dƒ‚t  ¡ | _d| _t| jdƒr| jj| _d S | jj| _d S )NzKThe 'brotlipy' or 'brotli' library must be installed to use 'BrotliDecoder'Fr#   )ÚbrotliÚDecompressorr!   Ú	seen_dataÚhasattrr#   Ú_decompressÚprocessr   r   r   r   r"   f   s   
ÿ
zBrotliDecoder.__init__r   c              
   C   s<   |sdS d| _ z|  |¡W S  tjy } zt|‚d }~ww )Nr   T)r4   r6   r2   r$   r   r0   r   r   r   r   q   s   €ÿzBrotliDecoder.decodec              
   C   sH   | j sdS zt| jdƒr| j ¡  W dS  tjy# } zt|‚d }~ww )Nr   Úfinish)r4   r5   r!   r8   r2   r$   r   r*   r   r   r   r   z   s   
€ÿzBrotliDecoder.flushr,   r-   r   r   r   r   r1   \   s
    
		r1   c                   @   sH   e Zd ZdZdeje ddfdd„Zdedefdd	„Z	defd
d„Z
dS )ÚMultiDecoderzE
    Handle the case where multiple encodings have been applied.
    Úchildrenr   Nc                 C   s   t t|ƒƒ| _dS )zm
        'children' should be a sequence of decoders in the order in which
        each was applied.
        N)ÚlistÚreversedr:   )r   r:   r   r   r   r"   Š   s   zMultiDecoder.__init__r   c                 C   s   | j D ]}| |¡}q|S r   )r:   r   ©r   r   Úchildr   r   r   r   ’   s   
zMultiDecoder.decodec                 C   s&   d}| j D ]}| |¡| ¡  }q|S r   )r:   r   r   r=   r   r   r   r   —   s   
zMultiDecoder.flush)r   r   r   r   ÚtypingÚSequencer   r"   r   r   r   r   r   r   r   r9   …   s
    r9   c                   @   sT   e Zd ZdZddeje fdd„Zdedefdd	„Z	defd
d„Z
defdd„ZdS )ÚTextDecoderz8
    Handles incrementally decoding bytes into text
    NÚencodingc                 C   sB   |d u rd nt  |¡ƒ | _tj ¡ | _| jrd | _d S tƒ | _d S r   )	ÚcodecsÚgetincrementaldecoderÚdecoderÚchardetÚuniversaldetectorÚUniversalDetectorÚdetectorÚ	bytearrayÚbuffer)r   rB   r   r   r   r"   £   s   ÿzTextDecoder.__init__r   r   c                 C   s    zD| j d ur| j  |¡}|W S | jd usJ ‚d}| j |¡ |  j|7  _t| jƒdkrBt |  ¡ ¡ƒ | _ | j  t	| jƒd¡}d | _|W S  t
yO   tƒ d ‚w )NÚ i   F)rE   r   rK   rI   ÚfeedÚlenrC   rD   Ú_detector_resultr   ÚUnicodeDecodeErrorr   )r   r   Útextr   r   r   r   ¯   s$   
ðÿÿzTextDecoder.decodec                 C   sj   z)| j d u r"| jd usJ ‚t| jƒdkrW dS t| jƒ |  ¡ ¡W S | j  dd¡W S  ty4   tƒ d ‚w )Nr   rL   r   T)rE   rK   rN   r   r   rO   rP   r   r   r   r   r   r   È   s   
ÿzTextDecoder.flushc                 C   s&   | j  ¡  | j jd }|stdƒ‚|S )NrB   z'Unable to determine encoding of content)rI   ÚcloseÚresultr   )r   rS   r   r   r   rO   Õ   s
   
zTextDecoder._detector_resultr   )r   r   r   r   r?   ÚOptionalÚstrr"   r   r   r   rO   r   r   r   r   rA   ž   s    rA   c                   @   sF   e Zd ZdZddd„Zdedeje fdd„Zdeje fd	d
„Z	dS )ÚLineDecoderz¨
    Handles incrementally reading lines from text.

    Uses universal line decoding, supporting any of `
`, ``, or `
`
    as line endings, normalizing to `
`.
    r   Nc                 C   s
   d| _ d S )NrL   )rK   r   r   r   r   r"   æ   s   
zLineDecoder.__init__rQ   c                 C   sr  g }|  d¡r&| jr&| jd dkr&| | jd d… d ¡ d| _|dd … }|r·t|ƒ}t|ƒD ]„}|| }|d |kr>d n||d  }|dkrc| | j|d |d …  ¡ d| _||d d … } nR|dkr†|dkr†| | j|d |…  d ¡ d| _||d d … } n/|dkr©|d ur©| | j|d |…  d ¡ d| _||d d … } n|d u r´|| _d} nq0|s(|S )NÚ
éÿÿÿÿúrL   r   é   )Ú
startswithrK   ÚappendrN   Úrange)r   rQ   ÚlinesÚ	num_charsÚidxÚcharÚ	next_charr   r   r   r   é   s@   ýìzLineDecoder.decodec                 C   s@   | j  d¡r| j d d… d g}n
| j r| j g}ng }d| _ |S )NrY   rX   rW   rL   )rK   Úendswith)r   r^   r   r   r   r     s   
zLineDecoder.flushr,   )
r   r   r   r   r"   rU   r?   ÚListr   r   r   r   r   r   rV   Þ   s
    
%rV   )ÚidentityÚgzipÚdeflateÚbrrh   )r   rC   r?   r   rF   Ú_exceptionsr   r2   ÚImportErrorr   r   r   r.   r1   r9   rA   rV   ÚSUPPORTED_DECODERSÚpopr   r   r   r   Ú<module>   s6    ÿ)@>üÿ