a
    »ô_p(  ã                   @   sä  d Z ddlZddlZddlZddlmZ zddlZddlmZ W n* e	yj   ddl
mZ ddlmZ Y n0 ddlmZmZmZmZmZ ddlmZmZmZ e e¡Zi Zi ZG d	d
„ d
ƒZzPddl Z ej!dkr
ee jƒedƒkr
ddl"Z#e#j$j%j&Z'dd„ Z(e(e#j$j%_&W n e	y$   dZY nt0 G dd„ de j)eƒZ*e*ed< e +dg ¡ ,d¡ e +dg ¡ ,d¡ ddl-Z-de- .e j)j&¡d v r˜e +dg ¡ ,d¡ G dd„ deƒZ/e/ed< e +dg ¡ ,d¡ ej0dkràe +dg ¡ ,d¡ zddl1Z1W n e	y    Y n¨0 zddl2m3Z3 W nF e	yX   zddl3m3Z3 W n  e	yR   ddl4m3Z3 Y n0 Y n0 G dd„ deƒZ5e5ed< e +dg ¡ ,d¡ e +dg ¡ ,d¡ e +dg ¡ ,d¡ G dd„ dƒZ6dg fd d!„Z7dg fd"d#„Z8d$d%„ Z9e8ƒ  dS )&z%Pythonic simple SOAP Client transporté    N)ÚLooseVersion)Ú	CookieJar)Úrequesté   )Ú
__author__Ú__copyright__Ú__license__Ú__version__ÚTIMEOUT)ÚSimpleXMLElementÚTYPE_MAPÚStructc                   @   s   e Zd Zedd„ ƒZdS )ÚTransportBasec                 C   s   | j t| v S ©N)Ú_wrapper_nameÚ_http_facilities)ÚclsZfeature_name© r   ú8/usr/lib/python3/dist-packages/pysimplesoap/transport.pyÚsupports_feature:   s    zTransportBase.supports_featureN)Ú__name__Ú
__module__Ú__qualname__Úclassmethodr   r   r   r   r   r   9   s   r   Ú3z0.7.7c              
   O   s,   |	  dd¡dA }
t| |||||||
d d S )NÚ"disable_ssl_certificate_validationT)ÚportÚkey_fileÚ	cert_fileÚtimeoutÚcontextÚcheck_hostname)ÚgetÚorig__init__)ÚselfZhostr   r   r   r   r    r!   ÚargsÚkwargsZchkr   r   r   ÚfixerI   s
    
þr'   c                   @   s$   e Zd Zdej ZdZddd„ZdS )ÚHttplib2Transportzhttplib2 %sÚhttplib2NFc                 C   s   i }|r8dd l }tjf d|ji|¤Ž|d< t d| ¡ ttjƒtdƒkrR||d< ttjƒtdƒkrx|d u |d< ||d	< tjj	| fi |¤Ž d S )
Nr   Z
proxy_typeZ
proxy_infozusing proxy %sz0.3.0r   z0.7.0r   Zca_certs)
Úsocksr)   Z	ProxyInfoZPROXY_TYPE_HTTPÚlogÚinfor   r	   ÚHttpÚ__init__)r$   r   ÚproxyÚcacertÚsessionsr&   r*   r   r   r   r.   X   s    zHttplib2Transport.__init__)NNF)r   r   r   r)   r	   Ú_wrapper_versionr   r.   r   r   r   r   r(   T   s   
r(   r)   r/   r0   r   c                   @   s4   e Zd Zdej ZdZd
dd„Zddi fdd	„ZdS )Úurllib2Transportz
urllib2 %sÚurllib2NFc                 C   sÀ   |d ur|   d¡stdƒ‚|r&tdƒ‚|r2tdƒ‚g }tjd dkrNtjdksftjd dkrŽtjd	krŽt ¡ }d
|_tj|_| 	t
j|d¡ |r¤| 	t
 tƒ ¡¡ t
j|Ž }|j| _|| _d S )Nr   z/timeout is not supported with urllib2 transportz-proxy is not supported with urllib2 transportz,cacert is not support with urllib2 transportr   é   )r5   é   é	   é   )r8   r5   r   F)r    )r   ÚRuntimeErrorÚsysÚversion_infoÚsslZcreate_default_contextr!   Z	CERT_NONEZverify_modeÚappendr4   ZHTTPSHandlerZHTTPCookieProcessorr   Zbuild_openerÚopenÚrequest_openerÚ_timeout)r$   r   r/   r0   r1   Úhandlersr    Zopenerr   r   r   r.   x   s*    ÿÿ
zurllib2Transport.__init__ZGETc              
   C   sx   t  |||¡}z"| j|| jd}| ¡ | ¡ fW S  t jyr } z(|jdkrN‚ | ¡ | ¡ fW  Y d }~S d }~0 0 d S )N)r   iô  )r4   ZRequestr?   r@   r,   ÚreadZ	HTTPErrorÚcode)r$   ÚurlÚmethodÚbodyÚheadersZreqÚfr   r   r   r      s    
