
    zi&                        d Z ddlZddlZddlZddlZddlmZ ddlmZ  G d d          Z	 G d d	e	          Z
 G d
 de	          Z G d de	          Z G d de	          Z G d de	          Z G d d          Z G d d          Z G d d          Z G d d          Ze
eeedZee                    d           dS dS )zq
Handlers for Content-Encoding.

See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Encoding
    N   )brotli)DecodingErrorc                   *    e Zd ZdedefdZdefdZdS )ContentDecoderdatareturnc                     t                      NNotImplementedErrorselfr   s     Z/var/www/tmov.alphamb/tmov_inventario/venv/lib/python3.11/site-packages/httpx/_decoders.pydecodezContentDecoder.decode       !###    c                     t                      r   r   r   s    r   flushzContentDecoder.flush   r   r   N)__name__
__module____qualname__bytesr   r    r   r   r   r      sQ        $5 $U $ $ $ $$u $ $ $ $ $ $r   r   c                   .    e Zd ZdZdedefdZdefdZdS )IdentityDecoderz 
    Handle unencoded data.
    r   r	   c                     |S r   r   r   s     r   r   zIdentityDecoder.decode   s    r   c                     dS Nr   r   r   s    r   r   zIdentityDecoder.flush   s    sr   N)r   r   r   __doc__r   r   r   r   r   r   r   r      s[         5 U    u      r   r   c                   6    e Zd ZdZddZdedefdZdefdZdS )	DeflateDecoderzZ
    Handle 'deflate' decoding.

    See: https://stackoverflow.com/questions/1838699
    r	   Nc                 D    d| _         t          j                    | _        d S )NT)first_attemptzlibdecompressobjdecompressorr   s    r   __init__zDeflateDecoder.__init__*   s!    ! .00r   r   c                 <   | j         }d| _         	 | j                            |          S # t          j        $ rb}|r>t          j        t          j                   | _        |                     |          cY d }~S t          t          |                    |d }~ww xY wNF)
