
    cFb                        d Z ddlmZ ddlZej        dk    reZ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 n# e$ r ddlmZmZ Y nw xY wddlmZmZmZmZ ddlmZmZmZmZ  ej        e          Z e
j        d	          Z G d
 de           Z! G d de"          Z# G d de          Z$ G d de"          Z%edk    r e#ddddddddd	  	        Z&d>dZ'd Z(d Z)e&*                    de'de+eej,        die+e+d ed!eigd"#           e&*                    d$e(d%eid&ei#           e&*                    d'e)           d(ej-        v rGe&.                                Z.e&/                                D ]\  Z0Z1e&2                    e0          \  Z3Z4Z1d)ej-        v r<e5                    d*            ed+e$          Z6e&e6_&        e67                                 d,ej-        v rGe5                    d-           dd.l8m9Z9  e%e&          Z: e9d/d0e:          Z;e;7                                 d1ej-        v rdd2l<m=Z=  e=ddd3d4dd5          Z<dd6d Z>d!d7id!d8igZ?e<@                    e>d9e?"          Z4e4jA        ZBe5                     e+eBjC                             e5                     eeBjD                             d:ej-        v rdd2l<m=Z=  e=d;          Z<dd6d Z>d!d7id!d8igZ?ej,        E                                ZFe<@                    e>eFe?"          Z4e4d         ZBe5                     e+eBd<                              e5                     eeBd=                              dS dS dS )?z*Pythonic simple SOAP Server implementation    )unicode_literalsN3)BaseHTTPRequestHandler
HTTPServer   )
__author____copyright____license____version__)SimpleXMLElementTYPE_MAPDateDecimalzxmlns:(\w+)="(.+?)"c                       e Zd ZddZdS )	SoapFaultNc                 L    |p| j         j        | _        |pd| _        || _        d S )N )	__class____name__	faultcodefaultstringdetail)selfr   r   r   s       5/usr/lib/python3/dist-packages/pysimplesoap/server.py__init__zSoapFault.__init__+   s+    "=dn&=&,"    NNN)r   
__module____qualname__r    r   r   r   r   *   s(             r   r   c            
       n    e Zd ZdZdddddddi ddf
dZed             Zdd	Zd
 ZddZ	d Z
ddZd ZdS )SoapDispatcherz!Simple Dispatcher for SOAP Serverr   NF)http://schemas.xmlsoap.org/soap/envelope/soapc                     i | _         || _        || _        || _        || _        || _        || _        || _        || _        |	| _	        |
| _
        || _        dS )a'  
        :param namespace: Target namespace; xmlns=targetNamespace
        :param prefix: Prefix for target namespace; xmlns:prefix=targetNamespace
        :param namespaces: Specify additional namespaces; example: {'external': 'http://external.mt.moboperator'}
        :param pretty: Prettifies generated xmls
        :param debug: Use to add tracebacks in generated xmls.

        Multiple namespaces
        ===================

        It is possible to support multiple namespaces.
        You need to specify additional namespaces by passing `namespace` parameter.

        >>> dispatcher = SoapDispatcher(
        ...    name = "MTClientWS",
        ...    location = "http://localhost:8008/ws/MTClientWS",
        ...    action = 'http://localhost:8008/ws/MTClientWS', # SOAPAction
        ...    namespace = "http://external.mt.moboperator", prefix="external",
        ...    documentation = 'moboperator MTClientWS',
        ...    namespaces = {
        ...        'external': 'http://external.mt.moboperator',
        ...        'model': 'http://model.common.mt.moboperator'
        ...    },
        ...    ns = True)

        Now the registered method must return node names with namespaces' prefixes.

        >>> def _multi_ns_func(self, serviceMsisdn):
        ...    ret = {
        ...        'external:activateSubscriptionsReturn': [
        ...            {'model:code': '0'},
        ...            {'model:description': 'desc'},
        ...        ]}
        ...    return ret

        Our prefixes will be changed to those used by the client.
        N)methodsnamedocumentationactionlocation	namespaceprefixsoap_nssoap_uri
