o
    &=j]   ã                   @  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   úVC:\Users\psant\Downloads\Anu Raj Backend\school\venv\Lib\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)Z
proxy_infoZmountsÚschemeÚhostnameZ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   ó   r0   c                 C  s   t | tƒr| S |  |¡S r+   )r-   r
   Údecoder/   r   r   r   Úto_strS   r1   r3   Úmatch_type_ofútyping.AnyStrc                 C  s   t |tƒr| S |  ¡ S r+   r,   )r   r4   r   r   r   Úto_bytes_or_strW   ó   r6   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   ôüþørJ   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   Ú
ValueErrorrL   r$   r   ÚportÚ
host_regexÚ
startswithÚreÚescapeÚcompile)ÚselfrL   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   rU   ÚmatchrT   ©rZ   r^   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   )rT   Úlenr   r$   )rZ   Zport_priorityZhost_priorityZscheme_priorityr   r   r   ÚpriorityÍ   s   
zURLPattern.priorityÚintc                 C  s
   t | jƒS r+   )ÚhashrL   )rZ   r   r   r   Ú__hash__Û   s   
zURLPattern.__hash__c                 C  s   | j |j k S r+   )re   ra   r   r   r   Ú__lt__Þ   s   zURLPattern.__lt__r<   c                 C  s   t |tƒo
| j|jkS r+   )r-   rK   rL   ra   r   r   r   Ú__eq__á   r7   zURLPattern.__eq__N)rL   r
   r	   rM   )r^   r   r	   r_   )r	   rc   )r	   rf   )r^   rK   r	   r_   )r^   r<   r	   r_   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r]   rb   Úpropertyre   rh   ri   rj   r   r   r   r   rK   x   s    
)


rK   r%   r_   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  rp   rq   )rs   ÚIPv6Addressr    ru   rv   r   r   r   r"   í   rw   r"   )r   r   r	   r
   )r	   r   )r'   )r   r(   r)   r
   r	   r*   )r   r(   r)   r
   r	   r
   )r   r
   r4   r5   r	   r5   )r   r
   r	   r
   )r;   r<   r	   r=   )r%   r
   r	   r_   )Ú
__future__r   rs   r?   rW   ÚtypingÚurllib.requestr   Ú_typesr   ÚTYPE_CHECKINGrR   r   r   r&   r0   r3   r6   r:   rJ   rK   r!   r"   r   r   r   r   Ú<module>   s&    

1



m