o
    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e
eeedZedu rped ddd e D Z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   V/var/www/html/magazine_api/magazine_env/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   t t j | _d S r   zlibdecompressobj	MAX_WBITSdecompressorr   r   r   r   __init__/   s   zDeflateDecoder.__init__r   c              
   C   0   z| j |W S  tjy } zt|d }~ww r   r"   
decompressr   errorr   r   r   excr   r   r   r   2      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   8      zDeflateDecoder.flushr   Nr   r   r   r   r#   r   r   r   r   r   r   r   r   (   
    
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#   F   s   zGZipDecoder.__init__r   c              
   C   r$   r   r%   r(   r   r   r   r   I   r*   zGZipDecoder.decodec              
   C   r+   r   r,   r-   r   r   r   r   O   r.   zGZipDecoder.flushr/   r0   r   r   r   r   r2   ?   r1   r2   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   s$   t d usJ dt  | _d| _d S )NzKThe 'brotlipy' or 'brotli' library must be installed to use 'BrotliDecoder'F)brotliZDecompressorr"   	seen_datar   r   r   r   r#   `   s
   


zBrotliDecoder.__init__r   c              
   C   sX   |sdS d| _ zt| jdr| j|W S | j|W S  tjy+ } zt|d }~ww )Nr   Tr&   )r6   hasattrr"   r&   processr5   r'   r   r(   r   r   r   r   g   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)r6   r7   r"   r9   r5   r'   r   r-   r   r   r   r   r   s   
zBrotliDecoder.flushr/   r0   r   r   r   r   r4   V   s
    
	r4   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   r:   }   s
    r:   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chardetZuniversaldetectorZUniversalDetectordetector	bytearraybuffer)r   rC   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)rF   r   rJ   rH   feedlenrD   rE   _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   rK   r   T)rF   rJ   rM   r   r   rN   rO   r   r   r   r   r   r      s   
zTextDecoder.flushc                 C   s&   | j   | j jd }|std|S )NrC   z'Unable to determine encoding of content)rH   closeresultr   )r   rR   r   r   r   rN      s
   
zTextDecoder._detector_resultr   )r   r   r   r   r@   Optionalstrr#   r   r   r   rN   r   r   r   r   rB      s    rB   )identitygzipdeflatebrrX   z, c                 C   s   g | ]}|d kr|qS )rU   r   ).0keyr   r   r   
<listcomp>   s    r[   )r   rD   r@   r   rG   
exceptionsr   r5   ImportErrorr   r   r   r2   r4   r:   rB   ZSUPPORTED_DECODERSpopjoinkeysACCEPT_ENCODINGr   r   r   r   <module>   s8    'A