namespacesprettydebug)r   r'   r(   r)   r*   r+   r,   r.   r-   r/   r0   r1   kwargss                r   r   zSoapDispatcher.__init__4   s^    Z 	* " $


r   c                      |rRdd                      fd|                                D                       }                     dd|z   dz               S )zExtends xml with extra namespaces.
        :param ns: dict with namespaceUrl:prefix pairs
        :param xml: XML node to modify
        zxmlns:%s="%s" c                 ,    g | ]\  }}|v	||fz  S r    r    ).0urir,   _tplxmls      r   
<listcomp>z4SoapDispatcher._extra_namespaces.<locals>.<listcomp>v   s2    eeefVYadVdVd} 4VdVdVdr   z/>)joinitemsreplace)r9   ns_ns_strr8   s   `  @r   _extra_namespacesz SoapDispatcher._extra_namespacesn   se      	:"Dhheeeee

eeeffG++dC'MD$899C
r   c                 D    ||||pt          |dd          f| j        |<   d S )N__doc__r   )getattrr&   )r   r'   fnreturnsargsdocs         r   register_functionz SoapDispatcher.register_functionz   s.    $0Qwr9b7Q7QQTr   c                     d|z  S )N
%sResponser    )r   methods     r   response_element_namez$SoapDispatcher.response_element_name}   s    f$$r   c                 n  !" | j         }d}|i }| j        | j        }}d}d}	t          d | j                                        D                       !	 t          || j                  }
|
dd         D ]\  }}|dv r?|
                                |         j	        }|
                                |         j
        }H|| j                                        v rC|
                                |         j	        }|
                                |         j
        }|!|<   t                              |          }|D ]%\  }}|| j                                        v r|!|<   &d}  |
d|                                          d	          }|r&|t          | j                  d
z   d         }	| j         }|r|	s(|                                }	|                                }t&                              d|	           | j        |	         \  }"}}t&                              d"           |r(|                                                    |          }n	|d|i}ni }d} |d(i |}t&                              d|           n# t.          $ r7}|                    |d|j        |j        |j        d           Y d}~nd}~wt8          $ r d	dl} |j                    \  }}}t&                              tA          j!                               | j        rEd"                    tA          j#        |||                    }|d|$                    d          z   z  }nd}|                    |d|j%        ||d           Y nw xY w|sd}nd}|| j        |||dz  }tL          '                    |!          }t          !fd| j                                        D                       }t          || j        ||          }d|d<   d|d<   |(                    d|z  d           }|r|)                    d!|z  |d            n`|(                    | *                    |	          | j                  }|s
| j        |d"<   "rtW          |t                    }|rctY          "fd#|-                                D                       } | s4t]          j/        d$ta          "          d%ta          |                     |r| s<|)                    tc          "-                                          d	         |           ni|                                D ]\  }}|)                    ||           n8"|2                    |           n "i k    rt&          3                    d&           |4                    | j5        '          S ))z.Receive and process SOAP call, returns the xmlNVersionMismatchc              3   $   K   | ]\  }}||fV  d S Nr    )r6   kvs      r   	<genexpr>z*SoapDispatcher.dispatch.<locals>.<genexpr>   s*      HH1aVHHHHHHr   )r+   )r#   z"http://www.w3.org/2003/05/soap-envz'http://www.w3.org/2003/05/soap-envelopeClientBody)r>   r   r   zdispatch method: %szreturns_types %srequestServerzdispathed method returns: %s.)r   r   r   r   z

XML REQUEST

