o
    í6Wj]   ã                   @  sÆ   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d„Zd,dd„Zd-d.dd„Zd-d/dd„Zd0dd„Zd1dd„Zd2d!d"„ZG d#d$„ d$ƒZd3d'd(„Zd3d)d*„ZdS )4é    )ÚannotationsN)Ú
getproxiesé   )ÚPrimitiveData©ÚURLÚvaluer   ÚreturnÚstrc                 C  s,   | du rdS | du rdS | du r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   © r   ú[/home/esfera/Documents/content_generation/venv/lib/python3.10/site-packages/httpx/_utils.pyÚprimitive_value_to_str   s   r   údict[str, str | None]c                  C  sò   t ƒ } i }dD ]}|  |¡r"| | }d|v r|nd|› �||› d�< qdd„ |  dd¡ d¡D ƒ}|D ]C}|d	kr=i   S |rvd|v rHd
||< q3t|ƒrTd
|d|› �< q3t|ƒrad
|d|› d�< q3| ¡ dkrod
|d|› �< q3d
|d|› �< q3|S )z+Gets proxy information from the environment)ÚhttpÚhttpsÚallz://zhttp://c                 S  s   g | ]}|  ¡ ‘qS r   )Ústrip)Ú.0Úhostr   r   r   Ú
<listcomp>/   s    z+get_environment_proxies.<locals>.<listcomp>Únor   ú,Ú*Nzall://zall://[ú]Ú	localhostzall://*)r   ÚgetÚsplitÚis_ipv4_hostnameÚis_ipv6_hostnameÚlower)Ú
proxy_infoÚmountsÚschemeÚhostnameÚno_proxy_hostsr   r   r   Úget_environment_proxies   s0   
ÿ€
€r)   úutf-8ústr | bytesÚencodingÚbytesc                 C  s   t | tƒr
|  |¡S | S ©N©Ú
isinstancer
   Úencode©r   r,   r   r   r   Úto_bytesO   ó   r3   c                 C  s   t | tƒr| S |  |¡S r.   )r0   r
   Údecoder2   r   r   r   Úto_strS   r4   r6   Úmatch_type_ofútyping.AnyStrc                 C  s   t |tƒr| S |  ¡ S r.   r/   )r   r7   r   r   r   Úto_bytes_or_strW   ó   r9   c                 C  s0   | d | d   krdkrn n| dd… S | S )Nr   éÿÿÿÿú"r   r   r   r   r   r   Úunquote[   s   0r=   Ústreamú
typing.Anyú
int | Nonec                 C  sr   z|   ¡ }t |¡j}W |S  ttfy8   z|  ¡ }|  dtj¡}|  |¡ W Y |S  ttfy7   Y Y dS w w )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)r>   ÚfdÚlengthÚoffsetr   r   r   Úpeek_filelike_length_   s   ôüþørM   c                   @  sP   e Zd ZdZddd„Zddd„Zeddd„ƒZddd„Zddd„Z	dd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
   r	   ÚNonec                 C  s  ddl m} |rd|vrtd|› d|› d�ƒ‚||ƒ}|| _|jdkr%dn|j| _|jd	kr0dn|j| _|j| _|jr@|jd	krEd | _d S |j d
¡rat	 
|jdd … ¡}t	 d|› d�¡| _d S |j d	¡r}t	 
|jdd … ¡}t	 d|› d�¡| _d S t	 
|j¡}t	 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   Ú
ValueErrorrO   r&   r   ÚportÚ
host_regexÚ
startswithÚreÚescapeÚcompile)ÚselfrO   r   ÚurlÚdomainr   r   r   Ú__init__¢   s0   þþÿ
zURLPattern.__init__Úotherr   Úboolc                 C  sV   | j r| j |j krdS | jr| jd ur| j |j¡sdS | jd ur)| j|jkr)dS dS )NFT)r&   r   rX   ÚmatchrW   ©r]   ra   r   r   r   ÚmatchesÀ   s   ÿ
ÿzURLPattern.matchesútuple[int, int, int]c                 C  s4   | j dur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   )rW   Úlenr   r&   )r]   Úport_priorityÚhost_priorityÚscheme_priorityr   r   r   ÚpriorityÍ   s   
zURLPattern.priorityÚintc                 C  s
   t | jƒS r.   )ÚhashrO   )r]   r   r   r   Ú__hash__Û   s   
zURLPattern.__hash__c                 C  s   | j |j k S r.   )rk   rd   r   r   r   Ú__lt__Þ   s   zURLPattern.__lt__r?   c                 C  s   t |tƒo
| j|jkS r.   )r0   rN   rO   rd   r   r   r   Ú__eq__á   r:   zURLPattern.__eq__N)rO   r
   r	   rP   )ra   r   r	   rb   )r	   rf   )r	   rl   )ra   rN   r	   rb   )ra   r?   r	   rb   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r`   re   Úpropertyrk   rn   ro   rp   r   r   r   r   rN   x   s    
)


rN   r'   rb   c                 C  ó0   zt  |  d¡d ¡ W dS  ty   Y dS w ©Nú/r   FT)Ú	ipaddressÚIPv4Addressr    Ú	Exception©r'   r   r   r   r!   å   ó   þÿr!   c                 C  rv   rw   )ry   ÚIPv6Addressr    r{   r|   r   r   r   r"   í   r}   r"   )r   r   r	   r
   )r	   r   )r*   )r   r+   r,   r
   r	   r-   )r   r+   r,   r
   r	   r
   )r   r
   r7   r8   r	   r8   )r   r
   r	   r
   )r>   r?   r	   r@   )r'   r
   r	   rb   )Ú
__future__r   ry   rB   rZ   ÚtypingÚurllib.requestr   Ú_typesr   ÚTYPE_CHECKINGrU   r   r   r)   r3   r6   r9   r=   rM   rN   r!   r"   r   r   r   r   Ú<module>   s&    

1



m