cFb dZddlmZddlZejdkreZddlZddlZddlZddl Z ddl Z ddl Z ddl m Z mZn#e$r ddlm Z mZYnwxYwddlmZmZmZmZddlmZmZmZmZejeZe jd ZGd d e Z!Gd d e"Z#Gdde Z$Gdde"Z%edkre#ddddddddd Z&d>dZ'dZ(dZ)e&*de'de+eej,die+e+d ed!eigd"#e&*d$e(d%eid&ei#e&*d'e)d(ej-vrGe&.Z.e&/D]\Z0Z1e&2e0\Z3Z4Z1d)ej-vrd!d7id!d8igZ?e<@e>d9e?"Z4e4jAZBe5e+eBjCe5eeBjDd:ej-vrdd2ld!d7id!d8igZ?ej,EZFe<@e>eFe?"Z4e4dZBe5e+eBd<e5eeBd=dSdSdS)?z*Pythonic simple SOAP Server implementation)unicode_literalsN3)BaseHTTPRequestHandler HTTPServer) __author__ __copyright__ __license__ __version__)SimpleXMLElementTYPE_MAPDateDecimalzxmlns:(\w+)="(.+?)"ceZdZddZdS) SoapFaultNcL|p |jj|_|pd|_||_dS)N) __class____name__ faultcode faultstringdetail)selfrrrs 5/usr/lib/python3/dist-packages/pysimplesoap/server.py__init__zSoapFault.__init__+s+"=dn&=&," NNN)r __module__ __qualname__rrrrr*s(rrc neZdZdZdddddddiddf dZedZdd Zd Zdd Z d Z dd Z dZ dS)SoapDispatcherz!Simple Dispatcher for SOAP ServerrNF)http://schemas.xmlsoap.org/soap/envelope/soapc  i|_||_||_||_||_||_||_||_||_| |_ | |_ | |_ dS)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) methodsname documentationactionlocation namespaceprefixsoap_nssoap_uri namespacesprettydebug) rr'r(r)r*r+r,r.r-r/r0r1kwargss rrzSoapDispatcher.__init__4s^Z  *   "    $  rc|rRddfd|D}dd|zdzS)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 ||fzSr r ).0urir,_tplxmls r z4SoapDispatcher._extra_namespaces..vs2eeefVYadVdVd} 4VdVdVdrz/>)joinitemsreplace)r9ns_ns_strr8s` @r_extra_namespacesz SoapDispatcher._extra_namespacesnse  :"Dhheeeee eeeffG++dC'MD$899C rcD||||pt|ddf|j|<dS)N__doc__r)getattrr&)rr'fnreturnsargsdocs rregister_functionz SoapDispatcher.register_functionzs.$0Qwr9b7Q7QQ Trc d|zS)N %sResponser )rmethods rresponse_element_namez$SoapDispatcher.response_element_name}s f$$rcn !"|j}d}|i}|j|j}}d}d} td|jD! t ||j} | ddD]\} } | dvr?| | j }| | j }H| |j vrC| | j } | | j }| !|<t |}|D]%\} } | |j vr| !| <&d}| d|d }|r&|t|jd zd } |j}|r| s(|} |}t&d | |j| \}"}}t&d "|r(||}n |d|i}ni}d}|d(i|}t&d|n#t.$r7}||d|j|j|jdYd}~nd}~wt8$rd dl}|j\}}}t&tAj!|jrEd"tAj#|||}|d|$dzz }nd}||d|j%||dYnwxYw|sd}nd}||j|||dz}tL'|!}t!fd|jD}t ||j||}d|d<d|d<|(d|zd }|r|)d!|z|d n`|(|*| |j}|s |j|d"<"rtW|t}|rctY"fd#|-D} | s4t]j/d$ta"d%ta||r| s<|)tc"-d |ni|D]\} } |)| | n8"|2|n "ikrt&3d&|4|j5'S))z.Receive and process SOAP call, returns the xmlNVersionMismatchc3$K|] \}}||fV dSNr )r6kvs r z*SoapDispatcher.dispatch..s*HH1aVHHHHHHr)r+)r#z"http://www.w3.org/2003/05/soap-envz'http://www.w3.org/2003/05/soap-envelopeClientBody)r>rrzdispatch method: %szreturns_types %srequestServerzdispathed method returns: %s.)rrrrz XML REQUEST zUTF-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.c32K|]\}}||fVdSrPr )r6rQrR _ns_reverseds rrSz*SoapDispatcher.dispatch..s0QQALO,QQQQQQr)r+namespaces_mapr,z)http://www.w3.org/2001/XMLSchema-instancez xmlns:xsiz http://www.w3.org/2001/XMLSchemaz xmlns:xsdz%s:BodyFz%s:Faultxmlnscg|]}|vSr r )r6rQ returns_typess rr:z+SoapDispatcher.dispatch.. s#K#K#K1A$6#K#K#Krz+Return value doesn't match type structure: z vs z%Given returns_types is an empty dict.r0r )6r,r-r.dictr/r<r r+ attributes localNamevaluevaluesNS_RXfindallchildrenlenr)get_local_name get_prefixlogr1r& unmarshallrupdaterrr Exceptionsysexc_infoerror traceback format_excr;format_exceptiondecoderr"r@ add_childmarshallrL isinstanceallkeyswarningswarnstrlist import_nodewarningas_xmlr0)#rr9r)faultr,retr-r.soap_fault_coder'rWrQrR_ns_urir>rKfunction args_typesrGrFerpetypeevalueetbrmappingresponsebodyres complex_typetypes_okr[r_s# @@rdispatchzSoapDispatcher.dispatchs =E L$-+HH0E0E0G0GHHHII H (&sdnEEEG  - -1EEE&002215?G&1133A6>'R$*%'' ( ( ( ( ( ( =PCC=C     ..sLAA QQQQ9N9N9P9PQQQRR$C.2n3:+1333 !L B!!)g"5%!@@  E MM*w.%M @ @ @ @..!;!;D!A!Adn.UUC .#~G  E)#t44 R"#K#K#K#K #K#K#KLLH#R 36}3E3E3E3Es3xxx'QRRR#+8+LLm&8&8&:&:!;!;A!>FFFF!$ ++1 Q****+&$$$$"$$ CDDDdk222s H'I<< M;-J88CM;:M;cHd|jDS)z'Return a list of aregistered operationsc&g|]\}\}}}}||fSr r )r6rKrrErFrGs rr:z/SoapDispatcher.list_methods..!s*aaa"H&*H8WdC aaar)r&r<)rs r list_methodszSoapDispatcher.list_methodss$aaDLL^L^L`L`aaaarcN|j|\}}}}d||jdz}t||j|j}|r|}n|dg}ng}|D]'\} } ||| | dd(d ||jdz}t||j|j} |r|}n|dg}ng}|D]*\} } | d |z| | dd+|d | d |fS) z-Generate sample request and response messagesz <%(method)s xmlns="%(namespace)s"/> )rKr+)r+r,NrdNTF) add_commentsr>z <%(method)sResponse xmlns="%(namespace)s"/> rJr`)r&r+r r,r<rxr) rrKrrErFrGr9rWr<rQrRrs rhelpzSoapDispatcher.help#s)-f)=&7D#"(dnEEF#3$.UUU  JJLLEE \$%EEE H HDAq GFOO $ $Q $ G G G G"(dnEEF$C4>$+VVV  MMOOEE \$%EEE X XDAq H\F* + + 4 4QQV 4 W W W W~~T~**HOO4O,H,H#MMrcd|j|j|jdz}t||jD]\}\}}}}d0fd d|z|o|d|z|o|dD]G\}}d} ||| d <| d } d d ||d | dd<Hd} d|jz| d <|jD]v\}\}}}}| d} || d <|r| d|| d} d|z| d<| d}d|z|d<wd}d|jz|d <d|jz|d<|d}d|d<d|d <|jD]}|d} || d <| d!}|j|z|d"<d|d<| d} | d#}d$|d%<| d}|d#}d$|d%<d&}d'|jz|d <|d|j(|d)}d|jz|d <d*|jz|d+<|d,}|j |d-< d./S)1z%Generate Web Service Description v1.1a %(documentation)s )r+r'r(Fc|s=ddd}|d}n)ddd}|}||d<|r|}n|dg}ng}|s|r|d}n|r|d}|D],\}}|d} || d<|r d d d | dd<|d } nt|trJd ||} g} |D])} | | *| | ddd| z} nt|t r,||} | |dd| z} nE|t jvrdt |z} ntdt|z| d| .dS)Nz wsdl:typesz xsd:schemaz xsd:elementzxsd:complexTyper'rzxsd:allz xsd:sequence0 unbounded) minOccurs maxOccursz xsd:anyTypeArrayOfT)arraycomplexztns:%s)rzxsd:%szunknonw type %s for marshallingtype) rwryrextendr<rar r{ TypeErrorr~ add_attribute)r'rerrelementr<rzrQrRrtnld parse_elementwsdls rrz*SoapDispatcher.wsdl..parse_element]s]&0dd<00>>HHWWG%//0ABBGG0dd<00>>HHIZ[[G%G"&"EE^,-EEE<<!++I66CC<!++N;;C!//DAq m44A !AfIL-0{KK!!! y)#At,,TT-1T115!"00AHHQWWYY////% a$EEEE$qL#At,,T&*dAA.% aDAAAA$qLhmoo--$x{2'(ICPQFF(RSSSOOFA....5//rz%srJ))Inputr)OutputResponsez wsdl:messager'z wsdl:part parametersztns:)r'rNz wsdl:portTypez %sPortTypezwsdl:operationzwsdl:documentationz wsdl:inputz tns:%sInputmessagez wsdl:outputz tns:%sOutputz wsdl:bindingz %sBindingztns:%sPortTyperz soap:bindingdocumentstylez$http://schemas.xmlsoap.org/soap/http transportzsoap:operation soapActionz soap:bodyliteralusez wsdl:servicez %sService)textz wsdl:portz tns:%sBindingbindingz soap:addressr*Tr`)FF) r+r'r(r r&r<rwr{r)r*r)rr9rKrrErFrGmrrpartportTypeopinputoutputr soapbindingsoapopsoapbodyserviceport soapaddressrrs @@rrzSoapDispatcher.wsdlDs"NDIHZ[[#\$ $$6:l6H6H6J6J: @: @ 2F2Xwc, /, /, /, /, /, /, /\ M$-)>$**,, ? ? ? M,/1LW]]__ M M M> @ @1..88,2FAA"6((55#/<4:FAA&>@@QQQ  @>>/22'$)36:l6H6H6J6J 8 8 2F2Xwc##$455BBvJ 8 13777LL..E,v5E) \\-00F . 7F9  ..00% 1*TY6''77 ) G#I K l'')) ( (F""#344BBvJ\\"233F#';#7F< (F7OLL..E{33H'HUO\\-00F'' 44H'HUOO..00% 1.T5GHHH  --di'V )DI5Ynn^44 "&- J{{${'''rr)NNrP) rrrrBr staticmethodr@rHrLrrrrr rrr"r"1s+++-b2E 8888t  \ RRRR%%%[3[3[3[3~bbbNNNNB}(}(}(}(}(rr"ceZdZdZdZdS) SOAPHandlerc|jddd}|jdkrL|d|jjjvr!|dd|dzdS|jdkr|jj}nM|jj|d\}}}t|dks |ddkr|}n|}| d | d d | |j |dS) z'User viewable help information and wsdlrN?/riMethod not found: %srW Content-typetext/xml)pathsplitserver dispatcherr&r{ send_errorrrri send_response send_header end_headerswfilewrite)rrFrreqrrGs rdo_GETzSOAPHandler.do_GETs<y}""3'' 9  Qt{/E/M/R/R/T/T T T OOC!7$q'!A B B B B ByC;16688!% 6 ; ;DG D D S#t99>>T!W %9%9"HH"H   s # # #   ^Z 8 8 8       J  X & & & & &rc`|jt|jd}t jdkr|jd}n|jd}| |}i}|j j ||}|r| dn| d|dd||j|d S) zSOAP POST gatewayzcontent-lengthrcharset)rirrrN)rfilereadintheadersgetrpversiongetparam get_paramrvrrrrrrrr)rrWencodingrrs rdo_POSTzSOAPHandler.do_POSTs*//#dl&6&67G&H&H"I"IJJ ;  |,,Y77HH|--i88H..**;)227%2HH  $   s # # # #   s # # # 444  """""rN)rrrrrr rrrrs2'''*#####rrc,eZdZdZdZdZdZdZdS)WSGISOAPHandlerc||_dSrP)r)rrs rrzWSGISOAPHandler.__init__s $rc.|||SrP)handlerrenvironstart_responses r__call__zWSGISOAPHandler.__call__s||G^444rc|ddkr|||S|ddkr|||S|ddgdgS)NREQUEST_METHODGETPOSTz405 Method not allowed Content-Typez text/plainzMethod not allowed)do_getdo_postrs rrzWSGISOAPHandler.handlersl # $ - -;;w77 7 % && 0 0<<88 8 N36T5U V V V() )rc |dd}|d}|dkr3||jjvr|ddgd|zgS|dkr|j}n<|j|\}}}t|dks|d kr|}n|}|d d d tt|fg|gS) N PATH_INFOr QUERY_STRINGrz 404 Not FoundrrrrW200 OKrrContent-Length) rlstriprr&r{rrrir~) rrrrqueryrrrrGs rrzWSGISOAPHandler.do_gets{{;''..s33 N++ 2::$do&=&B&B&D&DDD N?-K,L M M M*T12 2 RZZ++--HH!O0066MCc5zzQ%9"4"4x">AQSVWZ[cWdWdSeSe@f!ghhhzrc t|d}|d|}|j|}|dddt t |fg|gS)NCONTENT_LENGTHz wsgi.inputrrr)rrrrr~ri)rrrlengthrWrs rrzWSGISOAPHandler.do_posts{W-.//,',,V44?++G44x">AQSVWZ[cWdWdSeSe@f!ghhhzrN)rrrrrrrrr rrrrs_%%%555***&rr__main__PySimpleSoapSamplezhttp://localhost:8008/z%http://example.com/pysimplesoapsamle/ns0z'Example soap service using PySimpleSoapT) r'r*r)r+r,r(tracer1r>c|tjdz}|d|dz|dd|ddz|dS)zAdd several valuesimabrrrabdddt)datetime timedelta)pcrs radderr(sH ($S)) )fqvoQqT#Y1c-B"MMMrc|S)zJust return inputr )in0s rdummyr-s rc|jS)z*Copy request->response (generic, any type))rd)rWs rechor1s }rAdder AddResultr)r r r)rrr)rErFDummyout0rEchoz--localz--servezStarting server...)rHz --wsgi-servezStarting wsgi server...) make_serverrr!z --consume) SoapClientzhttp://example.com/sample.wsdlr$)r*r)r+r-r r>z1.20z2.01z 2010-07-24z--consume-wsdl)rrrrP)GrB __future__rrprr~unicoderloggingr|rersBaseHTTPServerrr ImportError http.serverrrr r r simplexmlr r rr getLoggerrrlcompilerfrorobjectr"rrrrrrrHrdateargvrrrKrGrrWrinfohttpd serve_foreverwsgiref.simple_serverr" applicationwsgidclientr#rrrrresultrrtodayrr rrr;s10(''''' ;G  ?AAAAAAAAA???>>>>>>>>>>?BAAAAAAAAAAA@@@@@@@@@@@@g!!  )** P(P(P(P(P(VP(P(P(f *#*#*#*#*#(*#*#*#Z)))))f)))X z !)'9%?$ JNNNN   Sx}MMN3''tC>:J K K!    S\!   ...CH  %2244 = =KFC%/__V%<%< "GXssCH %&&& :{33% !! *+++555555%oj11  Bk22 ch&&&&&&-+6    !  6]S&M *<