Ë
    RPf"6  ã            
      óÒ  — d dl m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j-                   ed«      D � ci c]   } | dk7  sŒ	 e| «      dj3                  | «      “Œ" c} «        ej4                  dj7                  ej9                  «       D � cg c]  }  ej:                  | «      ‘Œ c} «      «      Z	 d*	 	 	 	 	 	 	 d+d„Zd*d,d„Z d-d„Z!d.d„Z"d/d„Z#d0d„Z$d1d„Z%d2d„Z&ddhZ'	 	 	 	 d3d„Z(d4d„Z)d5d„Z*d6d„Z+d7d„Z,d8d9d„Z-d8d:d„Z.d;d „Z/d<d!„Z0d=d"„Z1d>d#„Z2 G d$„ d%«      Z3 G d&„ d'«      Z4d?d(„Z5d?d)„Z6yc c} w c c} w )@é    )ÚannotationsN)ÚPath)Ú
getproxiesé   )ÚPrimitiveData©ÚURLz%22z\\)ú"ú\é    é   z%{:02X}ú|c                óz   — t        | t        «      r| }n| j                  |xs d«      }|r|j                  «       S |S )zE
    Coerce str/bytes into a strictly byte-wise HTTP header key.
    Úascii)Ú
isinstanceÚbytesÚencodeÚlower)Úvaluer   ÚencodingÚbytes_values       úF/var/www/fastapitest/venv/lib/python3.12/site-packages/httpx/_utils.pyÚnormalize_header_keyr      s<   € ô �%œÔØ‰à—l‘l 8Ò#6¨wÓ7ˆá"'ˆ;×ÑÓÐ8¨[Ð8ó    c                óP   — t        | t        «      r| S | j                  |xs 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   /   s'   € ô �%œÔØˆØ�<‰<˜Ò+ GÓ,Ð,r   c                ó2   — | du ry| du ry| €y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ÚfalseÚ )Ústr©r   s    r   Úprimitive_value_to_strr$   8   s*   € ð ��}ØØ	�%‰ØØ	ˆØÜˆu‹:Ðr   c                óN   — 	 t        j                  | «       y# t        $ r Y yw xY w)z7
    Return `True` if `encoding` is a known codec.
    FT)ÚcodecsÚlookupÚLookupError)r   s    r   Úis_known_encodingr)   G   s,   € ðÜ�‰�hÔð øô ò Ùðús   ‚ ˜	$£$c                ób   — dd„}t         j                  ||«      }| › d|› d�j                  «       S )z;
    Encode a name/value pair within a multipart form.
    c                ó2   — t         | j                  d«         S )Nr   )Ú!_HTML5_FORM_ENCODING_REPLACEMENTSÚgroup)Úmatchs    r   Úreplacerz#format_form_param.<locals>.replacerW   s   € Ü0°·±¸Q³Ñ@Ð@r   z="r
   )r.   ztyping.Match[str]Úreturnr"   )Ú_HTML5_FORM_ENCODING_REÚsubr   )Únamer   r/   s      r   Úformat_form_paramr4   R   s8   € ó
Aô $×'Ñ'¨°%Ó8€EØˆV�2�e�W˜AÐ×%Ñ%Ó'Ð'r   c                 ó(  — dt         j                  v r7t        t         j                  d   «      } | j                  «       rt	        | «      S dt         j                  v r7t        t         j                  d   «      }|j                  «       rt	        |«      S y )NÚSSL_CERT_FILEÚSSL_CERT_DIR)ÚosÚenvironr   Úis_filer"   Úis_dir)Ússl_fileÚssl_paths     r   Úget_ca_bundle_from_envr>   ^   sm   € Øœ"Ÿ*™*Ñ$ÜœŸ
™
 ?Ñ3Ó4ˆØ×ÑÔÜ�x“=Ð ØœŸ™Ñ#ÜœŸ
™
 >Ñ2Ó3ˆØ�?‰?ÔÜ�x“=Ð Ør   c                óÄ  — g }d}| j                  |«      } | s|S t        j                  d| «      D ]Š  }	 |j                  dd«      \  }}d|j                  d«      i}|j                  d«      D ]:  }	 |j                  d«      \  }} | j                  |«      ||j                  |«      <   Œ< |j	                  |«       ŒŒ |S # t        $ r |d}}Y Œ…w xY w# t        $ r Y  Œ4w xY w)	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<> '"ú=)ÚstripÚreÚsplitÚ
