ó
h€
\c           @   s]  d  d l  Z  d  d l m Z d  d l m Z d  d l m Z m Z m Z d  d l	 m
 Z
 m Z m Z d  d l m Z d  d l m Z m Z m Z d  d l m Z d  d	 l m Z m Z d  d
 l m Z m Z d  d l m Z d  d l m Z m Z e  j  e! ƒ Z" d e f d „  ƒ  YZ# d e# f d „  ƒ  YZ$ d e# f d „  ƒ  YZ% d e f d „  ƒ  YZ& d S(   iÿÿÿÿN(   t   etree(   t   MultipartDecoder(   t   nst   pluginst   wsa(   t   Faultt   TransportErrort   XMLSyntaxError(   t	   parse_xml(   t   as_qnamet   get_media_typet
   qname_attr(   t   MessagePack(   t   Bindingt	   Operation(   t   DocumentMessaget
   RpcMessage(   t   process_xop(   t   etree_to_stringt   url_http_to_httpst   SoapBindingc           B   st   e  Z d  Z d „  Z e d „  ƒ Z d „  Z d
 d
 d „ Z d „  Z	 d „  Z
 d „  Z e d „ Z e d	 „  ƒ Z RS(   s   Soap 1.1/1.2 bindingc         C   s2   t  t |  ƒ j | | | ƒ | |  _ | |  _ d S(   s[  The SoapBinding is the base class for the Soap11Binding and
        Soap12Binding.

        :param wsdl:
        :type wsdl:
        :param name:
        :type name: string
        :param port_name:
        :type port_name: string
        :param transport:
        :type transport: zeep.transports.Transport
        :param default_style:

        N(   t   superR   t   __init__t	   transportt   default_style(   t   selft   wsdlt   namet	   port_nameR   R   (    (    sL   /data/av2000/b2b/venv/lib/python2.7/site-packages/zeep/wsdl/bindings/soap.pyR      s    	c         C   s"   | j  d d |  j ƒ} | d k	 S(   s°   Check if this binding instance should be used to parse the given
        node.

        :param node: The node to match against
        :type node: lxml.etree._Element

        s   soap:bindingt
   namespacesN(   t   findt   nsmapt   None(   t   clst   nodet	   soap_node(    (    sL   /data/av2000/b2b/venv/lib/python2.7/site-packages/zeep/wsdl/bindings/soap.pyt   match)   s    	c         O   s   |  j  | | | ƒ \ } } | S(   N(   t   _create(   R   t	   operationt   argst   kwargst   envelopet   http_headers(    (    sL   /data/av2000/b2b/venv/lib/python2.7/site-packages/zeep/wsdl/bindings/soap.pyt   create_message5   s    c         C   se  |  j  | ƒ } | s( t d | ƒ ‚ n  | j | | Ž  } |  j | | ƒ | j } | j }	 | r9| sw | j j } n  | j j	 j
 r­ t j ƒ  j | |	 | | ƒ \ } }	 n  t j | | |	 | | ƒ \ } }	 | j r9t | j t ƒ rxG | j D] }
 |
 j | |	 ƒ \ } }	 qó Wq6| j j | |	 ƒ \ } }	 q9n  | j j r[|	 j | j j ƒ n  | |	 f S(   s†   Create the XML document to send to the server.

        Note that this generates the soap envelope without the wsse applied.

        s   Operation %r not found(   t   gett
   ValueErrort   createt   _set_http_headerst   contentt   headerst   servicet   _binding_optionst   abstractt   input_messaget
   wsa_actionR   t   WsAddressingPlugint   egressR   t   apply_egresst   wsset
   isinstancet   listt   applyt   settingst   extra_http_headerst   update(   R   R&   R'   R(   t   clientt   optionst   operation_objt
   serializedR)   R*   R:   (    (    sL   /data/av2000/b2b/venv/lib/python2.7/site-packages/zeep/wsdl/bindings/soap.pyR%   9   s2    				c   
      C   su   |  j  | | | d | d | ƒ\ } } | j j | d | | ƒ } |  j | ƒ }	 | j j rb | S|  j | |	 | ƒ S(   s  Called from the service

        :param client: The client with which the operation was called
        :type client: zeep.client.Client
        :param options: The binding options
        :type options: dict
        :param operation: The operation object from which this is a reply
        :type operation: zeep.wsdl.definitions.Operation
        :param args: The args to pass to the operation
        :type args: tuple
        :param kwargs: The kwargs to pass to the operation
        :type kwargs: dict

        RA   RB   t   address(   R%   R   t   post_xmlR,   R>   t   raw_responset   process_reply(
   R   RA   RB   R&   R'   R(   R)   R*   t   responseRC   (    (    sL   /data/av2000/b2b/venv/lib/python2.7/site-packages/zeep/wsdl/bindings/soap.pyt   sendg   s    	c      	   C   s!  | j  d k r | j r d S| j  d k rU | j rU t d | j  d | j  ƒ‚ n  | j j d d ƒ } t | ƒ } d } | d k rç t | j | | j p  d	 ƒ } | j	 d
 j } t
 | j	 ƒ d k rð t d | j	 d ƒ } qð n	 | j } y t | |  j d | j ƒ}	 WnD t k
 rU}
 t d | j  |
 | j f d | j  d | j ƒ‚ n X| rwt |	 | ƒ rwd } qwn  | j r“| j j |	 ƒ n  t j | |	 | j | ƒ \ }	 } |	 j d d |  j ƒ} | j  d k sç| d k	 r÷|  j |	 | ƒ S| j |	 ƒ } | r| j | ƒ | S| S(   s˜  Process the XML reply from the server.

        :param client: The client with which the operation was called
        :type client: zeep.client.Client
        :param operation: The operation object from which this is a reply
        :type operation: zeep.wsdl.definitions.Operation
        :param response: The response object returned by the remote server
        :type response: requests.Response

        iÉ   iÊ   iÈ   u5   Server returned HTTP status %d (no content available)t   status_codes   Content-Types   text/xmls   multipart/relateds   utf-8i    i   t   partsR>   s?   Server returned response (%s) with invalid XML: %s.
Content: %rR0   s   soap-env:Body/soap-env:FaultR   (   iÉ   iÊ   N(   RK   R0   R    R   R1   R,   R
   R   t   encodingRL   t   lenR   R   R   R>   R   R   R:   t   verifyR   t   apply_ingressR   R   t   process_errorRH   t	   _set_root(   R   RA   R&   RI   t   content_typet
   media_typet   message_packt   decoderR0   t   doct   excR*   t
   fault_nodet   result(    (    sL   /data/av2000/b2b/venv/lib/python2.7/site-packages/zeep/wsdl/bindings/soap.pyRH   †   sR    
			c         C   s
   t  ‚ d  S(   N(   t   NotImplementedError(   R   RW   R&   (    (    sL   /data/av2000/b2b/venv/lib/python2.7/site-packages/zeep/wsdl/bindings/soap.pyRQ   Ë   s    c         C   s   | j  d d |  j ƒ} | d  k r5 t j d ƒ d  S| j d ƒ } | r„ | r„ t | ƒ } | | j d ƒ k r„ t j d ƒ q„ n  i | d 6S(   Ns   soap:addressR   s'   No valid soap:address found for servicet   locations&   Forcing soap:address location to HTTPSRE   (   R   R   R    t   loggert   debugR,   R   t   warning(   R   t
   xmlelementt   force_httpst   address_nodeR\   (    (    sL   /data/av2000/b2b/venv/lib/python2.7/site-packages/zeep/wsdl/bindings/soap.pyt   process_service_portÎ   s    c         C   sû   t  | d | j ƒ } t  | d | j ƒ } | j d d |  j ƒ} | j d ƒ } d d g } | | k r| t d | ƒ ‚ n  | j d	 d
 ƒ } |  | j | | | | ƒ }	 xK | j d d |  j ƒD]1 }
 t j	 | |
 |	 d |  j ƒ} |	 j
 | ƒ qÂ W|	 S(   sß  

        Definition::

            <wsdl:binding name="nmtoken" type="qname"> *
                <-- extensibility element (1) --> *
                <wsdl:operation name="nmtoken"> *
                   <-- extensibility element (2) --> *
                   <wsdl:input name="nmtoken"? > ?
                       <-- extensibility element (3) -->
                   </wsdl:input>
                   <wsdl:output name="nmtoken"? > ?
                       <-- extensibility element (4) --> *
                   </wsdl:output>
                   <wsdl:fault name="nmtoken"> *
                       <-- extensibility element (5) --> *
                   </wsdl:fault>
                </wsdl:operation>
            </wsdl:binding>
        R   t   types   soap:bindingR   R   s$   http://schemas.xmlsoap.org/soap/https-   http://www.w3.org/2003/05/soap/bindings/HTTP/s:   The binding transport %s is not supported (only soap/http)t   stylet   documents   wsdl:operationR   (   R   t   target_namespaceR   R   R,   R[   R   t   findallt   SoapOperationt   parset   _operation_add(   R!   t   definitionsR`   R   R   R#   R   t   supported_transportsR   t   objR"   R&   (    (    sL   /data/av2000/b2b/venv/lib/python2.7/site-packages/zeep/wsdl/bindings/soap.pyRj   ß   s     	N(   t   __name__t
   __module__t   __doc__R   t   classmethodR$   R+   R    R%   RJ   RH   RQ   t   FalseRc   Rj   (    (    (    sL   /data/av2000/b2b/venv/lib/python2.7/site-packages/zeep/wsdl/bindings/soap.pyR      s   		.		E	t   Soap11Bindingc           B   sH   e  Z i e j d  6e j d 6e j d 6e j d 6Z d „  Z d „  Z	 RS(   t   soaps   soap-envR   t   xsdc      
      s   | j  d d |  j ƒ‰  ˆ  d  k rN t d d d d  d d  d t | ƒ ƒ ‚ n  ‡  f d †  } t d | d	 ƒ d | d
 ƒ d | d ƒ d ˆ  j  d ƒ ƒ ‚ d  S(   Ns   soap-env:Body/soap-env:FaultR   t   messages   Unknown fault occuredt   codet   actort   detailc            s&   ˆ  j  |  ƒ } | d  k	 r" | j Sd  S(   N(   R   R    t   text(   R   t   child(   RY   (    sL   /data/av2000/b2b/venv/lib/python2.7/site-packages/zeep/wsdl/bindings/soap.pyt   get_text"  s    t   faultstringt	   faultcodet
   faultactor(   R   R   R    R   R   (   R   RW   R&   R}   (    (   RY   sL   /data/av2000/b2b/venv/lib/python2.7/site-packages/zeep/wsdl/bindings/soap.pyRQ     s    c         C   s   d | j  d <d  S(   Ns   text/xml; charset=utf-8s   Content-Type(   R1   (   R   RD   R&   (    (    sL   /data/av2000/b2b/venv/lib/python2.7/site-packages/zeep/wsdl/bindings/soap.pyR/   -  s    (
   Ro   Rp   R   t   SOAP_11t   SOAP_ENV_11t   WSDLt   XSDR   RQ   R/   (    (    (    sL   /data/av2000/b2b/venv/lib/python2.7/site-packages/zeep/wsdl/bindings/soap.pyRt     s   


	t   Soap12Bindingc           B   sH   e  Z i e j d  6e j d 6e j d 6e j d 6Z d „  Z d „  Z	 RS(   Ru   s   soap-envR   Rv   c            sV  | j  d d |  j ƒ‰  ˆ  d  k rN t d d d d  d d  d t | ƒ ƒ ‚ n  ‡  f d †  } ˆ  j d	 d |  j ƒ} ˆ  j d
 d |  j ƒ} g  } ˆ  j  d d |  j ƒ} xe | d  k	 r| j  d d |  j ƒ} t | j | j d  ƒ }	 | j |	 ƒ | j  d d |  j ƒ} q® Wˆ  j  d d |  j ƒ}
 t d | d | d d  d |
 d | ƒ ‚ d  S(   Ns   soap-env:Body/soap-env:FaultR   Rw   s   Unknown fault occuredRx   Ry   Rz   c            s&   ˆ  j  |  ƒ } | d  k	 r" | j Sd  S(   N(   R   R    R{   (   R   R|   (   RY   (    sL   /data/av2000/b2b/venv/lib/python2.7/site-packages/zeep/wsdl/bindings/soap.pyR}   D  s    s   soap-env:Reason/soap-env:Texts   soap-env:Code/soap-env:Values   soap-env:Code/soap-env:Subcodes   soap-env:Values   soap-env:Subcodes   soap-env:Detailt   subcodes(	   R   R   R    R   R   t   findtextR	   R{   t   append(   R   RW   R&   R}   Rw   Rx   R†   t   subcode_elementt   subcode_value_elementt   subcode_qnamet   detail_node(    (   RY   sL   /data/av2000/b2b/venv/lib/python2.7/site-packages/zeep/wsdl/bindings/soap.pyRQ   9  s2    c         C   s*   d j  d d d | j g ƒ | j d <d  S(   Ns   ; s   application/soap+xmls   charset=utf-8s   action="%s"s   Content-Type(   t   joint
   soapactionR1   (   R   RD   R&   (    (    sL   /data/av2000/b2b/venv/lib/python2.7/site-packages/zeep/wsdl/bindings/soap.pyR/   _  s    (
   Ro   Rp   R   t   SOAP_12t   SOAP_ENV_12Rƒ   R„   R   RQ   R/   (    (    (    sL   /data/av2000/b2b/venv/lib/python2.7/site-packages/zeep/wsdl/bindings/soap.pyR…   1  s   


	&Ri   c           B   s8   e  Z d  Z d „  Z d „  Z e d „  ƒ Z d „  Z RS(   s3   Represent's an operation within a specific binding.c         C   s8   t  t |  ƒ j | | ƒ | |  _ | |  _ | |  _ d  S(   N(   R   Ri   R   R   RŽ   Re   (   R   R   t   bindingR   RŽ   Re   (    (    sL   /data/av2000/b2b/venv/lib/python2.7/site-packages/zeep/wsdl/bindings/soap.pyR   j  s    		c         C   sh   t  j |  j d d ƒ } | j | k rK t d d | j | j f ƒ ‚ n  |  j rd |  j j | ƒ Sd  S(   Ns   soap-envt   Envelopes8   The XML returned by the server does not contain a valid s8   {%s}Envelope root element. The root element found is %s (   R    t   QNameR   t   tagR   t	   namespacet   outputt   deserialize(   R   R)   t   envelope_qname(    (    sL   /data/av2000/b2b/venv/lib/python2.7/site-packages/zeep/wsdl/bindings/soap.pyRH   p  s    	c         C   s1  | j  d ƒ } | j d d | j ƒ} d } | d k	 r` | j  d ƒ } | j  d | j ƒ } n	 | j } |  | | | | | ƒ }	 | d k r– t }
 n t }
 xŽ | D]† } t j | j	 ƒ j
 } | d k rÐ q£ n  |
 j d
 | d | d |	 d | d | ƒ } | d	 k r| |	 j | j <q£ t |	 | | ƒ q£ W|	 S(   s  

        Definition::

            <wsdl:operation name="nmtoken"> *
                <soap:operation soapAction="uri"? style="rpc|document"?>?
                <wsdl:input name="nmtoken"? > ?
                    <soap:body use="literal"/>
               </wsdl:input>
               <wsdl:output name="nmtoken"? > ?
                    <-- extensibility element (4) --> *
               </wsdl:output>
               <wsdl:fault name="nmtoken"> *
                    <-- extensibility element (5) --> *
               </wsdl:fault>
            </wsdl:operation>

        Example::

            <wsdl:operation name="GetLastTradePrice">
              <soap:operation soapAction="http://example.com/GetLastTradePrice"/>
              <wsdl:input>
                <soap:body use="literal"/>
              </wsdl:input>
              <wsdl:output>
              </wsdl:output>
              <wsdl:fault name="dataFault">
                <soap:fault name="dataFault" use="literal"/>
              </wsdl:fault>
            </operation>

        R   s   soap:operationR   t
   soapActionRe   t   rpct   inputR–   t   faultRl   R`   R&   R   Rd   N(   s   inputs   outputs   fault(   R,   R   R   R    R   R   R   R    R“   R”   t	   localnameRj   t   faultsR   t   setattr(   R!   Rl   R`   R‘   R   R   R#   t   actionRe   Rn   t   message_classR"   t   tag_namet   msg(    (    sL   /data/av2000/b2b/venv/lib/python2.7/site-packages/zeep/wsdl/bindings/soap.pyRj   {  s,    "			c         C   s³   t  t |  ƒ j | ƒ xL |  j j ƒ  D]; \ } } | |  j j k r& | j | |  j j | ƒ q& q& W|  j rŠ |  j j | |  j j ƒ n  |  j	 r¯ |  j	 j | |  j j
 ƒ n  d  S(   N(   R   Ri   t   resolveRž   t   itemsR4   t   fault_messagesR–   t   output_messageR›   R5   (   R   Rl   R   Rœ   (    (    sL   /data/av2000/b2b/venv/lib/python2.7/site-packages/zeep/wsdl/bindings/soap.pyR¤   ¾  s    !		(   Ro   Rp   Rq   R   RH   Rr   Rj   R¤   (    (    (    sL   /data/av2000/b2b/venv/lib/python2.7/site-packages/zeep/wsdl/bindings/soap.pyRi   g  s
   		C('   t   loggingt   lxmlR    t#   requests_toolbelt.multipart.decoderR   t   zeepR   R   R   t   zeep.exceptionsR   R   R   t   zeep.loaderR   t
   zeep.utilsR	   R
   R   t   zeep.wsdl.attachmentsR   t   zeep.wsdl.definitionsR   R   t   zeep.wsdl.messagesR   R   t   zeep.wsdl.messages.xopR   t   zeep.wsdl.utilsR   R   t	   getLoggerRo   R]   R   Rt   R…   Ri   (    (    (    sL   /data/av2000/b2b/venv/lib/python2.7/site-packages/zeep/wsdl/bindings/soap.pyt   <module>   s    ü"6