
    ck                        d Z ddlmZ ddlZej        dk    reZ	 ddlZn# e	$ r ddlZY nw xY wddl
Z
ddlZddlZddlZddlZddlZddlmZmZmZmZmZ ddlmZmZmZmZ ddlmZmZmZ dd	lm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)mZm*Z* dd
l+m,Z,  ej-        e.          Z/ G d de0          Z1 e2ddddd          Z3 G d de4          Z5d Z6e.dk    rdS dS )z*Pythonic simple SOAP Client implementation    )unicode_literalsN3   )
__author____copyright____license____version__TIMEOUT)SimpleXMLElementTYPE_MAPREVERSE_TYPE_MAPStruct)get_http_wrapperset_http_wrapperget_Http)Aliasfetch	sort_dictmake_keyprocess_elementpostprocess_elementget_messagepreprocess_schemaget_local_nameget_namespace_prefixr   urlsplit)UsernameTokenc                   D    e Zd ZddZd Zej        dk    reZnd Zd ZdS )	SoapFaultNc                 j    || _         || _        || _        t                              | |||           d S N)	faultcodefaultstringdetailRuntimeError__init__)selfr"   r#   r$   s       5/usr/lib/python3/dist-packages/pysimplesoap/client.pyr&   zSoapFault.__init__+   s8    "&dI{FCCCCC    c                 $    | j         d| j        S )N: )r"   r#   r'   s    r(   __unicode__zSoapFault.__unicode__1   s    >>>4+;+;<<r)   r   c                 R    |                                                      dd          S )Nasciiignore)r-   encoder,   s    r(   __str__zSoapFault.__str__7   s$    ##%%,,Wh???r)   c                     dt          | j                  dt          | j                  dt          | j                  dS )NzSoapFault(faultcode = z, faultstring z, detail = ))reprr"   r#   r$   r,   s    r(   __repr__zSoapFault.__repr__:   sO     KOPTP^K_K_K_K_KOPTP`KaKaKaKaKOPTP[K\K\K\K\^ 	^r)   r!   )	__name__
__module____qualname__r&   r-   sysversionr2   r6    r)   r(   r   r   *   sw        D D D D= = = {S	@ 	@ 	@^ ^ ^ ^ ^r)   r   z)http://schemas.xmlsoap.org/soap/envelope/z"http://www.w3.org/2003/05/soap-envz'http://www.w3.org/2003/05/soap-envelope)soap11soapsoapenvsoap12	soap12envc                       e Zd ZdZddddddddddddddedddddddfdZd Zd Zd	 Zd
 Z	d Z
d Zd Zd Zd ZdddZdZdZdZd Zd ZddZd Zd Zd ZdS )
SoapClientzSimple SOAP Client (simil PHP)NT Fc                    || _         || _        || _        || _        || _        || _        dx| _        | _        |pi | _        |pg | _	        || _
        |	r=|
dk    r7t          |	          \  }}}}}t          j                            ||z             }
|
| _        |rB|du rt           j        }n|}t!          j        |           t&                              |           |s
|sd| _        n|s
|rd| _        n|| _        || _        i | _        d| _        |r|                    d          rtt5          j                    \  }}t          j        |dd	          }t&                              d
|z             |                    |           |}|                                 || _         tC                      }  | ||||          | _"        |r2|r0tG          | j"        d          r| j"        $                    ||           |r4|r2tG          | j"        d          r| j"        %                    ||d           || _&        |sd| _'        nd| _'        |	o| (                    |	|          | _)        d| _*        dS )zf
        :param http_headers: Additional HTTP Headers; example: {'Host': 'ipsec.example.com'}
        rD   T)levelr>   r?   Nz-----BEGIN CERTIFICATE-----zw+bzSaving CA certificate to %s)timeoutcacertproxysessionsadd_credentialsadd_certificate)keycertdomainaW  <?xml version="1.0" encoding="UTF-8"?>
<%(soap_ns)s:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:%(soap_ns)s="%(soap_uri)s">
<%(soap_ns)s:Header/>
<%(soap_ns)s:Body>
    <%(method)s xmlns="%(namespace)s">
    </%(method)s>