ValueErrorÚappend)	r   ÚlinksÚreplace_charsÚvalrA   ÚparamsÚlinkÚparamÚkeys	            r   Úparse_header_linksrO   j   sý   € ð  #%€EØ€MØ�K‰K˜Ó&€EÙØˆÜ�x‰x˜ Ó&ò ˆð	"ØŸ)™) C¨Ó+‰KˆC�ð �s—y‘y Ó*Ð+ˆØ—\‘\ #Ó&ò 	HˆEðØ"Ÿ[™[¨Ó-‘
��Uð .3¯[©[¸Ó-GˆD�—‘˜=Ó)Ò*ð	Hð 	�‰�TÕðð €Løô ò 	"Ø˜r�ŠCð	"ûô ò Úðús#   ´B?Á1CÂ?CÃCÃ	CÃCc                ól   — t         j                  j                  «       }| |d<   |j                  d ¬«      S )Nzcontent-type)Úfailobj)ÚemailÚmessageÚMessageÚget_content_charset)Úcontent_typeÚmsgs     r   Úparse_content_type_charsetrX   �   s4   € ô �-‰-×
Ñ
Ó
!€CØ&€CˆÑØ×"Ñ"¨4Ð"Ó0Ð0r   Úauthorizationzproxy-authorizationc              #  ó„   K  — | D ]7  \  }}t        |j                  «       «      t        v rt        d|¬«      }||f–— Œ9 y ­w)Nz[secure])Úmatch_type_of)Úto_strr   ÚSENSITIVE_HEADERSÚto_bytes_or_str)ÚitemsÚkÚvs      r   Úobfuscate_sensitive_headersrb   š   sD   è ø€ ð ò ‰ˆˆ1Ü�!—'‘'“)ÓÔ 1Ñ1Ü 
¸!Ô<ˆAØ�ˆd‹
ñùs   ‚>A c                ón   — | j                   �| j                   S dddœj                  | j                  «      S )NéP   é»  )ÚhttpÚhttps)ÚportÚgetÚscheme)rA   s    r   Úport_or_defaultrk   £   s/   € Ø
‡x�xÐØ�x‰xˆØ Ñ%×)Ñ)¨#¯*©*Ó5Ð5r   c                óœ   — | j                   |j                   k(  xr2 | j                  |j                  k(  xr t        | «      t        |«      k(  S )z@
    Return 'True' if the given URLs share the same origin.
    )rj   Úhostrk   )rA   Úothers     r   Úsame_originro   ©   sE   € ð
 	�
‰
�e—l‘lÑ"ò 	;Ø�H‰H˜Ÿ
™
Ñ"ò	;ä˜CÓ ¤O°EÓ$:Ñ:ðr   c                ó¶   — | j                   |j                   k7  ry| j                  dk(  xr/ t        | «      dk(  xr |j                  dk(  xr t        |«      dk(  S )zA
    Return 'True' if 'location' is a HTTPS upgrade of 'url'
    Frf   rd   rg   re   )rm   rj   rk   )rA   Úlocations     r   Úis_https_redirectrr   ´   sa   € ð ‡x�x�8—=‘=Ò Øð 	�
