U
    g!                     @   s@   d 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.c                   @   s   e Zd ZdZedd ZdS )ProxyTypeFactoryzFactory for proxy types.c                 C   s
   | |dS )NZff_valuestring r   r   r   C/tmp/pip-unpacked-wheel-3ysq0mf8/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.
        DIRECT   MANUAL   PAC   Z	RESERVED1   
AUTODETECT   SYSTEM   UNSPECIFIEDc                 C   sv   t |trd|kr|d }t| }t| D ]4}t| |}t |tr.d|kr.|d |kr.|  S q.td| d S )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   Z
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__8   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   sL   | j dkrt|tstdt|d| j t|d| j t|| j | d S )N
autodetectz,Autodetect proxy value needs to be a boolean _verify_proxy_type_compatibility	proxyType)r)   r   bool
ValueErrorr   r*   setattr)r+   r-   r"   r   r   r   __set__?   s
    z_ProxyTypeDescriptor.__set__N)r   r   r	   r,   r.   r5   r   r   r   r   r'   7   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dZ!dd Z#dd Z$dS )ProxyzMProxy contains information about proxy type and necessary proxy
    settings.F Nr/   ftpProxy	httpProxynoProxyproxyAutoconfigUrlsslProxy
socksProxysocksUsernamesocksPasswordsocksVersionc                 C   s6  |r2d|kr&|d r&t |d | _d|kr@|d r@|d | _d|krZ|d rZ|d | _d|krt|d rt|d | _d|kr|d r|d | _d|kr|d r|d | _d|kr|d r|d | _d|kr|d r|d | _	d	|kr|d	 r|d	 | _
d
|kr|d
 r|d
 | _d|kr2|d r2|d | _dS )zuCreates a new Proxy.

        :Args:
         - raw: raw proxy data. If None, default class values are used.
        r1   r8   r9   r:   r;   r<   r/   r=   r>   r?   r@   N)r   r%   
proxy_type	ftp_proxy
http_proxyno_proxyproxy_autoconfig_urlr<   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`.)r1   )r+   r   r   r   rA     s    zProxy.proxy_type)returnc                 C   s   |  | || _dS )zKSets proxy type.

        :Args:
         - value: The proxy type.
        N)r0   r1   )r+   r"   r   r   r   rA     s    
c                 C   s,   | j tj|fkr(td| d| j  dd S )NzSpecified proxy type (z') not compatible with current setting ())r1   r   r   r3   )r+   Zcompatible_proxyr   r   r   r0     s    z&Proxy._verify_proxy_type_compatibilityc              
   C   sN   d| j d  i}ddddddd	d
ddg
}|D ]}t| |}|r.|||< q.|S )Nr1   r   r/   r8   r9   r;   r<   r:   r=   r>   r?   r@   )r1   lowerr   )r+   Z
proxy_capsproxiesproxyr$   r   r   r   to_capabilities!  s"    

zProxy.to_capabilities)N)%r   r   r	   r
   r   r   r1   r/   r8   r9   r:   r;   r<   r=   r>   r?   r@   r'   r   rF   r   rB   rC   rD   r   rE   Z	ssl_proxyrG   rH   rI   rJ   r,   propertyrA   setterr0   rQ   r   r   r   r   r6   G   s:   

	r6   N)r
   r   r   r'   r6   r   r   r   r   <module>   s   