o
    M,h+                     @   sH   d Z ddlZG dd dZG dd dZG dd dZG d	d
 d
ZdS )zThe Proxy implementation.    Nc                   @   s   e Zd ZdZedd ZdS )ProxyTypeFactoryzFactory for proxy types.c                 C   s
   | |dS )Nff_valuestring r   r   r   k/var/www/www-root/data/www/bot.pdev.uz/venv/lib/python3.10/site-packages/selenium/webdriver/common/proxy.pymake   s   
zProxyTypeFactory.makeN)__name__
__module____qualname____doc__staticmethodr   r   r   r   r   r      s    r   c                   @   sp   e Zd ZdZeddZeddZeddZedd	Z	ed
dZ
eddZeddZedd ZdS )	ProxyTypezSet of possible types of proxy.

    Each proxy type has 2 properties: 'ff_value' is value of Firefox
    profile preference, 'string' is id of proxy type.
    r   DIRECT   MANUAL   PAC   	RESERVED1   
AUTODETECT   SYSTEM   UNSPECIFIEDc                 C   sr   t |trd|v r|d }t| }t| D ]}t| |}t |tr1d|v r1|d |kr1|  S qtd| )Nr   zNo proxy type is found for )
isinstancedictstrupperdirgetattr	Exception)clsvalueattr
attr_valuer   r   r   load.   s   
zProxyType.loadN)r	   r
   r   r   r   r   r   r   r   
RESERVED_1r   r   r   classmethodr'   r   r   r   r   r      s    r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )_ProxyTypeDescriptorc                 C   s   || _ || _d S N)namep_type)selfr,   r-   r   r   r   __init__;   s   
z_ProxyTypeDescriptor.__init__c                 C   s   t || jS r+   )r!   r,   )r.   objr#   r   r   r   __get__?   s   z_ProxyTypeDescriptor.__get__c                 C   sf   | j dkrt|tstd| j dkrtjdtdd t|d| j t	|d| j t	|| j | d S )	N
autodetectz,Autodetect proxy value needs to be a booleanftpProxy8ftpProxy is deprecated and will be removed in the futurer   
stacklevel _verify_proxy_type_compatibility	proxyType)
r,   r   bool
ValueErrorwarningswarnDeprecationWarningr!   r-   setattr)r.   r0   r$   r   r   r   __set__B   s   
z_ProxyTypeDescriptor.__set__N)r	   r
   r   r/   r1   r?   r   r   r   r   r*   :   s    r*   c                   @   s  e Zd ZdZejZdZdZdZ	dZ
dZdZdZdZdZdZedejZ	 edejZ	 edejZ	 edejZ	 ed	ejZ	 ed
ejZ	 edejZ	 edejZ	 edejZ	 edejZ	 dddZe dd Z!e!j"dddZ!dd Z#dd Z$dd Z%dS )ProxyzMProxy contains information about proxy type and necessary proxy
    settings.F Nr2   r3   	httpProxynoProxyproxyAutoconfigUrlsslProxy
socksProxysocksUsernamesocksPasswordsocksVersionc                 C   sH  |rd|v r|d rt |d | _d|v r'|d r'tjdtdd |d | _d|v r4|d r4|d | _d|v rA|d rA|d | _d|v rN|d rN|d | _	d	|v r[|d	 r[|d	 | _
d
|v rh|d
 rh|d
 | _d|v ru|d ru|d | _d|v r|d r|d | _d|v r|d r|d | _d|v r|d r|d | _dS dS dS dS )zuCreates a new Proxy.

        :Args:
         - raw: raw proxy data. If None, default class values are used.
        r8   r3   r4   r   r5   rB   rC   rD   rE   r2   rF   rG   rH   rI   N)r   r'   
proxy_typer;   r<   r=   	ftp_proxy
http_proxyno_proxyproxy_autoconfig_urlrE   auto_detectsocks_proxysocks_usernamesocks_passwordsocks_version)r.   rawr   r   r   r/      s<   








zProxy.__init__c                 C   s   | j S )z"Returns proxy type as `ProxyType`.)r8   )r.   r   r   r   rJ     s   zProxy.proxy_typereturnc                 C   s   |  | || _dS )zKSets proxy type.

        :Args:
         - value: The proxy type.
        N)r7   r8   )r.   r$   r   r   r   rJ   $  s   

c                 C   s,   | j tj|fvrtd| d| j  dd S )NzSpecified proxy type (z') not compatible with current setting ())r8   r   r   r:   )r.   compatible_proxyr   r   r   r7   .  s
   z&Proxy._verify_proxy_type_compatibilityc                 C   s>   d| j d  i}g d}|D ]}t| |}|r|||< q|S )Nr8   r   )
r2   r3   rB   rD   rE   rC   rF   rG   rH   rI   )r8   lowerr!   )r.   
proxy_capsproxiesproxyr&   r   r   r   to_capabilities4  s   
zProxy.to_capabilitiesc                 C   s   | j d  }d|i}|dkrj| jr| j|d< | jr| j|d< | jr'| j|d< | jdur1| j|d< | jrht| jtrId	d
 | j	dD |d< |S t| jt
rdtdd | jD s]td| j|d< |S td|S |dkrv| jrv| j|d< |S )zConvert proxy settings to BiDi format.

        Returns:
        -------
            dict: Proxy configuration in BiDi format.
        r   r8   manualrB   rE   rF   NrI   c                 S   s   g | ]
}|  r|  qS r   )strip).0hostr   r   r   
<listcomp>_  s    z&Proxy.to_bidi_dict.<locals>.<listcomp>,rC   c                 s   s    | ]}t |tV  qd S r+   )r   r   )r_   hr   r   r   	<genexpr>a  s    z%Proxy.to_bidi_dict.<locals>.<genexpr>z'no_proxy list must contain only stringsz>no_proxy must be a comma-separated string or a list of stringspacrD   )r8   rX   rB   rE   rF   rI   rC   r   r   splitlistall	TypeErrorrD   )r.   rJ   resultr   r   r   to_bidi_dictI  s4   






zProxy.to_bidi_dictr+   )rU   N)&r	   r
   r   r   r   r   r8   r2   r3   rB   rC   rD   rE   rF   rG   rH   rI   r*   r   rO   r   rK   rL   rM   r   rN   	ssl_proxyrP   rQ   rR   rS   r/   propertyrJ   setterr7   r\   rk   r   r   r   r   r@   R   sR    
%
	r@   )r   r;   r   r   r*   r@   r   r   r   r   <module>   s   