‰
�fÑò 	-Ü˜CÓ  BÑ&ò	-à�O‰O˜wÑ&ò	-ô ˜HÓ%¨Ñ,ð	r   c                 óÒ  — t        «       } i }dD ]*  }| j                  |«      sŒ| |   }d|v r|nd|› �||› d�<   Œ, | j                  dd«      j                  d«      D �cg c]  }|j                  «       ‘Œ }}|D ]e  }|dk(  ri c S |sŒd|v rd||<   Œt	        |«      r	d|d	|› �<   Œ-t        |«      r
d|d
|› d�<   ŒB|j                  «       dk(  r	d|d	|› �<   Œ^d|d|› �<   Œg |S c c}w )z+Gets proxy information from the environment)rf   rg   Úallz://zhttp://Únor!   ú,Ú*Nzall://zall://[ú]Ú	localhostzall://*)r   ri   rE   rC   Úis_ipv4_hostnameÚis_ipv6_hostnamer   )Ú
proxy_infoÚmountsrj   Úhostnamerm   Úno_proxy_hostss         r   Úget_environment_proxiesr€   Ã   s1  € ô “€JØ$&€Fà*ò ˆØ�>‰>˜&Õ!Ø! &Ñ)ˆHà! XÑ-‘°W¸X¸JÐ3Gð �f�X˜S�>Ò"ðð 0:¯~©~¸dÀBÓ/G×/MÑ/MÈcÓ/RÖS t�d—j‘j•lÐS€NÐSØ"ò 4ˆð �sŠ?ð
 ŠIÚð ˜Ñ Ø#'��xÒ Ü! (Ô+Ø.2�˜ ˜zÐ*Ò+Ü! (Ô+Ø04�˜  
¨!Ð,Ò-Ø—‘Ó! [Ò0Ø.2�˜ ˜zÐ*Ò+à/3�˜  
Ð+Ò,ð54ð8 €Mùò; Ts   ÁC$c                óH   — t        | t        «      r| j                  |«      S | S ©N©r   r"   r   r   s     r   Úto_bytesr„   ô   s   € Ü%/°´sÔ%;ˆ5�<‰<˜Ó!ÐFÀÐFr   c                óH   — t        | t        «      r| S | j                  |«      S r‚   )r   r"   Údecoder   s     r   r\   r\   ø   s   € Ü˜u¤cÔ*ˆ5ÐF°·±¸XÓ0FÐFr   c                óF   — t        |t        «      r| S | j                  «       S r‚   rƒ   )r   r[   s     r   r^   r^   ü   s   € Ü˜}¬cÔ2ˆ5ÐF¸¿¹»ÐFr   c                ó8   — | d   | d   cxk(  rdk(  rn n| dd S | S )Nr   éÿÿÿÿr
   r   © r#   s    r   Úunquoter‹      s'   € Ø ™( e¨B¡iÔ6°3Õ6ˆ5��2ˆ;ÐA¸EÐAr   c                ó@   — | rt        j                  | «      d   xs dS y )Nr   zapplication/octet-stream)Ú	mimetypesÚ
guess_type)Úfilenames    r   Úguess_content_typer�     s$   € ÙÜ×#Ñ# HÓ-¨aÑ0ÒNÐ4NÐNØr   c                óB  — 	 | j                  «       }t        j                  |«      j                  }|S # t        t
        f$ r\ 	 | j                  «       }| j                  dt        j                  «      }| j                  |«       Y |S # t        t
        f$ r Y Y yw xY ww xY w)zs
    Given a file-like stream object, return its length in number of bytes
    without reading it into memory.
    r   N)	Úfilenor8   ÚfstatÚst_sizeÚAttributeErrorÚOSErrorÚtellÚseekÚSEEK_END)ÚstreamÚfdÚlengthÚoffsets       r   Úpeek_filelike_lengthrž   
  s”   € ð
à�]‰]‹_ˆä—‘˜"“×%Ñ%ˆð €Møô œGÐ$ò 
ð	ð —[‘[“]ˆFØ—[‘[ ¤B§K¡KÓ0ˆFØ�K‰K˜Õð
 €Møô	 ¤Ð(ò 	âð	úð
ús(   ‚/3 ³BÁABÂBÂBÂBÂBc                  ó4   — e Zd Zdd„Zdd„Zdd„Zdd„Zdd„Zy)	ÚTimerc              ƒ  ó¨   K  — t        j                  «       }|dk(  rdd l}|j                  «       S dd l}|j                  «       j                  «       S ­w)NÚtrior   )ÚsniffioÚcurrent_async_libraryr¢   Úcurrent_timeÚasyncioÚget_event_loopÚtime)ÚselfÚlibraryr¢   r¦   s       r   Ú	_get_timezTimer._get_time$  sI   è ø€ Ü×/Ñ/Ó1ˆØ�fÒÛà×$Ñ$Ó&Ð&ãà×)Ñ)Ó+×0Ñ0Ó2Ð2ùs   ‚AAc                ó6   — t        j                  «       | _        y r‚   ©r¨   Úperf_counterÚstarted©r©   s    r   Ú
sync_startzTimer.sync_start/  s   € Ü×(Ñ(Ó*ˆ�r   c              ƒ  óJ   K  — | j                  «       ƒ d {  –—† | _        y 7 Œ
­wr‚   ©r«   r¯   r°   s    r   Úasync_startzTimer.async_start2  s   è ø€ Ø!Ÿ^™^Ó-×-ˆ�Ð-ús   ‚#–!—#c                óH   — t        j                  «       }|| j                  z
  S r‚   r­   ©r©   Únows     r   Úsync_elapsedzTimer.sync_elapsed5  s   € Ü×ÑÓ!ˆØ�T—\‘\Ñ!Ð!r   c              ƒ  ó\   K  — | j                  «       ƒ d {  –—† }|| j                  z
  S 7 Œ­wr‚   r³   r¶   s     r   Úasync_elapsedzTimer.async_elapsed9  s)   è ø€ Ø—N‘NÓ$×$ˆØ�T—\‘\Ñ!Ð!ð %ús   ‚,–*—,N)r0   Úfloat)r0   ÚNone)Ú__name__Ú