zurllib2Transport.request)NNNF)	r   r   r   r4   r	   r2   r   r.   r   r   r   r   r   r3   t   s   

r3   r4   r1   )r5   é   )ÚStringIOc                   @   s(   e Zd ZejZdZddd„Zdd„ ZdS )	ÚpycurlTransportÚpycurlNFc                 C   s   || _ |pi | _|| _d S r   )r   r/   r0   )r$   r   r/   r0   r1   r   r   r   r.   µ   s    
zpycurlTransport.__init__c                 C   sd  t  ¡ }| t j|¡ d| jv r4| t j| jd ¡ d| jv rR| t j| jd ¡ d| jv rp| t jd| j ¡ tƒ | _	| t j
| j	j¡ | jr | |j| j¡ | t j| jr²dp´d¡ | t j| jrÊdpÌd¡ | t j| j¡ | t j| j¡ |dkr| t jd¡ | t j|¡ |rFd	d
„ | ¡ D ƒ}t |¡ | t j|¡ | ¡  | ¡  i | j	 ¡ fS )NZ
proxy_hostZ
proxy_portZ
proxy_userz%(proxy_user)s:%(proxy_pass)sr   r   r5   ÚPOSTc                 S   s   g | ]\}}d ||f ‘qS )z%s: %sr   )Ú.0ÚkÚvr   r   r   Ú
<listcomp>Ò   ó    z+pycurlTransport.request.<locals>.<listcomp>)rL   ZCurlZsetoptZURLr/   ZPROXYZ	PROXYPORTZPROXYUSERPWDrJ   ZbufZWRITEFUNCTIONÚwriter0   ZCAINFOZSSL_VERIFYPEERZSSL_VERIFYHOSTZCONNECTTIMEOUTr   r
   rM   Z
POSTFIELDSÚitemsr+   ÚdebugZ
HTTPHEADERZperformÚcloseÚgetvalue)r$   rD   rE   rF   rG   ÚcZhdrsr   r   r   r   º   s4    




zpycurlTransport.request)NNF)	r   r   r   rL   Úversionr2   r   r.   r   r   r   r   r   rK   ±   s   
rK   rL   c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚDummyTransportz$Testing class to load a xml responsec                 C   s
   || _ d S r   )Úxml_response)r$   r[   r   r   r   r.   â   s    zDummyTransport.__init__c                 C   s,   t  d||¡ t  |¡ t  |¡ i | jfS )Nz%s %s)r+   rU   r[   )r$   ÚlocationrE   rF   rG   r   r   r   r   å   s    

zDummyTransport.requestN)r   r   r   Ú__doc__r.   r   r   r   r   r   rZ   ß   s   rZ   c                 C   sÄ   | d ur4z
t |  W S  ty2   td| f ƒ‚Y n0 |sHt  dt d ¡S t  ¡ }g }|D ]0}|D ]}|t |g ¡v r`| |¡ q`|}g }qXz|d }W n  ty¶   td|f ƒ‚Y n
0 t | S d S )Nz%s transport is not availabler)   r4   r   z8no transport available which supports these features: %s)Ú_http_connectorsÚKeyErrorr9   r"   Úkeysr   r=   Ú
IndexError)ÚlibraryÚfeaturesZcurrent_candidatesZnew_candidatesZfeatureÚ	candidateZcandidate_namer   r   r   Úget_http_wrapperì   s(    
re   c                 C   s   t | |ƒatS )z'Set a suitable HTTP connection wrapper.)re   r-   )rb   rc   r   r   r   Úset_http_wrapper  s    
rf   c                   C   s   t S )zReturn current transport class)r-   r   r   r   r   Úget_Http  s    rg   ):r]   Zloggingr<   r:   Zdistutils.versionr   r4   Z	cookielibr   ÚImportErrorZurllibr   Zhttp.cookiejarÚ r   r   r   r	   r
   Z	simplexmlr   r   r   Z	getLoggerr   r+   ZsocketZ
realsocketZ
socketwrapr^   r   r   r)   rY   Zhttp.clientZhttpZclientZHTTPSConnectionr.   r#   r'   r-   r(   Ú
setdefaultr=   ÚinspectZ
getargspecr3   r;   rL   Z	cStringIOrJ   ÚiorK   rZ   re   rf   rg   r   r   r   r   Ú<module>   sv   
 
&(!