zUTF-8z8<%(soap_ns)s:Envelope xmlns:%(soap_ns)s="%(soap_uri)s"/>zp<%(soap_ns)s:Envelope xmlns:%(soap_ns)s="%(soap_uri)s"
                       xmlns:%(prefix)s="%(namespace)s"/>)r+   r,   r-   r.   c              3   2   K   | ]\  }}||         fV  d S rP   r    )r6   rQ   rR   _ns_reverseds      r   rS   z*SoapDispatcher.dispatch.<locals>.<genexpr>   s0      QQALO,QQQQQQr   )r+   namespaces_mapr,   z)http://www.w3.org/2001/XMLSchema-instancez	xmlns:xsiz http://www.w3.org/2001/XMLSchemaz	xmlns:xsdz%s:BodyFz%s:Faultxmlnsc                     g | ]}|v S r    r    )r6   rQ   returns_typess     r   r:   z+SoapDispatcher.dispatch.<locals>.<listcomp>
  s    #K#K#K1A$6#K#K#Kr   z+Return value doesn't match type structure: z vs z%Given returns_types is an empty dict.r0   r    )6r,   r-   r.   dictr/   r<   r   r+   
attributes	localNamevaluevaluesNS_RXfindallchildrenlenr)   get_local_name
get_prefixlogr1   r&   
unmarshallr   updater   r   r   	Exceptionsysexc_infoerror	traceback
format_excr;   format_exceptiondecoder   r"   r@   	add_childmarshallrL   
isinstanceallkeyswarningswarnstrlistimport_nodewarningas_xmlr0   )#r   r9   r)   faultr,   retr-   r.   soap_fault_coder'   rW   rQ   rR   _ns_urir>   rK   function
args_typesrG   rF   erp   etypeevalueetbr   mappingresponsebodyrescomplex_typetypes_okr[   r_   s#                                    @@r   dispatchzSoapDispatcher.dispatch   s    =E L$-+ HH0E0E0G0GHHHIIH	(&sdnEEEG  
 - -1 E E E &002215?G&1133A6<HH $/002222!,,..q1;C"--//28D),L& s##B ( (1..0000&'LO&O =WWV111::<<Q??F %c$+..q034 - -,,..**,,II+T2227;|D7I4HmZII(-888  ((33J??#!6*&O(""T""CII4c:::: 	 	 	LL(7E }(           	( 	( 	(JJJ!-E63IIi*,,---z )"<UFC"P"PQQ03::g3F3FFFLL///5>>'R$*%' ' ( ( ( ( (	(  	=PCC=C 	 	
 
 	
 ..sLAA
 QQQQ9N9N9P9PQQQRR $C.2n3:+13 3 3
 !L B!!)g"5%!@@ 	EMM*w.%M@@@@ ..!;!;D!A!Adn.UUC .#~G  E)#t44 R"#K#K#K#K

#K#K#KLLH# R 36}3E3E3E3Es3xxx'Q R R R# +8 +LLm&8&8&:&:!;!;A!>FFFF !$		 + +1Q****+&$$$$"$$CDDDdk222s    H'I< <
M;-J88C M;:M;c                 H    d | j                                         D             S )z'Return a list of aregistered operationsc                 &    g | ]\  }\  }}}}||fS r    r    )r6   rK   r   rE   rF   rG   s         r   r:   z/SoapDispatcher.list_methods.<locals>.<listcomp>!  s*    aaa"H&*H8WdCaaar   )r&   r<   )r   s    r   list_methodszSoapDispatcher.list_methods  s$    aaDLL^L^L`L`aaaar   c                 N   | j         |         \  }}}}d|| j        dz  }t          || j        | j                  }|r|                                }n|dg}ng }|D ]'\  }	}
 ||                              |	|
dd           (d	|| j        dz  }t          || j        | j                  }|r|                                }n|dg}ng }|D ]*\  }	}
 |d