__module__Ú__qualname__r«   r±   r´   r¸   rº   rŠ   r   r   r    r    #  s   „ ó	3ó+ó.ó"ô"r   r    c                  óJ   — e Zd ZdZd	d„Zd
d„Zedd„«       Zdd„Zdd„Z	dd„Z
y)Ú
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
    c                ó8  — 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 | _        y |j
                  j                  d
«      rAt        j                  |j
                  dd  «      }t        j                  d|› d�«      | _        y |j
                  j                  d	«      rAt        j                  |j
                  dd  «      }t        j                  d|› d�«      | _        y t        j                  |j
                  «      }t        j                  d|› d�«      | _        y )Nr   r   ú:zUProxy keys should use proper URL forms rather than plain scheme strings. Instead of "z", use "z://"rt   r!   rw   z*.é   z^.+\.ú$z^(.+\.)?ú^)Ú_urlsr	   rF   Úpatternrj   rm   rh   Ú
host_regexÚ
startswithrD   ÚescapeÚcompile)r©   rÈ   r	   rA   Údomains        r   Ú__init__zURLPattern.__init__h  sI  € Ýá�s 'Ñ)Üðà&˜i x°¨y¸ð>óð ñ �'‹lˆØˆŒØŸJ™J¨%Ò/‘b°S·Z±ZˆŒØŸ(™( cš/‘B¨s¯x©xˆŒ	Ø—H‘HˆŒ	Ø�xŠx˜3Ÿ8™8 sš?Ø:>ˆD�OØ�X‰X× Ñ  Ô&ä—Y‘Y˜sŸx™x¨¨˜|Ó,ˆFÜ Ÿj™j¨6°&°¸Ð);Ó<ˆD�OØ�X‰X× Ñ  Ô%ä—Y‘Y˜sŸx™x¨¨˜|Ó,ˆFÜ Ÿj™j¨9°V°H¸AÐ)>Ó?ˆD�Oô —Y‘Y˜sŸx™xÓ(ˆFÜ Ÿj™j¨1¨V¨H°A¨Ó7ˆD�Or   c                ó  — | j                   r| j                   |j                   k7  ry| j                  r2| j                  �&| j                  j                  |j                  «      sy| j                  �| j                  |j                  k7  ryy)NFT)rj   rm   rÉ   r.   rh   ©r©   rn   s     r   ÚmatcheszURLPattern.matches†  sd   € Ø�;Š;˜4Ÿ;™;¨%¯,©,Ò6Øà�IŠIØ—‘Ð+Ø—O‘O×)Ñ)¨%¯*©*Ô5àØ�9‰9Ð  T§Y¡Y°%·*±*Ò%<ØØr   c                ó„   — | 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.
        r   r   )rh   Úlenrm   rj   )r©   Úport_priorityÚhost_priorityÚscheme_prioritys       r   ÚpriorityzURLPattern.priority“  sA   € ð "ŸY™YÐ2™¸ˆä˜TŸY™Y›˜ˆä˜tŸ{™{Ó+Ð+ˆØ˜}¨oÐ>Ð>r   c                ó,   — t        | j                  «      S r‚   )ÚhashrÈ   r°   s    r   Ú__hash__zURLPattern.__hash__¡  s   € Ü�D—L‘LÓ!Ð!r   c                ó4   — | j                   |j                   k  S r‚   )r×   rÐ   s     r   Ú__lt__zURLPattern.__lt__¤  s   € Ø�}‰}˜uŸ~™~Ñ-Ð-r   c                óX   — t        |t        «      xr | j                  |j                  k(  S r‚   )r   rÁ   rÈ   rÐ   s     r   Ú__eq__zURLPattern.__eq__§  s!   € Ü˜%¤Ó,ÒN°·±ÀÇÁÑ1NÐNr   N)rÈ   r"   r0   r¼   )rn   r	   r0   Úbool)r0   ztuple[int, int, int])r0   Úint)rn   rÁ   r0   rß   )rn   ú