</%(soap_ns)s:Body>
</%(soap_ns)s:Envelope>z<?xml version="1.0" encoding="UTF-8"?>
<%(soap_ns)s:Envelope xmlns:%(soap_ns)s="%(soap_uri)s" xmlns:%(ns)s="%(namespace)s">
<%(soap_ns)s:Header/>
<%(soap_ns)s:Body><%(ns)s:%(method)s></%(ns)s:%(method)s></%(soap_ns)s:Body></%(soap_ns)s:Envelope>)cache)+certsslkeyssllocationaction	namespace
exceptionsxml_requestxml_responsehttp_headerspluginsstrictr   ospathdirnamewsdl_basedirloggingDEBUGbasicConfiglogsetLevel_SoapClient__soap_ns_SoapClient__soap_server_SoapClient__headers_SoapClient__call_headers
startswithtempfilemkstempfdopendebugwritecloserI   r   httphasattrrL   rM   _SoapClient__ns_SoapClient__xml
wsdl_parseservicesservice_port)!r'   rT   rU   rV   rO   rW   rJ   nssoap_nswsdlr`   rQ   rI   rK   soap_serverrH   rZ   traceusernamepasswordkey_filer[   r\   
url_schemenetlocr^   queryfragmentrF   fdfilenamefHttps!                                    r(   r&   zSoapClient.__init__L   s     "$/114,(.B}" 	:LB&&8@5JeX7??6D=99L(  	 }}e,,,,LL 	%r 	%#DNN 	%R 	%&DNN$DN ) "  	f''(EFF 	#+--LB	"eR((AII3h>???GGFOOOFGGIII zzDuxXXX	 	> 	>ty"344 >	))(H=== 	NH 	Nty"344 N	))hT")MMM 	 	g	DJJgDJ CU!C!C r)   c                 ,      j         s fdS  fdS )z)Return a pseudo-method that can be calledc                  &     j         g| R i |S r!   )callargskwargsattrr'   s     r(   <lambda>z(SoapClient.__getattr__.<locals>.<lambda>   s#    949T+KD+K+K+KF+K+K r)   c                  &     j         g| R i |S r!   )	wsdl_callr   s     r(   r   z(SoapClient.__getattr__.<locals>.<lambda>   s#    >4>$+P+P+P+P+P+P r)   )rv   )r'   r   s   ``r(   __getattr__zSoapClient.__getattr__   s3    } 	QKKKKKKPPPPPPr)   c           
      "   t           | j                 }| j        t          || j        | j        | j        |          z  }t          || j        o| j        | j                  }|                    dd          }|r"t          |	                                          }n|}|rxt          |d         t                    r] |dt          t                                                               }	t          |	|           |	                    |d                    n|rw| j        dk    s	| j        d	u rdnd
}
|D ][\  }}t!          |d          r|
r|j                            dd
          }n|
}t'          ||                              |||           \nH| j        dv r?t           |dt          t                                                               |           | j        r<| j        s5t          d | j        	                                D                       | _        d| j        v rG| j        s@t3          j        dt6                     | j                            t;                                 | j        r |dt          t                                                               }| j        	                                D ]N\  }}t          |t                    r|                    |           0|                    ||| j        d	           O|r] |dt          t                                                               }|                                D ]}|                    |           | j        D ]"}|                    | ||||| j        |           #|                                 | _!        | "                    || j!                  | _#        t          | j#        | j        | j        dv           }| j$        rm |dt          t                                                     d	          r: |dt          t                                                     d	          }d}|r|                                r| j        | %                    |          }|                                d         &                                }|d                             |          ptN          }|                                d         (                    |d	          }n!tS          |                                          }tU          tO          |j+                  tO          |j,                  |          | j        D ]"}|-                    | ||||| j        |           #|S )zPrepare xml request and make SOAP call, returning a SimpleXMLElement.

        If a keyword argument called "headers" is passed with a value of a
        SimpleXMLElement object, then these headers will be inserted into the
        request.
        )methodrV   rx   ry   soap_uri)rV   prefixheadersNr   Bodyrx   jettyFT