r%   r(   
decompressr&   errorr'   	MAX_WBITSr   r   str)r   r   was_first_attemptexcs       r   r   zDeflateDecoder.decode.   s     ."	3$//555z 	3 	3 	3  )$($6$G$G!{{4((((((((C))s2		3s    * B:B3B9BBc                     	 | j                                         S # t          j        $ r"}t	          t          |                    |d }~ww xY wr   r(   r   r&   r-   r   r/   r   r1   s     r   r   zDeflateDecoder.flush9   S    	3$**,,,z 	3 	3 	3C))s2	3    AAAr	   Nr   r   r   r!   r)   r   r   r   r   r   r   r#   r#   #   so         1 1 1 1	35 	3U 	3 	3 	3 	33u 3 3 3 3 3 3r   r#   c                   6    e Zd ZdZddZdedefdZdefdZdS )	GZipDecoderzW
    Handle 'gzip' decoding.

    See: https://stackoverflow.com/questions/1838699
    r	   Nc                 R    t          j        t           j        dz            | _        d S )N   )r&   r'   r.   r(   r   s    r   r)   zGZipDecoder.__init__G   s"     .t~/BCCr   r   c                     	 | j                             |          S # t          j        $ r"}t	          t          |                    |d }~ww xY wr   )r(   r,   r&   r-   r   r/   r   r   r1   s      r   r   zGZipDecoder.decodeJ   sU    	3$//555z 	3 	3 	3C))s2	3s    AAAc                     	 | j                                         S # t          j        $ r"}t	          t          |                    |d }~ww xY wr   r3   r4   s     r   r   zGZipDecoder.flushP   r5   r6   r7   r8   r   r   r   r:   r:   @   ss         D D D D35 3U 3 3 3 33u 3 3 3 3 3 3r   r:   c                   6    e Zd ZdZddZdedefdZdef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	   Nc                     t           t          d          d t          j                    | _        d| _        |  t          | j        d          r| j        j        | _        d S | 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,   )	r   ImportErrorDecompressorr(   	seen_datahasattrr,   _decompressprocessr   s    r   r)   zBrotliDecoder.__init__a   s    >P  	 #/1194$l33 	9#0;D  $08Dr   r   c                     |sdS d| _         	 |                     |          S # t          j        $ r"}t	          t          |                    |d }~ww xY wNr   T)rE   rG   r   r-   r   r/   r>   s      r   r   zBrotliDecoder.decodes   sf     	3	3##D)))| 	3 	3 	3C))s2	3s   " AAAc                     | j         sdS 	 t          | j        d          r| j                                         dS # t          j        $ r"}t          t          |                    |d }~ww xY w)Nr   finish)rE   rF   r(   rL   r   r-   r   r/   r4   s     r   r   zBrotliDecoder.flush|   s~    ~ 	3
	3t((33 + !((***3| 	3 	3 	3C))s2	3s   .; A,
A''A,r7   r8   r   r   r   rA   rA   W   so         9 9 9 9$35 3U 3 3 3 33u 3 3 3 3 3 3r   rA   c                   T    e Zd ZdZdej        e         ddfdZdedefdZ	defdZ
dS )	MultiDecoderzE
    Handle the case where multiple encodings have been applied.
    childrenr	   Nc                 H    t          t          |                    | _        dS )zm
        'children' should be a sequence of decoders in the order in which
        each was applied.
        N)listreversedrO   )r   rO   s     r   r)   zMultiDecoder.__init__   s     Xh//00r   r   c                 D    | j         D ]}|                    |          }|S r   )rO   r   r   r   childs      r   r   zMultiDecoder.decode   s+    ] 	& 	&E<<%%DDr   c                 r    d}| j         D ],}|                    |          |                                z   }-|S r    )rO   r   r   rT   s      r   r   zMultiDecoder.flush   s=    ] 	6 	6E<<%%5DDr   )r   r   r   r!   typingSequencer   r)   r   r   r   r   r   r   rN   rN      s         1!@ 1T 1 1 1 15 U    
u      r   rN   c                       e Zd ZdZd	dej        e         ddfdZdedej	        e         fdZ
dej	        e         fdZdS )
ByteChunkerz>
    Handles returning byte content in fixed-size chunks.
    N