|z                                |	|
dd           +|                    d          |                    d          |fS )z-Generate sample request and response messagesz
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body><%(method)s xmlns="%(namespace)s"/></soap:Body>
</soap:Envelope>)rK   r+   )r+   r,   Nrd   NTF)add_commentsr>   z
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body><%(method)sResponse xmlns="%(namespace)s"/></soap:Body>
</soap:Envelope>rJ   r`   )r&   r+   r   r,   r<   rx   r   )r   rK   r   rE   rF   rG   r9   rW   r<   rQ   rR   r   s               r   helpzSoapDispatcher.help#  s   )-f)=&7D# "(dnEEF #3$.UUU 	JJLLEE\$%EEE 	H 	HDAqGFOO$$Q$GGGG "(dnEEF $C4>$+VVV 	MMOOEE\$%EEE 	X 	XDAqH\F*++44QQV4WWWW~~T~**HOO4O,H,H#MMr   c                    d| j         | j        | j        dz  }t          |          | j                                        D ]\  }\  }}}}d0fd	 d|z  |o|                                            d|z  |o|                                           dD ]G\  }}                    d          }	|||	d	<   |	                    d
          }
dd||d|
dd<   H                    d          }d| j        z  |d	<   | j                                        D ]v\  }\  }}}}|                    d          }||d	<   |r|                    d|           |                    d          }d|z  |d<   |                    d          }d|z  |d<   w                    d          }d| j        z  |d	<   d| j        z  |d<   |                    d          }d|d<   d|d <   | j                                        D ]}|                    d          }||d	<   |                    d!          }| j        |z   |d"<   d|d<   |                    d          }|                    d#          }d$|d%<   |                    d          }|                    d#          }d$|d%<                       d&          }d'| j        z  |d	<   |                    d| j        (           |                    d)          }d| j        z  |d	<   d*| j        z  |d+<   |                    d,          }| j	        |d-<   
                    d./          S )1z%Generate Web Service Description v1.1a  <?xml version="1.0"?>
<wsdl:definitions name="%(name)s"
          targetNamespace="%(namespace)s"
          xmlns:tns="%(namespace)s"
          xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
          xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
          xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">%(documentation)s</wsdl:documentation>

    <wsdl:types>
       <xsd:schema targetNamespace="%(namespace)s"
              elementFormDefault="qualified"
              xmlns:xsd="http://www.w3.org/2001/XMLSchema">
       </xsd:schema>
    </wsdl:types>

</wsdl:definitions>
)r+   r'   r(   Fc                    |s=  d          d                               d          }|                     d          }n)  d          d                               d          }|}| |d<   |r|}n|dg}ng }|s|r|                     d          }n|r|                     d          }|D ],\  }}|                     d          }	||	d<   |r
d	d
d|	d d <   |d}
nt          |t                    rJd| |}g }|D ])}|                    |                                           * ||dd           d|z  }
nt          |t
                    r,| |} ||                                d           d|z  }
nE|t          j                    v rdt          |         z  }
nt          dt          |          z            |	
                    d|
           .d S )Nz
wsdl:typesz
xsd:schemazxsd:elementzxsd:complexTyper'   r   zxsd:allzxsd:sequence0	unbounded)	minOccurs	maxOccurszxsd:anyTypeArrayOfT)arraycomplexztns:%s)r   zxsd:%szunknonw type %s for marshallingtype)rw   ry   r   extendr<   ra   r   r{   	TypeErrorr~   add_attribute)r'   re   r   r   elementr<   rz   rQ   rR   r   tnldparse_elementwsdls                 r   r   z*SoapDispatcher.wsdl.<locals>.parse_element]  s]    &0dd<00>>HHWWG%//0ABBGG0dd<00>>HHIZ[[G%G"& "EE^,-EEE < <!++I66CC <!++N;;C! / /DAqm44A !AfI L-0{KK!!!
 y)#At,, T T-1T115!" 0 0AHHQWWYY////%a$EEEE$qL#At,, T&*dAA.%aDAAAA$qLhmoo--$x{2'(ICPQFF(RSSSOOFA....5/ /r   z%srJ   ))Inputr   )OutputResponsezwsdl:messager'   z	wsdl:part
parametersztns:)r'   r   Nzwsdl:portTypez
%sPortTypezwsdl:operationzwsdl:documentationz
wsdl:inputztns:%sInputmessagezwsdl:outputztns:%sOutputzwsdl:bindingz	%sBindingztns:%sPortTyper   zsoap:bindingdocumentstylez$http://schemas.xmlsoap.org/soap/http	transportzsoap:operation
soapActionz	soap:bodyliteralusezwsdl:servicez	%sService)textz	wsdl:portztns:%sBindingbindingzsoap:addressr*   Tr`   )FF)r+   r'   r(   r   r&   r<   rw   r{   r)   r*   r   )r   r9   rK   r   rE   rF   rG   mr   r   partportTypeopinputoutputr   soapbindingsoapopsoapbodyserviceportsoapaddressr   r   s                         @@r   r   zSoapDispatcher.wsdlD  s   " NDIHZ[[#\$  $$6:l6H6H6J6J :	@ :	@2F2Xwc,/ ,/ ,/ ,/ ,/ ,/ ,/\ M$-)>$**,,???M,/1LW]]__MMM > @ @1..88,2FAA"6((55#/<4:FAA&>@ @QQQ	@ >>/22'$)36:l6H6H6J6J 	8 	82F2Xwc##$455BBvJ 813777LL..E,v5E)\\-00F . 7F9 ..00%	1*TY6''77)G#IK l'')) 	( 	(F""#344BBvJ\\"233F#';#7F< (F7OLL..E{33H'HUO\\-00F''44H'HUOO..00%	1.T5GHHH  --di'V)DI5Ynn^44"&-J{{${'''r   r   )NNrP   )r   r   r   rB   r   staticmethodr@   rH   rL   r   r   r   r   r    r   r   r"   r"   1   s        +++-b2E8 8 8 8t 	 	 \	R R R R% % %[3 [3 [3 [3~b b bN N N NB}( }( }( }( }(r   r"   c                       e Zd Zd Zd ZdS )SOAPHandlerc                    | j         dd                             d          }| j         dk    rL|d         | j        j        j                                        vr!|                     dd|d         z             dS | j         dk    r| j        j                                        }nM| j        j                            |d                   \  }}}t          |          dk    s|d         dk    r|}n|}| 
                    d	           |                     d