namespaces)jbossas6c                 F    g | ]\  }}|                     d           ||fS )zwsse:)rj   .0kvs      r(   
<listcomp>z#SoapClient.call.<locals>.<listcomp>   sG     (F (F (F41a/0||G/D/D(FA (F (F (Fr)   zwsse:Securityz/Replace wsse:Security with UsernameToken pluginHeader)rx   add_children_ns)r   )rV   r   Faultrx   errorr$   faultsr\   ).soap_namespacesrf   rt   dictrV   rs   r   poplistitems
isinstancevaluesdelattrimport_noderg   	qualifiedrr   r   getgetattrmarshallrh   rv   ri   r[   warningswarnDeprecationWarningappendr   children
preprocessas_xmlrX   sendrY   rW   get_operationget_nameunicode
unmarshallr5   r   r"   r#   postprocess)r'   r   r   r   r   xmlrequestrequest_headers
parametersbodyuse_nsr   r   rx   header	subheaderpluginresponse	detailXmlr$   	operation
fault_namefaults                          r(   r   zSoapClient.call   s    #4>2j4v*..#'9(,)1	3 3 3 3
 #3$)2N/3y: : : !**Y55  	fllnn--JJJ 	Q*Z]4DEE 	Q76d?+A+A+C+C&D&DFFFDD&!!!Z]++++ 	Q"0G;;t~QV?V?VTT]aF" ? ?11l++    ))$55BBB((11!Q21>>>>? =00GGFtO,B,B,D,D'E'EGGGPPP > 	G$- 	G"& (F (F4>;O;O;Q;Q (F (F (F #G #GD dn,,T\,MK,. . .L000 	OWX$/E/E/G/G*H*HJJJF+1133 	O 	O1 a!122 O &&q))))OOAqTYONNNN 	.WX$/E/E/G/G*H*HJJJF,5577 . .	""9---- l 	> 	>FdGVT6$(NH> > > > #>>++ IIfd.>??#D$5*.*<
*JL L L? 	$xxD9O9O9Q9Q4R4RZ_``` 	$ d?3I3I3K3K.L.LTYZZZIF 	8Y//11 	8=, $ 2 26 : :I!*!3!3!5!5a!8!A!A!C!CJ &h/33J??J7E&//11!4??e?TTFF!)"4"4"6"677FGH$677#H$899"$ $ $
 l 	? 	?FtXvtV%)^X? ? ? ? r)   c                    | j         dk    rdS t          d          }t          | j                   }| j        rt          | j                  }nt          | j                  |z   }dt          t	          |                    d}| j        d|z   dz   |d<   |                    | j                   t                              d|z             t          	                    d	
                    d
 |                                D                                  t          	                    |           t          j        dk     r+t          d |                                D                       }| j                            ||||          \  }}|| _        || _        t          	                    d	
                    d |                                D                                  t          	                    |           |S )zSend SOAP request using HTTPtestNPOSTztext/xml; charset="UTF-8")zContent-typezContent-length"
SOAPActionzPOST %s
c                 "    g | ]\  }}|d |S r+   r<   r   s      r(   r   z#SoapClient.send.<locals>.<listcomp>3  s'    KKK41aAA.KKKr)   r   c              3   X   K   | ]%\  }}t          |          t          |          fV  &d S r!   )strr   s      r(   	<genexpr>z"SoapClient.send.<locals>.<genexpr>;  s7      HH1CFFCFF+HHHHHHr)   )r   r   c                 "    g | ]\  }}|d |S r   r<   r   s      r(   r   z#SoapClient.send.<locals>.<listcomp>B  s'    LLL41aAA.LLLr)   )rT   r   rv   rU   lenupdaterZ   rd   inforn   joinr   r:   r;   r   rq   r   r   content)	r'   r   r   http_methodrT   soap_actionr   r   r   s	            r(   r   zSoapClient.send  s   =F""FF&kkt}%%= 	4dk**KKdk**V3K 8!#c((mm
 

 ;"$'+$5$;GL!t()))X%&&&		$))KK7==??KKKLLMMM		#;
 HHHHHHHG I--kW . > >' 		$))LL8>>;K;KLLLMMNNN		'r)   c                 *   | j                             d          rdpd}| j        ss| j                                        D ]X\  }}d |d                                         D             D ]\  }}|d         |k    r||f| _         nt          d|z            Yn/| j        | j        d                  d         | j        d                  }| j        s|d	         | _        |d
                             |          }|st          d|d| j                  |S )Nr@   r=   c                     g | ]}|S r<   r<   )r   ports     r(   r   z,SoapClient.get_operation.<locals>.<listcomp>K  s    'R'R'R'R'R'Rr)   portssoap_verz2Cannot determine service in WSDL: SOAP version: %sr   r   rT   
operationsz
Operation z' not found in WSDL: Service/Port Type: )rf   rj   rw   rv   r   r%   rT   r   )r'   r   r   service_nameservice	port_namer   r   s           r(   r   zSoapClient.get_operationF  sk   >,,X66C8Ox  
	V)-)<)<)>)> F F%g'R'R9I9O9O9Q9Q'R'R'R F FOItJ'833,8),C) 4 ' (:<D(E F F F 	F =!21!56w?@QRS@TUD} 	- ,DM&**622	 	<, &(9(9 ; < < < r)   c                 0    |                      |||          S )FPre and post process SOAP call, input and output parameters using WSDL)wsdl_call_with_args)r'   r   r   r   s       r(   r   zSoapClient.wsdl_call]  s    ''f===r)   c                 J   t           | j                 }|                     |          }|d         }|d         }|                    d          }d|v r|d         | _        d|v r|d         pd| _        |d         | _        |rt          || j                  | _	        | 
                    ||||          \  }}	 | j        |g|	R  }
 |
d|	                                                              || j        
          }|o&t          |                                          d         S )r   inputoutputr   rU   rV   rD   r   r   r   r   r   )r   rf   r   r   rU   rV   r   r   rh   ri   wsdl_call_get_paramsr   r   r   r\   r   r   )r'   r   r   r   r   r   r   r   r   paramsr   resps               r(   r   zSoapClient.wsdl_call_with_argsa  s5   "4>2&&v..	 '"8$x((y  #H-DK)##&{39rDN&{3DN  	D"+FDN"C"CD2265$OO 49V-f---x8,,,5577BB6RVR]B^^.T[[]]++A..r)   c                    dx}x}}i }|r/t          |                                          d         }||         }|r|ri }	t          |          D ]h\  }
}t          |                                          |
         }t          |t                    r"||vrt          d|z            ||         |	|<   c||	|<   i|                    ||	i           |r|s|r|r|                    ||i           |                     ||          \  }}}|st          d|z            t          ||          }t          |
                                          d         }g }|                                D ]U\  }}|j        |         }|j        |         st          |t                    r
||j        d<   |                    ||f           V| j        dv r|}n|}n|o|                                }||fS )z'Build params from input and args/kwargsNr   z)Unhandled key %s. use client.help(method)z"Invalid Args Structure. Errors: %s)axis)r   keys	enumerater   r   KeyErrorr   wsdl_validate_params
ValueErrorr   r   r   r   
referencesr   r   rg   )r'   r   r   r   r   r   	inputname	inputargsall_argsdidxargrN   validerrorsr   treerootr   r   root_nss                        r(   r   zSoapClient.wsdl_call_get_params|  s0   )---Y 	)UZZ\\**1-Ii(I 	,T 	,A%dOO ! !S9>>++,,S1c4(( !#~~&'RUX'XYYY XAcFF AcFFOOYN+++ 	/f 	/ 	/ 5F 3444&*&?&?x&P&P#E68 P !E!NOOOUH--D&&q)DF

 & &1/!,q) 1jF.C.C 1)0AL&q!f%%%%!Z// # .Fr)   c                 `   g }g }d}t          |          t          |          k    rd}t          |t                    st          |t                    rd}nd}|t          k    rt          }t          |t
          t          t          f          s|t          j                    v rjt          |          |k    sU|S	  ||           ng#  d}|	                    dt          |          d|dt          |          d|           Y n%xY wn t          |t
                    rst          |          dk    r`t          |t
                    sK|                     |d         |          \  }}}	|sd}|                    |            |j        |	           nt          |t                    r|r|r|D ]v}
|
|vr!d}|	                    d	|
d
|d|           '|                     ||
         ||
                   \  }}}	|sd}|                    |            |j        |	           w|D ]}
|
|vr |j	        d|
d|d|            n|r|s |j	        d|d|           n|s |rd}|	                    d|d|           nnt          |t
                    rQ|d         }|D ]E}|                     ||          \  }}}	|sd}|                    |            |j        |	           Fn?|s=d}|	                    dt          |          d|dt          |          d|           |||fS )zValidate the arguments (actual values) for the parameters structure.
           Fail for any invalid arguments or type mismatches.TFNz,Type mismatch for argument value. parameter(z): z, value(r   r   zArgument key z not in parameter. parameter: z, args: zParameter key z not in args. parameter: z	, value: z'parameter keys not in args. parameter: z'Args keys not in parameter. parameter: zType mismatch. parameter()typer   r   r   r   r   tupler   r   r   r   r   extend)r'   structvaluer  r   r  	typematch
next_validnext_errorsnext_warningsrN   struct_list_valueitems                r(   r   zSoapClient.wsdl_validate_params  sV     <<4;;&&I&$'' 	Jud,C,C 	IIIS==F&4u"566 1	z6X]__;T;T;;&((e.?UF5MMMMU!EMMMjnoujvjvjvjvx~x~x~  AE  FK  AL  AL  AL  AL  NS  NS  #T  U  U  U  U  U%% )	z#f++*:*::eUYCZCZ*:595N5NvVWyZ_5`5`2J] MM+&&&HOM**** %%  	z %   	7 	7C&(( %ehehehjpjpjprwrw&xyyyyAEAZAZ[abe[fhmnqhrAsAs>
K) *$)Ek222'6666! y yC%'''dgdgdgioioioqvqv(wxxxy   Y_Y_Y_afaf ghhhh  W]W]W]_d_deffff%% 
	z &q	 / /9=9R9RSdfj9k9k6
K! "!Ek***..../  	zEMMMtTZ||||]c]c]ceijoepepepeprwrwxyyyvx((s   7C ?Dc           
         |                      |          }|                    d          }|o:|                                o&t          |                                          d         }t	          |t
                    r2d                    d |                                D                       }n$t	          |t                    rt          |          }|                    d          }|r-t          |d                                                   d         }|                    d          pd}|d|pd	d
|r|pd	d|                    dd	          d|	S )zDReturn operation documentation and invocation/returned value exampler   r   , c              3   D   K   | ]\  }}|d t          |          V  dS )=N)r5   r   s      r(   r   z"SoapClient.help.<locals>.<genexpr>  s7      OOADGGG4OOOOOOr)   r   r   N(rD   z)
 -> z:

documentationz

Headers: )	r   r   r   r   r   r   r   r   r5   )r'   r   r   r   r   r   s         r(   helpzSoapClient.help  sH   &&v..	g&&D%,,..DT%,,..-A-A!-DeT"" 	 IIOOOOOOOEEt$$ 	 KKEx(( 	;)H-446677:F--	**2dFFKRKKv###MM/2....G
 	
r)   r=   r@   )z%http://schemas.xmlsoap.org/wsdl/soap/z'http://schemas.xmlsoap.org/wsdl/soap12/z http://schemas.xmlsoap.org/wsdl/z http://www.w3.org/2001/XMLSchemaz)http://www.w3.org/2001/XMLSchema-instancec           	         t          || j        ||| j        | j                  }t	          || j                  }d| _        t           |dd                    pd| _        i }|	                                pg D ]}|
                                dv r|d         }|d         }	|	t                              d
|z             H|	|v rt                              d|	z             j|||	<   t                              d|d|	           t          |	| j        ||| j        | j                  }t	          || j                  }
|                    |
           |S )zJUnmarshall the WSDL at the given url into a tree of SimpleXMLElement nodes)rV   rD   r  Fr   importrV   rT   Nz"WSDL location not provided for %s!zWSDL %s already imported!zImporting wsdl z from )r   rq   r`   rZ   r   wsdl_urirV   r   r  r   r   rd   warningrn   xsd_urir   )r'   urlrQ   force_downloadr   rz   imported_wsdlselementwsdl_namespacewsdl_locationimported_wsdls              r(   _url_to_xml_treezSoapClient._url_to_xml_tree  sr    CE>4;LdN_``t}=== $TT/%G%G%GHHNB }}," 	0 	0G%%''H55!(!5 '
 3 (KK D~ UVVV N22KK ;m KLLL0>}-			WXXXM49e^TM^`d`qrr 0 M M M  /// r)   c                 0   d}i }|dd         D ]d\  }}|| j         v r'|                    d          r||t          |          <   || j        k    r$|                    d          rt          |          }ei }i }	i }
