§
    ëXÊjÌ!  ã                  óÊ   — d dl m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	 ej
        rddlmZ d"d„Zd#d„Zd$d%d„Zd$d&d„Zd'd„Zd(d„Zd(d„Z G d„ d¦  «        Zd)d „Zd)d!„ZdS )*é    )ÚannotationsN)Ú
getproxiesé   )ÚPrimitiveData©ÚURLÚvaluer   ÚreturnÚstrc                ó@   — | 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Ú )r   )r	   s    ú>C:\Projects\Historical\venv\Lib\site-packages\httpx2/_utils.pyÚprimitive_value_to_strr      s6   € ð �€}€}ØˆvØ	�%ˆˆØˆwØ	ˆØˆrÝˆu‰:Œ:Ðó    údict[str, str | None]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|v rd	||<   Œt          |¦  «        r	d	|d
|› �<   Œ0t	          |¦  «        r3d|v r%|                     d¦  «        \  }}}d	|d|› d|› �<   Œhd	|d|› d�<   Œr|                     ¦   «         dk    r	d	|d
|› �<   Œ“d	|d|› �<   Œœ|S )z+Gets proxy information from the environment)ÚhttpÚhttpsÚallz://zhttp://c                ó6   — g | ]}|                      ¦   «         ‘ŒS © )Ústrip)Ú.0Úhosts     r   ú
<listcomp>z+get_environment_proxies.<locals>.<listcomp>-   s    € ÐSÐSÐS t�d—j’j‘l”lÐSÐSÐSr   Únor   ú,Ú*Nzall://ú/zall://[z]/ú]Ú	localhostzall://*)r   ÚgetÚsplitÚis_ipv4_hostnameÚis_ipv6_hostnameÚ	partitionÚlower)Ú
proxy_infoÚmountsÚschemeÚhostnameÚno_proxy_hostsÚaddrÚ_Úsubnets           r   Úget_environment_proxiesr2      s´  € õ ‘”€JØ$&€Fà*ð ]ð ]ˆØ�>Š>˜&Ñ!Ô!ð 	]Ø! &Ô)ˆHØ16¸(Ð1BÐ1B X XÐH\ÐRZÐH\ÐH\ˆF�f�>�>�>Ñ"øàSÐS¨z¯~ª~¸dÀBÑ/GÔ/G×/MÒ/MÈcÑ/RÔ/RÐSÑSÔS€NØ"ð 4ð 4ˆð �sŠ?ˆ?ð
 ˆIˆIˆIØð 	4ð ˜Ð Ð Ø#'��xÑ Ð Ý! (Ñ+Ô+ð 4Ø.2�Ð* Ð*Ð*Ñ+Ð+Ý! (Ñ+Ô+ð 	4Ø˜(�?�?Ø&.×&8Ò&8¸Ñ&=Ô&=‘O�D˜!˜VØ9=�FÐ5 TÐ5Ð5¨VÐ5Ð5Ñ6Ð6à48�FÐ0 XÐ0Ð0Ð0Ñ1Ð1Ø—’Ñ!Ô! [Ò0Ð0Ø.2�Ð* Ð*Ð*Ñ+Ð+à/3�Ð+ Ð+Ð+Ñ,øà€Mr   úutf-8ústr | bytesÚencodingÚbytesc                óZ   — t          | t          ¦  «        r|                      |¦  «        n| S ©N©Ú
isinstancer   Úencode©r	   r5   s     r   Úto_bytesr=   Q   s(   € Ý%/°µsÑ%;Ô%;ÐFˆ5�<Š<˜Ñ!Ô!Ð!ÀÐFr   c                óZ   — t          | t          ¦  «        r| n|                      |¦  «        S r8   )r:   r   Údecoder<   s     r   Úto_strr@   U   s'   € Ý˜u¥cÑ*Ô*ÐFˆ5ˆ5°·²¸XÑ0FÔ0FÐFr   Úmatch_type_ofútyping.AnyStrc                óX   — t          |t          ¦  «        r| n|                      ¦   «         S r8   r9   )r	   rA   s     r   Úto_bytes_or_strrD   Y   s#   € Ý˜}­cÑ2Ô2ÐFˆ5ˆ5¸¿º¹¼ÐFr   Ústreamú
typing.Anyú
int | Nonec                ó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)	ÚfilenoÚosÚfstatÚst_sizeÚAttributeErrorÚOSErrorÚtellÚseekÚSEEK_END)rE   ÚfdÚlengthÚoffsets       r   Úpeek_filelike_lengthrU   ]   s¼   € ð
à�]Š]‰_Œ_ˆå”˜"‘”Ô%ˆˆøÝ�GÐ$ð 
ð 
ð 
ð	ð —[’[‘]”]ˆFØ—[’[ ¥B¤KÑ0Ô0ˆFØ�KŠK˜ÑÔÐÐøÝ¥Ð(ð 	ð 	ð 	à�4�4�4ð	øøøð  Ðð
øøøð €Ms4   ‚-0 °B(ÁA	BÂB(ÂB"ÂB(Â!B"Â"B(Â'B(c                óî   — 	 |                       ¦   «         }|                      dt          j        ¦  «        }|                      |¦  «         n# t          t
          f$ r Y dS w xY wt          d||z
  ¦  «        S )zFReturn the remaining byte length without changing the stream position.r   N)rO   rP   rJ   rQ   rM   rN   Úmax)rE   rT   rS   s      r   Úpeek_filelike_remaining_lengthrX   v   s{   € ðØ—k’k‘m”mˆØ—k’k !¥R¤[Ñ1Ô1ˆØ�Š�FÑÔÐÐøÝ�GÐ$ð ð ð Øˆtˆtðøøøõ ˆq�&˜6‘/Ñ"Ô"Ð"s   ‚A	A ÁA!Á A!c                  óR   — 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
dS )Ú
URLPatternaÖ  
    A utility class currently used for making lookups against proxy keys...

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

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

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

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

    # With port matching...
    >>> pattern = URLPattern("https://example.com:1234")
    >>> pattern.matches(httpx2.URL("https://example.com:1234"))
    True
    >>> pattern.matches(httpx2.URL("https://example.com"))
    False
    Úpatternr   r
   ÚNonec                óô  — 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*.é   z^.+\.ú$z^(.+\.)?ú^)Ú_urlsr   Ú
ValueErrorr[   r,   r   ÚportÚ
host_regexÚ
startswithÚreÚescapeÚcompile)Úselfr[   r   ÚurlÚdomains        r   Ú__init__zURLPattern.__init__¬   sž  € ØÐÐÐÐÐàð 	�s 'Ð)Ð)Ýð>à&ð>ð >à07ð>ð >ð >ñô ð ð ˆc�'‰lŒlˆØˆŒØœJ¨%Ò/Ð/�b�b°S´ZˆŒØœ( cš/˜/�B�B¨s¬xˆŒ	Ø”HˆŒ	ØŒxð 	8˜3œ8 sš?˜?Ø:>ˆDŒOˆOˆOØŒX× Ò  Ñ&Ô&ð 	8å”Y˜sœx¨¨¨œ|Ñ,Ô,ˆFÝ œjÐ);°&Ð);Ð);Ð);Ñ<Ô<ˆDŒOˆOˆOØŒX× Ò  Ñ%Ô%ð 	8å”Y˜sœx¨¨¨œ|Ñ,Ô,ˆFÝ œjÐ)>°VÐ)>Ð)>Ð)>Ñ?Ô?ˆDŒOˆOˆOõ ”Y˜sœxÑ(Ô(ˆFÝ œj¨¨V¨¨¨Ñ7Ô7ˆDŒOˆOˆOr   Úotherr   Úboolc                óÈ   — | 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,   r   re   Úmatchrd   ©rj   rn   s     r   ÚmatcheszURLPattern.matchesÊ   sn   € ØŒ;ð 	˜4œ;¨%¬,Ò6Ð6Ø�5ØŒ9ð 	˜œÐ4¸T¼_×=RÒ=RÐSXÔS]Ñ=^Ô=^Ð4Ø�5ØŒ9Ð  T¤Y°%´*Ò%<Ð%<Ø�5Øˆtr   útuple[int, int, int]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   )rd   Úlenr   r,   )rj   Úport_priorityÚhost_priorityÚscheme_prioritys       r   ÚpriorityzURLPattern.priorityÓ   sB   € ð "œYÐ2˜˜¸ˆå˜TœY™œ˜ˆå˜tœ{Ñ+Ô+Ð+ˆØ˜}¨oÐ>Ð>r   Úintc                ó*   — t          | j        ¦  «        S r8   )Úhashr[   )rj   s    r   Ú__hash__zURLPattern.__hash__á   s   € Ý�D”LÑ!Ô!Ð!r   c                ó"   — | j         |j         k     S r8   )rz   rr   s     r   Ú__lt__zURLPattern.__lt__ä   s   € ØŒ}˜uœ~Ò-Ð-r   rF   c                óL   — t          |t          ¦  «        o| j        |j        k    S r8   )r:   rZ   r[   rr   s     r   Ú__eq__zURLPattern.__eq__ç   s    € Ý˜%¥Ñ,Ô,ÐN°´ÀÄÒ1NÐNr   N)r[   r   r
   r\   )rn   r   r
   ro   )r
   rt   )r
   r{   )rn   rZ   r
   ro   )rn   rF   r
   ro   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__rm   rs   Úpropertyrz   r~   r€   r‚   r   r   r   rZ   rZ   ‚   s©   € € € € € ð'ð 'ðR8ð 8ð 8ð 8ð<ð ð ð ð ð?ð ?ð ?ñ „Xð?ð"ð "ð "ð "ð.ð .ð .ð .ðOð Oð Oð Oð Oð Or   rZ   r-   ro   c                ó†   — 	 t          j        |                      d¦  «        d         ¦  «         n# t          $ r Y dS w xY wdS ©Nr!   r   FT)Ú	ipaddressÚIPv4Addressr%   Ú	Exception©r-   s    r   r&   r&   ë   óS   € ðÝÔ˜hŸnšn¨SÑ1Ô1°!Ô4Ñ5Ô5Ð5Ð5øÝð ð ð Øˆuˆuðøøøàˆ4ó   ‚-0 °