d           |                                  | j                            |           dS )z'User viewable help information and wsdlr   N?/r   i  Method not found: %srW      Content-typetext/xml)pathsplitserver
dispatcherr&   r{   
send_errorr   r   ri   send_responsesend_headerend_headerswfilewrite)r   rF   r   reqr   rG   s         r   do_GETzSOAPHandler.do_GET  s<   y}""3''9Qt{/E/M/R/R/T/T T TOOC!7$q'!ABBBBByC;16688 !% 6 ; ;DG D DS#t99>>T!W	%9%9"HH"Hs###^Z888JX&&&&&r   c                 `   | j                             t          | j                            d                              }t
          j        dk     r| j                            d          }n| j                            d          }|	                    |          }i }| j
        j                            ||          }|r|                     d           n|                     d           |                     dd           |                                  | j                            |           d	S )
zSOAP POST gatewayzcontent-lengthr   charset)r   i  r   r   r   N)rfilereadintheadersgetrp   versiongetparam	get_paramrv   r   r   r   r   r   r   r   r   )r   rW   encodingr   r   s        r   do_POSTzSOAPHandler.do_POST  s   *//#dl&6&67G&H&H"I"IJJ;|,,Y77HH|--i88H..**;)227%2HH 	$s####s###444
"""""r   N)r   r   r   r   r   r    r   r   r   r     s2        ' ' '*# # # # #r   r   c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )WSGISOAPHandlerc                     || _         d S rP   )r   )r   r   s     r   r   zWSGISOAPHandler.__init__  s    $r   c                 .    |                      ||          S rP   )handlerr   environstart_responses      r   __call__zWSGISOAPHandler.__call__  s    ||G^444r   c                     |d         dk    r|                      ||          S |d         dk    r|                     ||          S  |ddg           dgS )NREQUEST_METHODGETPOSTz405 Method not allowedContent-Typez
text/plainzMethod not allowed)do_getdo_postr   s      r   r   zWSGISOAPHandler.handler  sl    #$--;;w777%&&00<<888N36T5UVVV())r   c           
          |                     d                              d          }|                     d          }|dk    r3|| j        j                                        vr |ddg           d|z  gS |dk    r| j                                        }n<| j                            |          \  }}}t          |          dk    s|d	k    r|}n|} |d
ddt          t          |                    fg           |gS )N	PATH_INFOr   QUERY_STRINGr   z404 Not Foundr   r   r   rW   200 OKr   r   Content-Length)	r   lstripr   r&   r{   r   r   ri   r~   )	r   r   r   r   queryr   r   r   rG   s	            r   r   zWSGISOAPHandler.do_get  s   {{;''..s33N++2::$do&=&B&B&D&DDDN?-K,LMMM*T122RZZ++--HH !O0066MCc5zzQ%9"4"4x">AQSVWZ[cWdWdSeSe@f!ghhhzr   c           
          t          |d                   }|d                             |          }| j                            |          } |dddt	          t          |                    fg           |gS )NCONTENT_LENGTHz
wsgi.inputr   r   r  )r   r   r   r   r~   ri   )r   r   r   lengthrW   r   s         r   r   zWSGISOAPHandler.do_post  s{    W-.//,',,V44?++G44x">AQSVWZ[cWdWdSeSe@f!ghhhzr   N)r   r   r   r   r   r   r   r   r    r   r   r   r     s_        % % %5 5 5* * *  &    r   r   __main__PySimpleSoapSamplezhttp://localhost:8008/z%http://example.com/pysimplesoapsamle/ns0z'Example soap service using PySimpleSoapT)	r'   r*   r)   r+   r,   r(   tracer1   r>   c                     |t          j        d          z   }| d         | d         z   |d         d         |d         d         z   |dS )zAdd several valuesim  abr   r   r   abdddt)datetime	timedelta)pcr  s      r   adderr  (  sH    ($S)))fqvoQqT#Y1c-B"MMMr   c                     | S )zJust return inputr    )in0s    r   dummyr  -  s    
r   c                     | j         S )z*Copy request->response (generic, any type))rd   )rW   s    r   echor  1  s
    }r   Adder	AddResultr  )r  r  r   )r  r  r  )rE   rF   Dummyout0r  Echoz--localz--servezStarting server...)r   H  z--wsgi-servezStarting wsgi server...)make_serverr   r!  z	--consume)
SoapClientzhttp://example.com/sample.wsdlr$   )r*   r)   r+   r-   r
  r>      z1.20z2.01z
2010-07-24z--consume-wsdl)r   r  r  rP   )GrB   
__future__r   rp   r   r~   unicoder  loggingr|   rers   BaseHTTPServerr   r   ImportErrorhttp.serverr   r   r	   r
   r   	simplexmlr   r   r   r   	getLoggerr   rl   compilerf   ro   r   objectr"   r   r   r   r  r  r  rH   r   dateargvr   r   rK   rG   r   rW   r   infohttpdserve_foreverwsgiref.simple_serverr"  applicationwsgidclientr#  r  r  r  r  resultr  r  todayr  r    r   r   <module>r;     s   1 0 ( ' ' ' ' ' 



;G  



   				    ?AAAAAAAAA ? ? ?>>>>>>>>>>? B A A A A A A A A A A A @ @ @ @ @ @ @ @ @ @ @ @g!! 	
)**    	   P( P( P( P( P(V P( P( P(f*# *# *# *# *#( *# *# *#Z) ) ) ) )f ) ) )X z!)'9%?$  JN N N N
       Sx}MMN3''tC>:JKK !      S\ !      ...CH  %2244 	= 	=KFC%/__V%<%<"GXssCH%&&&
:{33%!!*+++555555%oj11Bk22ch&&&&&&-+6
 
 
 !6]S&M*<<!<::#VY   VY   38##&&&&&&)
 
 
 !6]S&M*]  ""<<!a<00+&VD\""###VD\""#####m V $#s   < AA