i }i }dt	          |dd                                                   v r |dd          rS|                    d| j                  }t	          |dd                   }|                    d	| j                  | _        | j        r| j        d
k    r|d	         p| j        | _        i }d| j        i} |dd          pg D ]I} |d| j        d          }|pg D ]/}t          |||| j        | j
        | j        ||| j        |
  
         0Jt          |g            |j        D ]} |dd          pg D ]}i }|d         }|s|d         }t          |          }|                    |          }|d         pd}|| j        k    rt          |          }t#          j        |d          }||i}|d         |f|	vr.t%                      }||j        d<   |d         |i|	|d         |f<   n(|	|d         |f                                         d         }||j        |<   d|j        |<   |                    |           t          |          }|                    t-          |d|                    }|s`|                    t-          |d|                    }t%                      }|||<   ||j        d<   ||j        |<   d|j        |<   |d         |i}n||i}||	|d         |f<   |j        D ]H}|d         }i x}|
|<   i x}|d<   |j        D ]&} | d         }!i x}"||!<   | d         |"d<   | d         pd                    d          |"d<   t5           | dd                    pd|"d<    | dd          rOt          | j        d                   |"d<   t          | j        d                   }#|                     |#          |"d<    | dd          rt          | j        d                   |"d<   i x}$|"d <    | d!d          }%|%. | d!d          D ] }&t          |&d                   |$|&d         <   !(J|j        D ]}'t          |'d                   }||
vr|
|         }|'d         }( |'d"t=          |                                          d          })|)r|)d#         pd}*|)r|)d         pd}+|(t?          j         |d                   ||*|+d$x},||(<   |'j        D ]u} | d         }! | d%t=          |                                          d          }-|-o|-d&         }.|,d         !                    |!i           }"|!|"d<   |"                    d|+          |"d<   |.|.|"d'<    | dd          }/|/o, |/d(t=          |                                          d          }0|0r|0d)         pd}1g }2|/o, |/d*t=          |                                          d          }3|3pg D ](}4|4d         |4d         d+}5|2"                    |5           )d|"v ri }3|2D ]w}6t          |6                    d                    }7t          |6                    d                    }8tG          |	|7p|"d         |8          }5|5r|3                    |5           wxtG          |	|"d         |1|"d                   |"d<   |3|"d*<   	 t=          |"d                                                   d         }|j        d         }9|j$        }:n(# tJ          tL          f$ r};|"d         }9d}:Y d};~;nd};~;ww xY w|9r
|9|"d<   |:|"d,<   |"d= n
d|"d<   d|"d*<    | dd          }<|<o, |<d(t=          |                                          d          }0|0r|0d)         pd}=d|"v rtG          |	|"d         |=          |"d<   |"d= nd|"d<   d |"v rOi x}%|"d-<   |"d                                          D ]-}>tG          |	|>|=          }?t=          |?          d         }@|?|%|@<   .g }A|<o, |<d*t=          |                                          d          }3|3pg D ](}4|4d         |4d         d+}5|A"                    |5           )w |d.d          pg D ]}B|Bd         }C|Cs|!                    |Ci           }Di x}E|Dd/<   |Bd         pd|Dd<   |Bj'        D ]}Ft          |Fd"                   }(|(|vrt?          j         ||(                   x},|E|Fd         <    |Fd0t=          |                                          d          }G|Gr|Gd1         pd}H|Go&|                    |G(                                          }I|Io| j                             |I          }J|,                    |H|C|I|Jd2           ڐ|s	d/ddii|d<   t=          d3 |                                D                       tS          d4 |                                D                       z   }d};g | _*        |D ]$}|;|k    r| j*        "                    |           |};%|S )5zNConvert SimpleXMLElement tree representation of the WSDL into pythonic objectsNzxmlns:zhttp://xml.apache.org/xml-soaptypesFr  schemar   targetNamespacezurn:DefaultNamespacer   )global_namespacespartr&  r  namer   complexTyper   styleparameterOrderrD    parameter_orderr  r   message	input_msgrV   r   
output_msg
fault_msgsr   binding	transport)r1  r   port_type_namer<  r3  r   
soapActionrU   r   partsr   )r7  r0  r   r   r   r   addressrT   )rT   r   r   r   c              3   F   K   | ]}t          |          t           u |V  d S r!   r  r   es     r(   r   z3SoapClient._xml_tree_to_services.<locals>.<genexpr>6  s,      HHaQ4HHr)   c              3   F   K   | ]}t          |          t           u|V  d S r!   rB  rC  s     r(   r   z3SoapClient._xml_tree_to_services.<locals>.<genexpr>6  se        RH  RHXYvz{|v}v}  BF  wF  wFRS  wF  wF  wF  wF  RH  RHr)   )+soap_ns_urisrj   r   r"  r   r   r,  r   rV   r   rg   rq   r`   r   r7  r   get_namespace_urir   r   r   r   r   r   portTyper   splitr   r   r   r;  r   copydeepcopy
setdefaultr   r   r   AttributeErrorr   r   
get_prefixsortedelements)Kr'   rz   rQ   r$  xsd_ns	soap_urisr   r   rP  messages
port_typesbindingsrv   r-  attrsimported_schemasr/  r,  schemasr7  r0  r&  element_nametype_nstype_uri	part_namefnodport_type_noder=  	port_typer   operation_nodeop_nameoprx   r:  r   r   binding_nodebinding_namesoap_bindingr<  r3  r;  op_oprU   r   r   parts_input_bodyparts_input_headersr   r   hdrinput_header
header_msgheader_partns_urir   rD  r   parts_output_bodymsgmsg_objtag_nameparts_output_headersr   r   servr   r   r@  rT   r   r   sK                                                                              r(   _xml_tree_to_servicesz SoapClient._xml_tree_to_services7  s_    	G 	+ 	+DAqD%%%!,,x*@*@%/0	.++,DL  Q\\(%;%; '**
 ,tDG}}/C/C/E/EEEtG5))) NH>>VAAAY!&+<dn!M!M> KT^7M%M%M!%&7!8!JDN!4>2 T'///52 	G 	GEeHUCCCG!-R G G!&*:Hdl"&"4di"0$2C4EG G G G GG 	Hb)))| &	E &	EGe444: %E %E#I# 0#'<L.|<<11':: L0D	t|++#1,#?#?L)-lDAAB("oG38CC#XX.6d+BI&/SUAV'&/9!=>>%wv	&BCJJLLQO/7BM),/4BM),IIg&&&&#1,#?#?L!h|Y&Q&QRRB 
