a
    ñ»j"  ã                
   @   sÎ   d dl Z d dlZd dlmZ d dlmZmZ ddlmZ ddgZ	e
edœd	d„Ze
ed
œdd„Ze
edœdd„Ze
e
edœdd„Ze
eee
  edœdd„Zde
eee
 eee eee
  e
edœdd„ZdS )é    N)ÚOptional)ÚunquoteÚurlparseé   )ÚWebSocketProxyExceptionÚ	parse_urlÚget_proxy_info)ÚurlÚreturnc                 C   s¾   d| vrt dƒ‚|  dd¡\}} t| dd�}|jr:|j}nt dƒ‚d}|jrR|j}d}|d	krh|sŠd
}n"|dkr~d}|sŠd}nt d| ƒ‚|jr˜|j}nd}|jr²|d|j› �7 }||||fS )z®
    parse url and the result is tuple of
    (hostname, port, resource path and the flag of secure mode)

    Parameters
    ----------
    url: str
        url string.
    ú:zurl is invalidr   Úhttp)Úschemezhostname is invalidr   FÚwséP   ÚwssTi»  zscheme %s is invalidú/ú?)Ú
ValueErrorÚsplitr   ÚhostnameÚportÚpathÚquery)r	   r   Úparsedr   r   Ú	is_secureÚresource© r   ú4E:\soccer\ml_env\Lib\site-packages\websocket/_url.pyr      s2    
)Úaddrr
   c                 C   s>   t | tƒstdƒ‚zt | ¡ W n ty4   Y dS 0 dS d S )Nz'_is_ip_address() argument 1 must be strFT)Ú
isinstanceÚstrÚ	TypeErrorÚ	ipaddressÚ
ip_addressr   )r   r   r   r   Ú_is_ip_addressK   s    
r$   )r   r
   c                 C   s,   zt  | ¡ W n ty"   Y dS 0 dS d S )NFT)r"   Ú
ip_networkr   ©r   r   r   r   Ú_is_subnet_addressV   s
    r'   )ÚipÚnetr
   c                 C   s2   zt  | ¡ t  |¡¡W S  ty,   Y dS 0 d S )NF)r"   r%   Ú	subnet_ofr!   )r(   r)   r   r   r   Ú_is_address_in_network_   s    r+   )r   Úno_proxyr
   c                    s¢   |s2t j dt j dd¡¡ dd¡ }r2| d¡}|s:g }d|v rFdS ˆ |v rRdS tˆ ƒrpt‡ fdd	„|D ƒƒS d
d	„ |D ƒD ]}| d¡}ˆ  |¡r~ dS q~dS )Nr,   ZNO_PROXYÚ ú ú,Ú*Tc                    s   g | ]}t |ƒrtˆ |ƒ‘qS r   )r'   r+   )Ú.0Zsubnetr&   r   r   Ú
<listcomp>v   s   þz%_is_no_proxy_host.<locals>.<listcomp>c                 S   s   g | ]}|  d ¡r|‘qS )Ú.)Ú
startswith)r1   Údomainr   r   r   r2   |   ó    r3   F)	ÚosÚenvironÚgetÚreplacer   r$   ÚanyÚlstripÚendswith)r   r,   Úvr5   Z	endDomainr   r&   r   Ú_is_no_proxy_hostf   s,    ÿ

þÿ

r?   r   )r   r   Ú
proxy_hostÚ
proxy_portÚ
proxy_authr,   Ú
proxy_typer
   c                 C   s¤   t | |ƒrdS |r0|stdƒ‚|}|}|||fS |r8dnd}	tj |	tj |	 ¡ d¡¡ dd¡}
|
r t|
ƒ}|jrŽt	|jp|dƒt	|j
pˆdƒfnd}|j|j|fS dS )aœ  
    Try to retrieve proxy host and port from environment
    if not provided in options.
    Result is (proxy_host, proxy_port, proxy_auth).
    proxy_auth is tuple of username and password
    of proxy authentication information.

    Parameters
    ----------
    hostname: str
        Websocket server name.
    is_secure: bool
        Is the connection secure? (wss) looks for "https_proxy" in env
        instead of "http_proxy"
    proxy_host: str
        http proxy host name.
    proxy_port: str or int
        http proxy port.
    no_proxy: list
        Whitelisted host names that don't use the proxy.
    proxy_auth: tuple
        HTTP proxy auth information. Tuple of username and password. Default is None.
    proxy_type: str
        Specify the proxy protocol (http, socks4, socks4a, socks5, socks5h). Default is "http".
        Use socks4a or socks5h if you want to send DNS requests through the proxy.
    )Nr   Nz+Cannot use port 0 when proxy_host specifiedZhttps_proxyZ
http_proxyr-   r.   N)r?   r   r7   r8   r9   Úupperr:   r   Úusernamer   Úpasswordr   r   )r   r   r@   rA   rB   r,   rC   r   ÚauthZenv_keyÚvalueÚproxyr   r   r   r   ƒ   s(    #

ÿÿý)Nr   NNr   )r"   r7   Útypingr   Úurllib.parser   r   Ú_exceptionsr   Ú__all__r    Útupler   Úboolr$   r'   r+   Úlistr?   Úintr   r   r   r   r   Ú<module>   s2   .	      ù
ø