chunk_sizer	   c                 D    t          j                    | _        || _        d S r   )ioBytesIO_buffer_chunk_sizer   r[   s     r   r)   zByteChunker.__init__   s    z||%r   contentc                      j         |r|gng S  j                            |            j                                         j         k    r j                                         fdt          dt                     j                   D             }t          |d                    j         k    r5 j                            d            j                                         |S  j                            d            j                            |d                     j                                         |d d         S g S )Nc                 4    g | ]}||j         z            S r   r`   .0ir   values     r   
<listcomp>z&ByteChunker.decode.<locals>.<listcomp>   ;        a!d.../  r   r   	r`   r_   writetellgetvaluerangelenseektruncater   rb   chunksri   s   `  @r   r   zByteChunker.decode   sE   # '/G99R/7###<$"222L))++E    q#e**d.>??  F 6":$"222!!!$$$%%'''!!!$$$""6":...%%'''crc{"Ir   c                     | j                                         }| j                             d           | j                                          |r|gng S Nr   r_   rp   rs   rt   r   ri   s     r   r   zByteChunker.flush   P    %%''!'wwR'r   r   )r   r   r   r!   rW   Optionalintr)   r   Listr   r   r   r   r   rZ   rZ      s         & &6?3#7 &4 & & & &e E(:    .(v{5) ( ( ( ( ( (r   rZ   c                       e Zd ZdZd	dej        e         ddfdZdedej	        e         fdZ
dej	        e         fdZdS )
TextChunkerz>
    Handles returning text content in fixed-size chunks.
    Nr[   r	   c                 D    t          j                    | _        || _        d S r   )r]   StringIOr_   r`   ra   s     r   r)   zTextChunker.__init__   s    {}}%r   rb   c                      j         |gS  j                            |            j                                         j         k    r j                                         fdt          dt                     j                   D             }t          |d                    j         k    r5 j                            d            j                                         |S  j                            d            j                            |d                     j                                         |d d         S g S )Nc                 4    g | ]}||j         z            S r   re   rf   s     r   rj   z&TextChunker.decode.<locals>.<listcomp>   rk   r   r   rl   rm   ru   s   `  @r   r   zTextChunker.decode   s<   #97###<$"222L))++E    q#e**d.>??  F 6":$"222!!!$$$%%'''!!!$$$""6":...%%'''crc{"Ir   c                     | j                                         }| j                             d           | j                                          |r|gng S rx   ry   rz   s     r   r   zTextChunker.flush   r{   r   r   )r   r   r   r!   rW   r|   r}   r)   r/   r~   r   r   r   r   r   r   r      s         & &6?3#7 &4 & & & &c fk#&6    .(v{3' ( ( ( ( ( (r   r   c                   @    e Zd ZdZd
deddfdZdedefdZdefd	ZdS )TextDecoderz8
    Handles incrementally decoding bytes into text
    utf-8encodingr	   Nc                 L     t          j        |          d          | _        d S )Nreplace)errors)codecsgetincrementaldecoderdecoder)r   r   s     r   r)   zTextDecoder.__init__   s%    =v3H==YOOOr   r   c                 6    | j                             |          S r   r   r   r   s     r   r   zTextDecoder.decode   s    |""4(((r   c                 8    | j                             dd          S rJ   r   r   s    r   r   zTextDecoder.flush   s    |""3---r   )r   )	r   r   r   r!   r/   r)   r   r   r   r   r   r   r   r      s         P P P4 P P P P)5 )S ) ) ) ).s . . . . . .r   r   c                   b    e Zd ZdZddZdedej        e         fdZdej        e         f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	   Nc                 "    g | _         d| _        d S r+   )buffertrailing_crr   s    r   r)   zLineDecoder.__init__	  s    (*!&r   textc                    d}| j         rd|z   }d| _         |                    d          rd| _         |d d         }|sg S |d         |v }|                                }t          |          dk    r$|s"| j                            |d                    g S | j        r6d                    | j                  |d         z   g|dd          z   }g | _        |s|                                g| _        |S )	Nu   
  FTrl   r   r    )r   endswith
splitlinesrr   r   appendjoinpop)r   r   NEWLINE_CHARStrailing_newlineliness        r   r   zLineDecoder.decode  s   B  	%$;D$D== 	#D9D 	I8}4!!u::??#3?KuQx(((I; 	 WWT[))E!H45abb	AEDK 	( !99;;-DKr   c                 x    | j         s	| j        sg S d                    | j                   g}g | _         d| _        |S )Nr   F)r   r   r   )r   r   s     r   r   zLineDecoder.flush1  sE    { 	4#3 	I%%& r   r7   )
r   r   r   r!   r)   r/   rW   r~   r   r   r   r   r   r   r     s~         ' ' ' '"3 "6;s#3 " " " "Hv{3'      r   r   )identitygzipdeflatebrr   )r!   r   r]   rW   r&   _compatr   _exceptionsr   r   r   r#   r:   rA   rN   rZ   r   r   r   SUPPORTED_DECODERSr   r   r   r   <module>r      s:   
  				         & & & & & &$ $ $ $ $ $ $ $	 	 	 	 	n 	 	 	3 3 3 3 3^ 3 3 3:3 3 3 3 3. 3 3 3.23 23 23 23 23N 23 23 23j    >   2$( $( $( $( $( $( $( $(N$( $( $( $( $( $( $( $(N. . . . . . . .6 6 6 6 6 6 6 6t  
	   
>4      >r   