
    Ii&                     J   S r SSKrSSKrSSKrSSKrSSKJr  SSKJr   " S S5      r	 " S S	\	5      r
 " S
 S\	5      r " S S\	5      r " S S\	5      r " S S\	5      r " S S5      r " S S5      r " S S5      r " S S5      r\
\\\S.r\c  \R)                  S5        gg)zq
Handlers for Content-Encoding.

See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Encoding
    N   )brotli)DecodingErrorc                   4    \ rS rSrS\S\4S jrS\4S jrSrg)ContentDecoder   datareturnc                     [        5       eNNotImplementedErrorselfr	   s     5/venv/lib/python3.13/site-packages/httpx/_decoders.pydecodeContentDecoder.decode       !##    c                     [        5       er   r   r   s    r   flushContentDecoder.flush   r   r    N)__name__
__module____qualname____firstlineno__bytesr   r   __static_attributes__r   r   r   r   r      s!    $5 $U $$u $r   r   c                   8    \ rS rSrSrS\S\4S jrS\4S jrSrg)	IdentityDecoder   z
Handle unencoded data.
r	   r
   c                     U$ r   r   r   s     r   r   IdentityDecoder.decode   s    r   c                     gNr   r   r   s    r   r   IdentityDecoder.flush   s    r   r   N)	r   r   r   r   __doc__r   r   r   r    r   r   r   r"   r"      s&    5 U u r   r"   c                   B    \ rS rSrSrS
S jrS\S\4S jrS\4S jrS	r	g)DeflateDecoder#   zN
Handle 'deflate' decoding.

See: https://stackoverflow.com/questions/1838699
r
   Nc                 F    SU l         [        R                  " 5       U l        g )NT)first_attemptzlibdecompressobjdecompressorr   s    r   __init__DeflateDecoder.__init__*   s    ! ..0r   r	   c                 P   U R                   nSU l          U R                  R                  U5      $ ! [        R                   aa  nU(       a@  [        R
                  " [        R                  * 5      U l        U R                  U5      s S nA$ [        [        U5      5      UeS nAff = fNF)
r.   r1   
decompressr/   errorr0   	MAX_WBITSr   r   str)r   r	   was_first_attemptexcs       r   r   DeflateDecoder.decode.   s     .."	3$$//55zz 	3 $($6$6$G!{{4((C)s2		3s"   0 B%AB B%B  B%c                      U R                   R                  5       $ ! [        R                   a  n[	        [        U5      5      UeS nAff = fr   r1   r   r/   r7   r   r9   r   r;   s     r   r   DeflateDecoder.flush9   A    	3$$**,,zz 	3C)s2	3    A
AA
)r1   r.   r
   N
r   r   r   r   r)   r2   r   r   r   r    r   r   r   r+   r+   #   s+    1	35 	3U 	33u 3r   r+   c                   B    \ rS rSrSrS
S jrS\S\4S jrS\4S jrS	r	g)GZipDecoder@   zK
Handle 'gzip' decoding.