typing.Anyr0   rß   )r½   r¾   r¿   Ú__doc__rÎ   rÑ   Úpropertyr×   rÚ   rÜ   rÞ   rŠ   r   r   rÁ   rÁ   >  s6   „ ñ'óR8ó<ð ò?ó ð?ó"ó.ôOr   rÁ   c                ór   — 	 t        j                  | j                  d«      d   «       y# t        $ r Y yw xY w©Nú/r   FT)Ú	ipaddressÚIPv4AddressrE   Ú	Exception©r~   s    r   rz   rz   «  ó<   € ðÜ×Ñ˜hŸn™n¨SÓ1°!Ñ4Ô5ð øô ò Ùðúó   ‚'* ª	6µ6c                ór   — 	 t        j                  | j                  d«      d   «       y# t        $ r Y yw xY wrå   )rç   ÚIPv6AddressrE   ré   rê   s    r   r{   r{   ³  rë   rì   r‚   )r   ústr | bytesr   rß   r   ú
str | Noner0   r   )r   rï   r   rð   r0   r   )r   r   r0   r"   )r   r"   r0   rß   )r3   r"   r   r"   r0   r   )r0   rð   )r   r"   r0   zlist[dict[str, str]])rV   r"   r0   rð   )r_   z4typing.Iterable[tuple[typing.AnyStr, typing.AnyStr]]r0   z4typing.Iterator[tuple[typing.AnyStr, typing.AnyStr]])rA   r	   r0   ú
int | None)rA   r	   rn   r	   r0   rß   )rA   r	   rq   r	   r0   rß   )r0   zdict[str, str | None])zutf-8)r   rï   r   r"   r0   r   )r   rï   r   r"   r0   r"   )r   r"   r[   útyping.AnyStrr0   rò   )r   r"   r0   r"   )r�   rð   r0   rð   )rš   rá   r0   rñ   )r~   r"   r0   rß   )7Ú
__future__r   r&   Úemail.messagerR   rç   r�   r8   rD   r¨   ÚtypingÚpathlibr   Úurllib.requestr   r£   Ú_typesr   ÚTYPE_CHECKINGrÇ   r	   r,   ÚupdateÚrangeÚchrÚformatrÌ   ÚjoinÚkeysrË   r1   r   r   r$   r)   r4   r>   rO   rX   r]   rb   rk   ro   rr   r€   r„   r\   r^   r‹   r�   rž   r    rÁ   rz   r{   )Úcs   0r   ú<module>r     s™  ðÝ "ã Û Û Û Û 	Û 	Û Û Ý Ý %ã å !à	×ÒÝð +0°vÑ$>Ð !Ø !× (Ñ (Ù*/°«/ÖG Q¸QÀ$»Y�SˆƒVˆY×Ñ˜aÓ Ñ ÒGôð %˜"Ÿ*™*Ø‡I�IÐ%F×%KÑ%KÓ%MÖN ˆyˆr�y‰y˜�|ÒNÓOóÐ ð  ð9Øð9àð9ð ð9ð ó	9ô -óóó	(ó	ó"óJ1ð %Ð&;Ð<Ð ðØ?ðà9óó6óóó.ôbGôGóGóBóó÷2"ñ "÷6jOñ jOóZôùòw Hùò Os   Á)
EÁ4EÂ>E$