5%\\(<PX*Y*YZZ#XX(*9.6d+3;i038i0#*6?B"7#/"4=DHgfoy9::K%EN #m 	U 	UN+F3N577I
>2355J<0"0": U U(0+--Z(,W57)78H)I)OR(V(VWZ([([$%&-nn_TY.Z.Z.Z&[&[&a_a?#!>'777 K&4^5I)5T&U&UB{O-n.B9.MNNB&4&F&Fr&J&JB{O!>(%888 X'5n6KI6V'W'WB|$ 132
R-'u===%!/u!E!E!E U U4B5CS4T4T
5=11)U, !L a	5 a	5L+L,@AANZ//">2I'/L'<	d9;K;K;M;M6N6NV[\\\L$Bk)BJdI :\'%:BdE %"mIl,CDD"0&0 0 Gh|, #/"8 N5 N5(0&{tI<L<L<N<N7O7OW\]]]65#6\*55grBB$6
 ffWe447%#)BxL 'we<<<Xv$y7G7G7I7I2J2JRW!X!X!X#'#9DM#AT  ')#]EE(tI<L<L<N<N7O7OW\$]$]$]%m 4 4F&,Y&7PPC'..s3333"$$ G(; ! !%3L4D4DY4O4O%P%P
&4\5E5Ef5M5M&N&N)(J4Q"[/S^__ !#NN3//// "-h;IY[]^o[p"q"qBwK#*BxL)"&r'{'9'9';';"<"<Q"?!(!3D!9$+$5		*H5 ) ) )!#K$(						)  4*0;*3; ; #'BwK#'BxL'>>>Z&&D9I9I9K9K4L4LTY"Z"Z"Z$($:T']$Bd!2%%#.xL9IK\#]#]BxL<((#'BxL2%%,..FR\!,/6688 3 3"-h=N"O"O#'==#3+2x(( (*$ _VVHi>N>N>P>P9Q9QY^%_%_%_%m 5 5F&,Y&7PPC(//44445YN5f tIU3339r 	 	G"6?L &&|R88D$&&EDM$+O$<$BD!  -d9o>>#x//04h|>T0U0UU%V-$yT)2B2B2D2D-E-EUSSS":wz':Bd"Jy}}W5G5G5I5I'J'J#G(9(=(=h(G(G ($0 ( (	       (  	1#b$Z0HRLHH8??#4#4HHHHH6  RH  RH]e]l]l]n]n  RH  RH  RH  LH  LH  H 	 	G7{{DM00999AAs   2A]44^
^^c                    t                               d|z             d}|rdt          j        |                                          z  }t          |t                    r t          j        	                    ||          }t          j        
                    |          r%t                               d|           t          |d          }t          j        |          }|                                 |d         dd         t          j        d	          d
         dd         k    s|d         |k    rnt#          j        dt&                     t                               d|d         d	t                     t                               d|d         d	|           d}n"|d         | _        |d         | _        |d         S t,          t.          d<   |                     |||          }|                     |||          }|rct          |d          }t          j        d	          d
         || j        | j        |d}t          j        ||           |                                 |S )z"Parse Web Service Description v1.1zParsing wsdl url: %sFz%s.pklzUnpickle file rr;   NrG   r5  r   r#  z/version or url mismatch! discarding cached wsdlz	Version: zURL: TrV   r  rv   stringwb)r;   r#  rV   r  rv   )rd   rn   hashlibmd5	hexdigestr   
basestringr]   r^   r   existsopenpickleloadrp   r	   rI  r   r   RuntimeWarningrV   r  r   r   r*  ru  dump)	r'   r#  rQ   r$  filename_pklr   pklrz   rv   s	            r(   ru   zSoapClient.wsdl_parse?  s8    			(3./// 	+#gk#&6&6&@&@&B&BBL%,, A!w||E<@@w~~l++ +			?@@@s++k!nn			y>#2#&+*;C*@*@*CCRC*HHHCPUJZ]L]L]M"SUcdddIII#i...++NOOOIIIc%jjj##>???%)NN%(%5DN),_)=D&z?* &)"$$S%@@--dE>JJ  
	\4((A&,S11!4!^!%!3$ C KQGGIIIr)   c                     || j         |<   dS )zCSet SOAP Header value - this header will be sent for every request.N)rh   )r'   r  r  s      r(   __setitem__zSoapClient.__setitem__r  s    $tr)   c                    | j                                          | j                            t	          j                              r=t                              d| j        z             t          j	        | j                   dS dS )z+Finish the connection and remove temp fileszremoving %sN)