See: https://stackoverflow.com/questions/1838699
r
   Nc                 \    [         R                  " [         R                  S-  5      U l        g )N   )r/   r0   r8   r1   r   s    r   r2   GZipDecoder.__init__G   s     ..t~~/BCr   r	   c                      U R                   R                  U5      $ ! [        R                   a  n[	        [        U5      5      UeS nAff = fr   )r1   r6   r/   r7   r   r9   r   r	   r;   s      r   r   GZipDecoder.decodeJ   sC    	3$$//55zz 	3C)s2	3s    AAAc                      U R                   R                  5       $ ! [        R                   a  n[	        [        U5      5      UeS nAff = fr   r>   r?   s     r   r   GZipDecoder.flushP   rA   rB   )r1   rC   rD   r   r   r   rF   rF   @   s,    D35 3U 33u 3r   rF   c                   B    \ rS rSrSrS
S jrS\S\4S jrS\4S jrS	r	g)BrotliDecoderW   a<  
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5      S e[         R                  " 5       U l        SU l        U   [        U R                  S5      (       a  U R                  R                  U l        g U R                  R                  U l        g )NzUsing 'BrotliDecoder', but neither of the 'brotlicffi' or 'brotli' packages have been installed. Make sure to install httpx using `pip install httpx[brotli]`.Fr6   )	r   ImportErrorDecompressorr1   	seen_datahasattrr6   _decompressprocessr   s    r   r2   BrotliDecoder.__init__a   sy    >P 	 #//14$$l33#00;;D  $0088Dr   r	   c                     U(       d  gSU l          U R                  U5      $ ! [        R                   a  n[	        [        U5      5      UeS nAff = fNr   T)rV   rX   r   r7   r   r9   rL   s      r   r   BrotliDecoder.decodes   sJ    	3##D))|| 	3C)s2	3s   " AAAc                     U R                   (       d  g [        U R                  S5      (       a  U R                  R                  5         g! [        R
                   a  n[        [        U5      5      UeS nAff = f)Nr   finish)rV   rW   r1   r_   r   r7   r   r9   r?   s     r   r   BrotliDecoder.flush|   s`    ~~
	3t(((33 !!((*|| 	3C)s2	3s   5A
 
A8A33A8)rX   r1   rV   rC   rD   r   r   r   rQ   rQ   W   s+    9$35 3U 33u 3r   rQ   c                   d    \ rS rSrSrS\R                  \   SS4S jrS\	S\	4S jr
S\	4S	 jrS
rg)MultiDecoder   z=
Handle the case where multiple encodings have been applied.
childrenr
   Nc                 6    [        [        U5      5      U l        g)zU
'children' should be a sequence of decoders in the order in which
each was applied.
N)listreversedrd   )r   rd   s     r   r2   MultiDecoder.__init__   s     Xh/0r   r	   c                 N    U R                    H  nUR                  U5      nM     U$ r   )rd   r   r   r	   childs      r   r   MultiDecoder.decode   s#    ]]E<<%D #r   c                 t    SnU R                    H%  nUR                  U5      UR                  5       -   nM'     U$ r'   )rd   r   r   rj   s      r   r   MultiDecoder.flush   s3    ]]E<<%5D #r   )rd   )r   r   r   r   r)   typingSequencer   r2   r   r   r   r    r   r   r   rb   rb      sB    1!@ 1T 15 U 
u r   rb   c                       \ rS rSrSrSS\R                  \   SS4S jjrS\	S\R                  \	   4S jrS\R                  \	   4S	 jrS
rg)ByteChunker   z6
Handles returning byte content in fixed-size chunks.
N
chunk_sizer
   c                 D    [         R                  " 5       U l        Xl        g r   )ioBytesIO_buffer_chunk_sizer   rt   s     r   r2   ByteChunker.__init__   s    zz|%r   contentc                    U R                   c  U(       a  U/$ / $ U R                  R                  U5        U R                  R                  5       U R                   :  Ga  U R                  R	                  5       n[        S[        U5      U R                   5       Vs/ s H  nX#X0R                   -    PM     nn[        US   5      U R                   :X  a7  U R                  R                  S5        U R                  R                  5         U$ U R                  R                  S5        U R                  R                  US   5        U R                  R                  5         US S $ / $ s  snf Nr   	ry   rx   writetellgetvaluerangelenseektruncater   r|   valueichunkss        r   r   ByteChunker.decode   ,   # 'G9/R/7#<<$"2"22LL))+E q#e*d.>.>??A !.../?   6":$"2"22!!!$%%'!!!$""6":.%%'cr{"I   E#c                     U R                   R                  5       nU R                   R                  S5        U R                   R                  5         U(       a  U/$ / $ Nr   rx   r   r   r   r   r   s     r   r   ByteChunker.flush   E    %%'!w'R'r   rx   ry   r   )r   r   r   r   r)   ro   Optionalintr2   r   Listr   r   r    r   r   r   rr   rr      sT    &6??3#7 &4 &e E(: .(v{{5) (r   rr   c                       \ rS rSrSrSS\R                  \   SS4S jjrS\	S\R                  \	   4S jrS\R                  \	   4S	 jrS
rg)TextChunker   z6
Handles returning text content in fixed-size chunks.
Nrt   r
   c                 D    [         R                  " 5       U l        Xl        g r   )rv   StringIOrx   ry   rz   s     r   r2   TextChunker.__init__   s    {{}%r   r|   c                    U R                   c  U(       a  U/$ / $ U R                  R                  U5        U R                  R                  5       U R                   :  Ga  U R                  R	                  5       n[        S[        U5      U R                   5       Vs/ s H  nX#X0R                   -    PM     nn[        US   5      U R                   :X  a7  U R                  R                  S5        U R                  R                  5         U$ U R                  R                  S5        U R                  R                  US   5        U R                  R                  5         US S $ / $ s  snf r~   r   r   s        r   r   TextChunker.decode   r   r   c                     U R                   R                  5       nU R                   R                  S5        U R                   R                  5         U(       a  U/$ / $ r   r   r   s     r   r   TextChunker.flush   r   r   r   r   )r   r   r   r   r)   ro   r   r   r2   r9   r   r   r   r    r   r   r   r   r      sT    &6??3#7 &4 &c fkk#&6 .(v{{3' (r   r   c                   N    \ rS rSrSrSS\SS4S jjrS\S\4S jrS\4S	 jr	S
r
g)TextDecoder   z0
Handles incrementally decoding bytes into text
encodingr
   Nc                 B    [         R                  " U5      " SS9U l        g )Nreplace)errors)codecsgetincrementaldecoderdecoder)r   r   s     r   r2   TextDecoder.__init__   s    33H=YOr   r	   c                 8    U R                   R                  U5      $ r   r   r   r   s     r   r   TextDecoder.decode   s    ||""4((r   c                 :    U R                   R                  SS5      $ r\   r   r   s    r   r   TextDecoder.flush   s    ||""3--r   )r   )zutf-8)r   r   r   r   r)   r9   r2   r   r   r   r    r   r   r   r   r      s<    P P4 P)5 )S ).s .r   r   c                   v    \ rS rSrSrS
S jrS\S\R                  \   4S jr	S\R                  \   4S jr
S	rg)LineDecoderi  z
Handles incrementally reading lines from text.

Has the same behaviour as the stdllib splitlines,
but handling the input iteratively.
r
   Nc                      / U l         SU l        g r5   buffertrailing_crr   s    r   r2   LineDecoder.__init__
  s    (*!&r   textc                    SnU R                   (       a  SU-   nSU l         UR                  S5      (       a  SU l         US S nU(       d  / $ US   U;   nUR                  5       n[        U5      S:X  a'  U(       d   U R                  R                  US   5        / $ U R                  (       a/  SR                  U R                  5      US   -   /USS  -   n/ U l        U(       d  UR                  5       /U l        U$ )	Nu   
  FTr   r   r    )r   endswith
splitlinesr   r   appendjoinpop)r   r   NEWLINE_CHARStrailing_newlineliness        r   r   LineDecoder.decode  s    B $;D$D==#D9D I8}4!u:?#3KKuQx(I;; WWT[[)E!H45ab	AEDK !99;-DKr   c                     U R                   (       d  U R                  (       d  / $ SR                  U R                   5      /n/ U l         SU l        U$ )Nr   F)r   r   r   )r   r   s     r   r   LineDecoder.flush4  s?    {{4#3#3I%& r   r   rC   )r   r   r   r   r)   r2   r9   ro   r   r   r   r    r   r   r   r   r     s>    '$3 $6;;s#3 $Lv{{3' r   r   )identitygzipdeflatebrr   )r)   r   rv   ro   r/   _compatr   _exceptionsr   r   r"   r+   rF   rQ   rb   rr   r   r   r   SUPPORTED_DECODERSr   r   r   r   <module>r      s   
  	    &$ $	n 	3^ 3:3. 3.23N 23j> 2$( $(N$( $(N. .9 9z  
	  
>4  r   