>½>c                ó†   — 	 t          j        |                      d¦  «        d         ¦  «         n# t          $ r Y dS w xY wdS r‰   )rŠ   ÚIPv6Addressr%   rŒ   r�   s    r   r'   r'   ó   rŽ   r�   )r	   r   r
   r   )r
   r   )r3   )r	   r4   r5   r   r
   r6   )r	   r4   r5   r   r
   r   )r	   r   rA   rB   r
   rB   )rE   rF   r
   rG   )r-   r   r
   ro   )Ú
__future__r   rŠ   rJ   rg   ÚtypingÚurllib.requestr   Ú_typesr   ÚTYPE_CHECKINGrb   r   r   r2   r=   r@   rD   rU   rX   rZ   r&   r'   r   r   r   ú<module>r—      s�  ðØ "Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ø 	€	€	€	Ø 	€	€	€	Ø €€€Ø %Ð %Ð %Ð %Ð %Ð %à !Ð !Ð !Ð !Ð !Ð !à	Ôð ØÐÐÐÐÐðð ð ð ð0ð 0ð 0ð 0ðfGð Gð Gð Gð GðGð Gð Gð Gð GðGð Gð Gð Gðð ð ð ð2	#ð 	#ð 	#ð 	#ðfOð fOð fOð fOð fOñ fOô fOð fOðRð ð ð ðð ð ð ð ð r   