
    Wh@              	       j   d dl Z d dlZd dlZd dlZd dl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 d dlZddlmZ ej        rddlmZ ddd	Ze                    d
  ed d          D                         ej        d                    d e                                D                                 Z	 d?dej        eef         dededefdZ	 d?dej        eef         dedefdZdddefdZ dedefdZ!dedej        eef         defdZ"dZ#e#dz  Z$e#dz  Z%dedej&        e         fdZ' G d d          Z(dej&        e         fd Z)dedej*        ej+        eef                  fd!Z,d"d#hZ-d$ej.        ej/        ej0        ej0        f                  dej1        ej/        ej0        ej0        f                  fd%Z2d&a3d'Z4 G d( d)ej5                  Z5dede5fd*Z6d+d,dej&        e7         fd-Z8d+d,d.d,defd/Z9dej+        eej&        e         f         fd0Z:d@dej        eef         dedefd2Z;d@dej        eef         dedefd3Z<ded4ej0        dej0        fd5Z=dedefd6Z>d7ej&        e         dej&        e         fd8Z?d9ej@        dej&        e7         fd:ZA G d; d<          ZB G d= d>          ZCdS )A    N)Path)
getproxies   )PrimitiveDataURLz%22z\\)"\c                 `    i | ]+}|d k    t          |          d                    |          ,S )   z%{:02X})chrformat.0cs     R/var/www/html/movieo_spanner_bot/venv/lib/python3.11/site-packages/httpx/_utils.py
<dictcomp>r      s3    MMMQ199SVVYa  999        |c                 6    g | ]}t          j        |          S  )reescaper   s     r   
<listcomp>r      s     NNNry||NNNr   valuelowerencodingreturnc                     t          | t                    r| }n|                     |pd          }|r|                                n|S )zE
    Coerce str/bytes into a strictly byte-wise HTTP header key.
    ascii)
isinstancebytesencoder   )r   r   r   bytes_values       r   normalize_header_keyr&      sO     % 8ll8#6w77"'8;[8r   c                 ^    t          | t                    r| S |                     |pd          S )zG
    Coerce str/bytes into a strictly byte-wise HTTP header value.
    r!   )r"   r#   r$   r   r   s     r   normalize_header_valuer)   .   s2     % <<+G,,,r   r   c                 @    | du rdS | du rdS | dS t          |           S )z
    Coerce a primitive data type into a string value.

    Note that we prefer JSON-style 'true'/'false' for boolean values here.
    TtrueFfalseN )strr   s    r   primitive_value_to_strr0   9   s6     }}v	%w	ru::r   c                 T    	 t          j        |            n# t          $ r Y dS w xY wdS )z7
    Return `True` if `encoding` is a known codec.
    FT)codecslookupLookupError)r   s    r   is_known_encodingr5   H   sA    h   uu4s    
%%namec                    t          |t                    r|                                }dt          j        t
                   dt
          fd}t                              ||          }|  d| d                                S )z;
    Encode a name/value pair within a multipart form.
    matchr   c                 B    t           |                     d                   S )Nr   )!_HTML5_FORM_ENCODING_REPLACEMENTSgroup)r8   s    r   replacerz#format_form_param.<locals>.replacerZ   s    0Q@@r   z="r	   )	r"   r#   decodetypingMatchr.   _HTML5_FORM_ENCODING_REsubr$   )r6   r   r<   s      r   format_form_paramrB   S   s     % AS) Ac A A A A $''%88Ee%%'''r             datac                    | d d         }|t           j        t           j        fv rdS |d d         t           j        k    rdS |d d         t           j        t           j        fv rdS |                    t                    }|dk    rdS |dk    r,|d d d         t          k    rd	S |d
d d         t          k    rdS |dk    r*|d d         t          k    rdS |d
d          t          k    rdS d S )N   zutf-32rE   z	utf-8-sigrD   zutf-16r   utf-8z	utf-16-ber   z	utf-16-lez	utf-32-bez	utf-32-le)
r2   BOM_UTF32_LEBOM_UTF32_BEBOM_UTF8BOM_UTF16_LEBOM_UTF16_BEcount_null_null2_null3)rF   sample	nullcounts      r   guess_json_utfrU   g   s    "1"XF&%v':;;;xbqbzV_$${bqbzf)6+>???xU##IA~~wA~~##A#;&  ;!$Q$<6!!;A~~"1":;!"":;4r   c                       e Zd Zddej        ej        e                  ddfdZedej        e	j	                 fd            Z
dedej        ej        eef                  fdZdS )		NetRCInfoNfilesr   c                 H    |t          j        dd          ddg}|| _        d S )NNETRCr-   z~/.netrcz~/_netrc)osgetenvnetrc_files)selfrX   s     r   __init__zNetRCInfo.__init__   s-    =Yw++ZDE r   c                 F   t          | d          sd | _        | j        D ]|}t          |                                          }	 |                                r(t          j        t          |                    | _         na# t          j        t          f$ r Y yw xY w| j        S )N_netrc_info)
hasattrra   r]   r   
expanduseris_filenetrcr.   NetrcParseErrorIOError)r^   	file_pathexpanded_paths      r   
netrc_infozNetRCInfo.netrc_info   s    t]++ 
	#D!-  	 $Y : : < <$,,.. +0;s=7I7I+J+J( -w7   D s   :B  BBhostc                     | j         d S | j                             |          }||d         d S |d         |d         fS )NrD   r   )rj   authenticators)r^   rk   	auth_infos      r   get_credentialszNetRCInfo.get_credentials   sK    ?"4O22488		! 44!il++r   N)__name__