rq   rp   rI   rj   rk   
gettempdirrd   rn   r]   unlinkr,   s    r(   rp   zSoapClient.closev  sp    	;!!("5"7"788 	#IImdk1222Idk"""""	# 	#r)   c           
      <   d}|dz  }| j         D ]{}t          |t                    r|j        }nTt          |t                    r|j        }n7t          |t                    r!|j        d         dk    rt          |          }ns|d|z  z  }|| j	        D ]}|d|z  z  }| j	        |         d         }|D ]}||         }|d         d k    r|d	|d
         z  z  }|d|d         z  z  }|d|d         z  z  }|d|d         z  z  }|dz  }|d         }t          |          D ]x}|                     |          }|                    d          }|o:|                                o&t          |                                          d         }d}	t          |t                    rd|vs|d         d k    r|                                D ]l\  }
}t          |t                    r|j        }n?t          |t                    r|j        }n"t          |t                    r|j        d         }|	|
d|dz  }	m|                    d          }|r-t          |d                                                   d         }|d|d
         d|	d d         dz  }|d|z  z  }z
|S )NzSOAP CLIENTz

 ELEMENTSr   r&  z
  %sz
 SERVICE (%s)r   r   z
   PORT (%s)r1  z
    Location: %srT   z
    Soap ver: %sz
    Soap URI: %sr   z
    OPERATIONSr   r   r   rD   r   r+   r  r   z
     r  r4   z
      > %s)rP  r   r  r7   r   xml_typer   rN   r5   rv   rO  r   r   r   r   r   r   )r'   srD  r   r   r   r   r   r   	input_strr   r   r   s                r(   r6   zSoapClient.__repr__}  s   	] 		 		A!T"" JAu%% JAv&& 158Y+>+>GGAAA} "	1 "	1G"W,,AM'*73E 1 1T{
#t++X%V44)D,<<<)D,<<<)D,<<<''!,/
!'
!3!3 1 1I $ 2 29 = =I%MM'22E!PellnnPellnn9M9Ma9PE "I!%.. 	A'u44l8KT8Q8Q(- A A1#-a#6#6 !1()
AA%/5%9%9 !1()
AA%/6%:%: !1()aA )111aaa-@ @		&]]844F G!%i&9&@&@&B&B!C!CA!FA!&)))!#2# A &00AA-11B r)   )F)r7   r8   r9   __doc__r
   r&   r   r   r   r   r   r   r   r   r  rF  r   r"  xsi_urir*  ru  ru   r  rp   r6   r<   r)   r(   rC   rC   J   s       (( $TTt4DDrtT7"%T^! ^! ^! ^!@Q Q Qh h hT' ' 'R  .> > >/ / /62  2  2 hE) E) E)N
 
 
, 2:3; L 2H0G9G! ! !FF F FP1 1 1 1f% % %# # #1 1 1 1 1r)   rC   c                     i }| dS d| v r|                      d          \  }}nd| }}d|v r0|                     d          \  }}|t          |          c|d<   |d<   d|v r|                     d          \  |d<   |d<   |S )	zJParses proxy address user:pass@host:port into a dict suitable for httplib2N@rD   :
proxy_host
proxy_port
proxy_user
proxy_pass)rI  int)	proxy_str
proxy_dict	user_pass	host_porthostr   s         r(   parse_proxyr    s    J
i(s33	99!99	
i__S))
d=A3t99:
< *\":
i=F__S=Q=Q:
< *\":r)   __main__)7r  
__future__r   r:   r;   r   r   cPickler  ImportErrorrJ  rz  ra   r]   rk   r   rD   r   r   r   r	   r
   	simplexmlr   r   r   r   r<  r   r   r   helpersr   r   r   r   r   r   r   r   r   r   r   wsser   	getLoggerr7   rd   r%   r   r   r   objectrC   r  r<   r)   r(   <module>r     s   1 0 ' ' ' ' ' ' 



;G   MMMMM    				   J J J J J J J J J J J J J J K K K K K K K K K K K K C C C C C C C C C CN N N N N N N N N N N N N N N N N N N N N N N N N N N N       g!!^ ^ ^ ^ ^ ^ ^ ^. $6	47/7  d d d d d d d dL  " zD s     	,,