__module____qualname__r>   OptionalListr.   r_   propertyre   rj   Tuplero   r   r   r   rW   rW      s        ! !fofk#.>? !4 ! ! ! !
  FOEK8       X ,C ,FOFLc<R,S , , , , , ,r   rW   c                  F   dt           j        v rBt          t           j        d                   } |                                 rt	          |           S dt           j        v rBt          t           j        d                   }|                                rt	          |          S d S )NSSL_CERT_FILESSL_CERT_DIR)r[   environr   rd   r.   is_dir)ssl_filessl_paths     r   get_ca_bundle_from_envr      s    "*$$
?344 	!x== ##
>233?? 	!x== 4r   c                    g }d}|                      |          } | s|S t          j        d|           D ]}	 |                    dd          \  }}n# t          $ r |d}}Y nw xY wd|                     d          i}|                    d          D ]X}	 |                    d          \  }} n# t          $ r Y  n0w xY w|                      |          ||                     |          <   Y|                    |           |S )	a7  
    Returns a list of parsed link headers, for more info see:
    https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Link
    The generic syntax of those is:
    Link: < uri-reference >; param1=value1; param2="value2"
    So for instance:
    Link; '<http:/.../front.jpeg>; type="image/jpeg",<http://.../back.jpeg>;'
    would return
        [
            {"url": "http:/.../front.jpeg", "type": "image/jpeg"},
            {"url": "http://.../back.jpeg"},
        ]
    :param value: HTTP Link entity-header field
    :return: list of parsed link headers
    z '"z, *<;r   r-   urlz<> '"=)stripr   split
ValueErrorappend)	r   linksreplace_charsvalr   paramslinkparamkeys	            r   parse_header_linksr      s=     13EMKK&&E x&&  	"))C++KC 	" 	" 	"rCCC	"syy**+\\#&& 	H 	HE"[[--
UU   -2[[-G-GD=))**TLs#   AA! A!B,,
B:9B:authorizationzproxy-authorizationitemsc              #      K   | D ]D\  }}t          |                                          t          v rt          d|          }||fV  Ed S )Nz[secure])match_type_of)to_strr   SENSITIVE_HEADERSto_bytes_or_str)r   kvs      r   obfuscate_sensitive_headersr      sb         1!'')) 111
!<<<Ad



 r   F   c                   :    e Zd Zdedej        dej        ddfdZdS )Loggermessageargskwargsr   Nc                     d S rp   r   )r^   r   r   r   s       r   tracezLogger.trace   s    r   )rq   rr   rs   r.   r>   Anyr   r   r   r   r   r      sH        S  vz d      r   r   c                    t           sda t          j        t          d           t          j                            dd                                          }|dv rt          j        d          	                    |dk    rt          j
        nt                     t          j        t          j                  }|                    t          j        dd	
                                         |           t          j        |           dt"          dt$          j        dt$          j        ddffd}|_        t%          j        t,                    S )z
    Get a `logging.Logger` instance, and optionally
    set up debug logging based on the HTTPX_LOG_LEVEL environment variable.
    TTRACEHTTPX_LOG_LEVELr-   )DEBUGr   httpxr   z2%(levelname)s [%(asctime)s] %(name)s - %(message)sz%Y-%m-%d %H:%M:%S)fmtdatefmtr   r   r   r   Nc                 6     j         t          | g|R i | d S rp   )logTRACE_LOG_LEVEL)r   r   r   loggers      r   r   zget_logger.<locals>.trace  s-    
?G=d===f=====r   )_LOGGER_INITIALIZEDloggingaddLevelNamer   r[   r{   getupper	getLoggersetLevelr   StreamHandlersysstderrsetFormatter	Formatter
addHandlerr.   r>   r   r   castr   )r6   	log_levelhandlerr   r   s       @r   
get_loggerr      sJ     '"_g666JNN#4b99??AA	***&w//FOOY'-A-AGMMWWW+CJ77G  !L/     g&&&t$$F>s >6: > > > > > > > > FL;vv&&&r   r   r   c                 X    | j         | j         S ddd                    | j                  S )NP   i  )httphttps)portr   scheme)r   s    r   port_or_defaultr     s/    
xx%%))#*555r   otherc                     | j         |j         k    o/| j        |j        k    ot          |           t          |          k    S )z@
    Return 'True' if the given URLs share the same origin.
    )r   rk   r   )r   r   s     r   same_originr     sC    
 	
el" 	;H
"	;C  OE$:$::r   c                  $   t                      } i }dD ]0}|                     |          r| |         }d|v r|nd| || d<   1d |                     dd                              d          D             }|D ]}|dk    ri c S |rd	|d
| <   |S )z+Gets proxy information from the environment)r   r   allz://zhttp://c                 6    g | ]}|                                 S r   )r   )r   rk   s     r   r   z+get_environment_proxies.<locals>.<listcomp>.  s     SSStdjjllSSSr   nor-   ,*Nzall://*)r   r   r   )
proxy_infomountsr   hostnameno_proxy_hostss        r   get_environment_proxiesr     s     J57F*  >>&!! 	!&)H!X--3GX3G3G f>>>" TSz~~dB/G/G/M/Mc/R/RSSSN" 0 0 s??
 III 	0 ,0F'X''(Mr   rI   c                 Z    t          | t                    r|                     |          n| S rp   r"   r.   r$   r(   s     r   to_bytesr   C  s(    %/s%;%;F5<<!!!Fr   c                 Z    t          | t                    r| n|                     |          S rp   )r"   r.   r=   r(   s     r   r   r   G  s'    uc**F55X0F0FFr   r   c                 X    t          |t                    r| n|                                 S rp   r   )r   r   s     r   r   r   K  s#    }c22F55Fr   c                 R    | d         | d         cxk    rdk    rn n
| dd         n| S )Nr   r	   r   r   r/   s    r   unquoter   O  s=    (eBi666636666652;;EAr   filenamec                 B    | rt          j        |           d         pdS d S )Nr   zapplication/octet-stream)	mimetypes
guess_type)r   s    r   guess_content_typer   S  s,     O#H--a0N4NN4r   streamc                 Z   	 |                                  }t          j        |          j        }n{# t          t
          f$ rg 	 |                                 }|                     dt          j                  }|                     |           n# t          t
          f$ r Y Y dS w xY wY nw xY w|S )zs
    Given a file-like stream object, return its length in number of bytes
    without reading it into memory.
    r   N)	filenor[   fstatst_sizeAttributeErrorOSErrortellseekSEEK_END)r   fdlengthoffsets       r   peek_filelike_lengthr   Y  s    
]]__"%G$ 
 
 
	 [[]]F[[BK00FKK( 	 	 	444	  
 Ms4   -0 B(A	BB(B"B(!B""B('B(c                   B    e Zd ZdefdZddZddZdefdZdefdZdS )	Timerr   c                   K   t          j                    }|dk    rdd l}|                                S |dk    rdd l}|                                 d {V S dd l}|                                                                S )Ntrior   curio)	sniffiocurrent_async_libraryr   current_timer   clockasyncioget_event_looptime)r^   libraryr   r   r   s        r   	_get_timezTimer._get_times  s      /11fKKK$$&&&LLL&&&&&&&%%'',,...r   Nc                 6    t          j                    | _        d S rp   r   perf_counterstartedr^   s    r   
sync_startzTimer.sync_start  s    (**r   c                 H   K   |                                   d {V | _        d S rp   r   r   r  s    r   async_startzTimer.async_start  s-      !^^--------r   c                 <    t          j                    }|| j        z
  S rp   r   r^   nows     r   sync_elapsedzTimer.sync_elapsed  s    !!T\!!r   c                 N   K   |                                   d {V }|| j        z
  S rp   r  r  s     r   async_elapsedzTimer.async_elapsed  s4      NN$$$$$$$$T\!!r   )r   N)	rq   rr   rs   floatr   r  r  r	  r  r   r   r   r   r   r  s        / / / / /+ + + +. . . ."e " " " ""U " " " " " "r   r   c                       e Zd ZdZdeddfdZdddefdZede	fd	            Z
defd
Zdd defdZdej        defdZdS )
URLPatterna  
    A utility class currently used for making lookups against proxy keys...

    # Wildcard matching...
    >>> pattern = URLPattern("all")
    >>> pattern.matches(httpx.URL("http://example.com"))
    True

    # Witch scheme matching...
    >>> pattern = URLPattern("https")
    >>> pattern.matches(httpx.URL("https://example.com"))
    True
    >>> pattern.matches(httpx.URL("http://example.com"))
    False

    # With domain matching...
    >>> pattern = URLPattern("https://example.com")
    >>> pattern.matches(httpx.URL("https://example.com"))
    True
    >>> pattern.matches(httpx.URL("http://example.com"))
    False
    >>> pattern.matches(httpx.URL("https://other.com"))
    False

    # Wildcard scheme, with domain matching...
    >>> pattern = URLPattern("all://example.com")
    >>> pattern.matches(httpx.URL("https://example.com"))
    True
    >>> pattern.matches(httpx.URL("http://example.com"))
    True
    >>> pattern.matches(httpx.URL("https://other.com"))
    False

    # With port matching...
    >>> pattern = URLPattern("https://example.com:1234")
    >>> pattern.matches(httpx.URL("https://example.com:1234"))
    True
    >>> pattern.matches(httpx.URL("https://example.com"))
    False
    patternr   Nc                    ddl m} |rd|vrt          d| d| d           ||          }|| _        |j        dk    rdn|j        | _        |j        d	k    rdn|j        | _        |j        | _        |j        r|j        d	k    r	d | _        d S |j                            d
          r@t          j
        |j        dd                    }t          j        d| d          | _        d S |j                            d	          r@t          j
        |j        dd                    }t          j        d| d          | _        d S t          j
        |j                  }t          j        d| d          | _        d S )Nr   r   :zUProxy keys should use proper URL forms rather than plain scheme strings. Instead of "z", use "z://"r   r-   r   z*.rD   z^.+\.$z^(.+\.)?^)_modelsr   r   r  r   rk   r   
host_regex
startswithr   r   compile)r^   r  r   r   domains        r   r_   zURLPattern.__init__  s          	s'))>&> >07> > >   c'llJ%//bbSZ(c//BBsx	H	x 	<38s??DHDOOOx""4(( <38ABB<00"$*-?f-?-?-?"@"@$$S)) <38ABB<00"$*-B-B-B-B"C"C 38,,"$*]]]]";";r   r   r   c                     | j         r| j         |j         k    rdS | j        r(| j        !| j                            |j                  sdS | j        | j        |j        k    rdS dS )NFT)r   rk   r  r8   r   r^   r   s     r   matcheszURLPattern.matches  sr    ; 	4;%,665I	+O))%*55 , 59 TY%*%<%<5tr   c                 v    | j         dnd}t          | j                   }t          | j                   }|||fS )z
        The priority allows URLPattern instances to be sortable, so that
        we can match from most specific to least specific.
        Nr   r   )r   lenrk   r   )r^   port_priorityhost_priorityscheme_prioritys       r   priorityzURLPattern.priority  sB     "Y2TYt{+++}o>>r   c                 *    t          | j                  S rp   )hashr  r  s    r   __hash__zURLPattern.__hash__  s    DL!!!r   c                 "    | j         |j         k     S rp   )r!  r  s     r   __lt__zURLPattern.__lt__  s    }u~--r   c                 L    t          |t                    o| j        |j        k    S rp   )r"   r  r  r  s     r   __eq__zURLPattern.__eq__  s     %,,N1NNr   )rq   rr   rs   __doc__r.   r_   boolr  rv   tupler!  intr$  r&  r>   r   r(  r   r   r   r  r    s        ' 'R< < < < < <>U t     ?% ? ? ? X?"# " " " ".L .T . . . .OFJ O4 O O O O O Or   r  rp   )rI   )Dr2   r   r   re   r[   r   r   r   r>   pathlibr   urllib.requestr   r   _typesr   TYPE_CHECKINGr  r   r:   updateranger  joinkeysr@   Unionr.   r#   r*  r&   r)   r0   r5   rB   rP   rQ   rR   rt   rU   rW   r   ru   Dictr   r   Iterablerw   AnyStrIteratorr   r   r   r   r   r,  r   r   r   r   r   r   r   r   r   r   r   r  r   r   r   <module>r:     s          				 				 



         % % % % % %  ! ! ! ! ! !	  +0v$>$> ! ! ( (MM%%h*?*?MMM   %"*IINN%F%K%K%M%MNNNOO   9 9<U
#99 9 	9 9 9 9" 6:- -<U
#-/2-
- - - -/ c         (C (S%Z(@ (U ( ( ( ( 			 6?3#7    :, , , , , , , ,>	 4 	 	 	 	"c "fk&+c3h2G&H " " " "J %&;< ?6<v}(DEF_V\&-">?@         W^   'S 'V ' ' ' 'D6 66?3#7 6 6 6 6U 5 T    #S&/#2F-F!G # # # #LG GFLe, G G% G G G GG G&,sEz* Gc G G G G GG3 Gv} G G G G GB3 B3 B B B B!5 &/#:N     0D    2" " " " " " " ">kO kO kO kO kO kO kO kO kO kOr   