B
    EDb'd  ã               @   s  d dl mZmZmZmZmZ d dlmZ d dlm	Z	m
Z
mZmZ d dlmZmZ d dlmZ d dlmZ d dlZd dlZd dlZe e	dƒej¡ZG d	d
„ d
eƒZdd„ ZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZ G dd„ deƒZ!eG dd„ deƒƒZ"dS )é    )ÚBaseInterfaceÚServiceDescriptorÚBaseRequestHandlerÚBaseResponseHandlerÚBaseFaultHandler)Úexpose)ÚPORTABLE_STRINGÚtype_to_xsdÚpytype_supportÚBytesIO)ÚContentHandlerÚfeature_namespaces)Úmake_parser)ÚInputSourceNz^\w*[:]{0,1}nil$c               @   s   e Zd ZeZdZdd„ ZdS )ÚSOAP11ServiceDescriptorztext/xmlc       .   	   C   s	  |j }|j}dd„ }	ddlm  m}
 |
 ¡ }| d¡}| dd¡ | dd	¡ | d
d¡ | dd¡ | d|¡ | dd| ¡ | dd| ¡ | dd¡ | dd¡ | dd¡ | d| d| ¡ | |¡ | d¡}| |¡ | d¡}| dd| ¡ | d| d| ¡ | |¡ | d¡}| dd¡ | |¡ x|D ]}t	|t
ƒr|d }| d¡}| dd|j ¡ | |¡ | d¡}| d ¡}| dd!¡ ||krÌ| d"d#||jf ¡ n| d"d$|	|ƒ ¡ | d%d&¡ | d'd(¡ | d)d*¡ | |¡ | |¡ qJ| d¡}| d|d ¡ | |¡ | d¡}| |¡ xú|d+ D ]î\}}}| d ¡}| d| d,d-¡¡ | d'd.¡ | d%d.¡ | d/¡d0krÆ| d%d&¡ | d)d*¡ t	|t
ƒr
|d }| d"d1||jf ¡ | d%d&¡ | d)d*¡ n6||kr,| d"d#||jf ¡ n| d"d$|	|ƒ ¡ | |¡ q^W qJW xÞ|D ]Ô}| d2¡}| d| ¡ ¡ | |¡ x´| ¡ D ]¨}| d3¡}| d|d  d,d-¡¡ t	|d" t
tfƒrì| d"d1||d" d jf ¡ nB|d" |kr| d"d#||d" jf ¡ n| d"d$|	|d" ƒ ¡ | |¡ q’W | d2¡}| dd4| ¡  ¡ | |¡ t	|jt
tfƒr¶| d3¡}| dd5¡ | d"d1||jd jf ¡ | |¡ n||j|krü| d3¡}| dd5¡ | d"d#||jjf ¡ | |¡ n6| d3¡}| dd5¡ | d"d$|	|jƒ ¡ | |¡ q^W | d6¡}| dd7| ¡ | |¡ x°|D ]¨}| d8¡}| d| ¡ ¡ | |¡ |jr¸| d9¡}| | |j¡¡ | |¡ | d:¡}| d;d<| ¡  ¡ | |¡ | d=¡} |  d;d>| ¡  ¡ | | ¡ qbW | d?¡}!|! d|¡ |! d"d@| ¡ | dA¡}"|" dBdC¡ |" dDdE¡ |! |"¡ | |!¡ xê|D ]à}| d8¡}| d| ¡ ¡ |! |¡ | dF¡}#|# dBdC¡ |# dGdH|| ¡ f ¡ | |#¡ |j | d:¡}|}$|jrP| dI¡}%| dJ¡}&|&}$| dJ¡}'| dK¡}(|( d"dL¡ | |%¡ |% |&¡ |% |'¡ |' |(¡ | dM¡})|) dNdO¡ |) dd| ¡ |) dPd¡ |$ |)¡ | |¡ | d=¡} | }$|jr| dI¡}%| dJ¡}&|&}$| dJ¡}'| dQ¡}(|( d"dL¡ |  |%¡ |% |&¡ |% |'¡ |' |(¡ | dM¡}*|* dNdO¡ |* dd| ¡ |* dPd¡ |$ |*¡ | | ¡ qrW | dR¡}+|+ d|¡ | d9¡}| | dS¡¡ |+ |¡ | dT¡},|, d|¡ |, dUd<| ¡ |+ |,¡ | dV¡}-|- dW|¡ |, |-¡ | |+¡ tjd dXk	r| ¡ S | |¡S )Yz,
		Generate WSDL file for SOAP11Interface
		c             S   s   | t jkrt j|  S | jS d S )N)r   Úxsd_type_mapÚ__name__)Útyp© r   ú7G:\easytimepro\master/mysite/ladon\interfaces\soap11.pyÚmap_type   s    

z2SOAP11ServiceDescriptor.generate.<locals>.map_typer   Nzwsdl:definitionsz
xmlns:mimez%http://schemas.xmlsoap.org/wsdl/mime/z
xmlns:soapz%http://schemas.xmlsoap.org/wsdl/soap/z
xmlns:httpz%http://schemas.xmlsoap.org/wsdl/http/z
xmlns:wsdlz http://schemas.xmlsoap.org/wsdl/ÚnameZtargetNamespacezurn:%sz	xmlns:tnszxmlns:soapencz)http://schemas.xmlsoap.org/soap/encoding/z	xmlns:xsiz)http://www.w3.org/2001/XMLSchema-instancez	xmlns:xsdz http://www.w3.org/2001/XMLSchemaz
xmlns:ns%dz
wsdl:typesz
xsd:schemaz
xsd:importÚ	namespacezxsd:complexTypez	ArrayOf%szxsd:sequencezxsd:elementÚitemÚtypezns%d:%szxsd:%sZ	minOccursÚ0Z	maxOccursZ	unboundedZnillableÚtrueZ
attributesÚ_ú-Ú1ZnullableTzns%d:ArrayOf%szwsdl:messagez	wsdl:partz
%sResponseÚresultzwsdl:portTypez
%sPortTypezwsdl:operationzwsdl:documentationz
wsdl:inputÚmessageztns:%szwsdl:outputztns:%sResponsezwsdl:bindingztns:%sPortTypezsoap:bindingZstyleZrpcÚ	transportz$http://schemas.xmlsoap.org/soap/httpzsoap:operationZ
soapActionz%s/%szmime:multipartRelatedz	mime:partzmime:contentz*/*z	soap:bodyZuseZencodedZencodingStylezcontent:partzwsdl:servicez"Ladon generated service definitionz	wsdl:portÚbindingzsoap:addressÚlocationé   )Ú	type_dictÚ
type_orderÚxml.dom.minidomÚdomÚminidomÚDocumentÚcreateElementÚsetAttributeÚappendChildÚ
isinstanceÚlistr   ÚreplaceÚgetr   ÚargsÚtupleZ_rtypeÚ__doc__ÚcreateTextNodeZ_multipart_response_requiredZ_multipart_request_requiredÚsysÚversion_infoÚtoxml).ÚselfÚservicenameZservicenumberZtypemanagerZ
methodlistZservice_urlÚencodingr&   r'   r   ÚmdÚdocZdefinitionsÚtypesZschemaZ
import_tagr   ÚinnerZcomplextypeZsequenceÚelementÚkÚvÚpropsÚmr!   ÚargÚpartZporttypeZ	operationZdocumentationZ	input_tagZ
output_tagr#   r"   Z
soapactionZbody_parentZmultipart_relatedZmime_body_partZmime_content_partZmime_contentZinput_soapbodyZoutput_soapbodyZserviceZportZaddressr   r   r   Úgenerate   sp   






















 






















































z SOAP11ServiceDescriptor.generateN)r   Ú
__module__Ú__qualname__r	   r   Ú_content_typerH   r   r   r   r   r      s   r   c             C   s$   t jd dkrt| dƒS t| ƒS d S )Nr   é   zutf-8)r7   r8   r   )Zinstringr   r   r   ÚuS  s    
rM   c               @   s   e Zd Zdd„ Zdd„ ZdS )ÚContainerSetRefc             C   s   || _ || _d S )N)ÚcÚrefval)r:   rO   rP   r   r   r   Ú__init__Z  s    zContainerSetRef.__init__c             C   s   || j | j< d S )N)rO   rP   )r:   Úvalr   r   r   Úset^  s    zContainerSetRef.setN)r   rI   rJ   rQ   rS   r   r   r   r   rN   Y  s   rN   c               @   sd   e Zd ZdZdZdZdZdZdZdd„ Z	d	d
„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚSOAP11ContentHandleré   rL   r%   é   é   é   c             C   sb   || _ d| _d| _d| _di i| _| jd | _g | _g | _d| _d| _	i | _
i | _d| _d| _dS )z
		Initialize
		r   éÿÿÿÿNr3   F)ÚparserÚdepthÚmethod_depthÚstateÚreq_dictÚcurrent_arg_objectÚarg_object_stackÚarg_tagname_stackÚ
prev_depthÚin_cdataÚmulti_ref_hrefsÚmulti_ref_idsÚcur_id_depthÚ
cur_id_val)r:   rZ   r   r   r   rQ   j  s    
zSOAP11ContentHandler.__init__c             C   s
   d| _ dS )z+
		Mark that parser is in CDATA Section.
		TN)rc   )r:   r   r   r   ÚstartCdataSection}  s    z&SOAP11ContentHandler.startCdataSectionc             C   s
   d| _ dS )z6
		Mark that parser stepped out of a CDATA Section.
		FN)rc   )r:   r   r   r   ÚendCdataSectionƒ  s    z$SOAP11ContentHandler.endCdataSectionc             C   s   | j | jj_| j| jj_dS )z†
		Setup XMLParser callbacks, callbacks are setup here as the XMLParser
		is not initialized by XMLReader before it starts parsing.
		N)rh   rZ   Z_parserZStartCdataSectionHandlerri   ZEndCdataSectionHandler)r:   r   r   r   ÚstartDocument‰  s    z"SOAP11ContentHandler.startDocumentc             C   s6   x0| j  ¡ D ]"\}}|| jkr| | j| ¡ qW d S )N)rd   Úitemsre   rS   )r:   Úid_valrC   r   r   r   ÚendDocument‘  s    
z SOAP11ContentHandler.endDocumentc             C   s|  d}d\}}xz|  ¡ D ]n\}}t |¡r:| ¡ dkr:d}q| ¡ dkrT|dd… }q| ¡ dkr|| _| j| _i | j|< | j| | _qW | 	d	d
¡}| 
d¡}t|ƒdkr´|\}	}
ndg| \}	}
| jsÞ|
 ¡ dkrÞ| j| _n’| j| jkr|
 ¡ dkr| j| _nl| j| j| jgkr0|
 ¡ dkr0| j| _n@| j| jkrZ| j| _|
| jd< | j| _n| j| jkrp| j| _| j| jks†| jrjtdƒ| _|rœd}ni }|
 ¡ dkr | jdd… d }| jdd… d }t|| tƒrî|g||< n||  |g7  < |r\t|t|ƒd ƒ| j|< n<|| j|
< | j | j¡ | j |
¡ |r\t| j|
ƒ| j|< || _| j| _|  jd7  _dS )z
		Handle element entrance.
		F)NNr   TZhrefrU   NÚidr   r   ú:Ú ÚenvelopeÚheaderZbodyÚ
methodnamer   rY   r   )rk   Úrx_nil_attrÚmatchÚlowerrg   r[   rf   re   r_   r1   ÚsplitÚlenÚENVELOPE_INr]   Ú	HEADER_INÚBODY_INÚ	METHOD_INr^   r\   ÚARGS_INrM   Úpickup_contentra   r`   r/   ÚdictrN   rd   Úappendrb   )r:   r   ZattrsZis_nullZhref_valrl   ZakÚavrE   ÚprefixÚtagnameZ	newobjectÚparent_tagnameÚparent_objectr   r   r   ÚstartElement–  sd    




"




z!SOAP11ContentHandler.startElementc             C   sž  |  dd¡}|  jd8  _| d¡}t|ƒdkr:|\}}ndg| \}}| j| jkr\| j| _| j| jkrÀt| j| j	  
¡ d d ƒr¦| j| j	  
¡ d d | j| j	< n| j| j| j	< d | _	d | _| j| jksÔ| j	rš| ¡ dksD| j| jkr,| jdd … d }| jdd … d }|| d ks,| j||< | j ¡ | _| j ¡  nV| jdd … d }| jdd … d }t|| dd … d ƒdkrš| jg|| dd …< d S )	Nr   r   rU   ro   rp   r   r   rY   )r1   r[   rw   rx   r\   ÚARGS_OUTr]   rf   re   rg   rk   r~   r}   rv   rb   ra   r`   Úpopr_   )r:   r   rE   r‚   rƒ   r„   r…   r   r   r   Ú
endElementâ  s6    

"
zSOAP11ContentHandler.endElementc             C   s>   | j | jks| jr:| jr(|  j|7  _n|  j| ¡ 7  _d S )N)r]   r}   rg   rc   r~   Ústrip)r:   Zcontentr   r   r   Ú
characters  s    zSOAP11ContentHandler.charactersN)r   rI   rJ   ry   rz   r{   r|   r}   r‡   rQ   rh   ri   rj   rm   r†   r‰   r‹   r   r   r   r   rT   a  s   L,rT   c               @   s   e Zd Zdd„ ZdS )ÚSOAP11RequestHandlerc             C   s<   t ƒ }t|ƒ}| |¡ tƒ }| t|ƒ¡ | |¡ |jS )N)r   rT   ZsetContentHandlerr   ZsetByteStreamr   Úparser^   )r:   Z	soap_bodyÚsinfor<   rZ   ÚchZinpsrcr   r   r   Úparse_request  s    

z"SOAP11RequestHandler.parse_requestN)r   rI   rJ   r   r   r   r   r   rŒ     s   rŒ   c               @   s*   e Zd ZdZdZed	dd„ƒZdd„ ZdS )
ÚSOAP11ResponseHandlerztext/xmlTFc             C   sî   t | tƒrPxÞ|  ¡ D ]6\}}| dd¡}| |¡}| |¡ t |||¡ qW nš|rj| d¡}| |¡ n|}t | tt	fƒrÄt
| ƒs’| dd¡ qêxV| D ]&}	| d¡}
t |	|
|¡ | |
¡ q˜W n&| d krÚ| dd¡ n| | | ¡¡ d S )Nr   r   r    zxsi:nilr   r   )r/   r   rk   r1   r,   r.   r‘   Úvalue_to_soapxmlr0   r4   rx   r-   r6   )ÚvalueÚparentr>   Úis_toplevelZ	attr_nameZattr_valZxml_attr_nameZ	attr_elemZvalue_parentr   Zitem_elementr   r   r   r’   +  s(    





z&SOAP11ResponseHandler.value_to_soapxmlc       	      C   sì   dd l m  m} | ¡ }| d¡}| dd¡ | dd¡ | dd¡ | d	d
|d  ¡ | |¡ | d¡}| dd¡ | |¡ | d|d  ¡}d|d kr¼tj|d ||dd ntjd|d i||dd | |¡ |j	|dS )Nr   zSOAP-ENV:Envelopezxmlns:SOAP-ENVz)http://schemas.xmlsoap.org/soap/envelope/zxmlns:SOAP-ENCz)http://schemas.xmlsoap.org/soap/encoding/z	xmlns:xsdz http://www.w3.org/2001/XMLSchemazxmlns:nszurn:%sr;   zSOAP-ENV:BodyzSOAP-ENV:encodingStylezns:%sResponseÚmethodr    T)r•   )r<   )
r(   r)   r*   r+   r,   r-   r.   r‘   r’   r9   )	r:   Zres_dictrŽ   r<   r=   r>   rq   Z	body_elemZmethod_elemr   r   r   Úbuild_responseK  s"    




z$SOAP11ResponseHandler.build_responseN)F)r   rI   rJ   rK   Ú_stringify_res_dictÚstaticmethodr’   r—   r   r   r   r   r‘   &  s
   r‘   c               @   s    e Zd ZdZdZdZdd„ ZdS )ÚSOAP11FaultHandlerztext/xmlTa²  <?xml version='1.0' encoding='UTF-8'?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/1999/XMLSchema">
	<SOAP-ENV:Body>
		<SOAP-ENV:Fault>
			<faultcode xsi:type="xsd:string"></faultcode>
			<faultstring xsi:type="xsd:string"></faultstring>
			<detail></detail>
		</SOAP-ENV:Fault>
	</SOAP-ENV:Body>
</SOAP-ENV:Envelope>c             C   sž   dd l m  m} |jr |j}nt ¡ }| | j¡}| d¡d }	| d¡d }
| d¡d }|	 	| 
|j¡¡ |
 	| 
|j¡¡ | 	| 
|¡¡ |j|dS )Nr   Ú	faultcodeÚfaultstringÚdetail)r<   )r(   r)   r*   r   Ú	tracebackÚ
format_excZparseStringÚsoapfault_templateZgetElementsByTagNamer.   r6   r›   rœ   r9   )r:   Zservice_excrŽ   rs   r<   Z
reflectionr=   r   ÚdZfaultcode_elemZfaultstring_elemZdetail_elemr   r   r   Úbuild_fault_responseq  s    z'SOAP11FaultHandler.build_fault_responseN)r   rI   rJ   rK   r˜   r    r¢   r   r   r   r   rš   _  s   rš   c               @   sD   e Zd Zdd„ Zedd„ ƒZedd„ ƒZedd„ ƒZed	d
„ ƒZdS )ÚSOAP11Interfacec             K   s,   t tttdœ}| |¡ tj| |f|Ž d S )N)Zservice_descriptorZrequest_handlerZresponse_handlerZfault_handler)r   rŒ   r‘   rš   Úupdater   rQ   )r:   rŽ   ÚkwZdef_kwr   r   r   rQ   †  s    
zSOAP11Interface.__init__c               C   s   dS )NZsoap11r   r   r   r   r   Ú_interface_name  s    zSOAP11Interface._interface_namec             C   s   t  | ¡dkS )Nr   )r
   Úcount)r   r   r   r   Ú_accept_basetype“  s    z SOAP11Interface._accept_basetypec               C   s   dS )NTr   r   r   r   r   Ú_accept_list—  s    zSOAP11Interface._accept_listc               C   s   dS )NFr   r   r   r   r   Ú_accept_dict›  s    zSOAP11Interface._accept_dictN)	r   rI   rJ   rQ   r™   r¦   r¨   r©   rª   r   r   r   r   r£   ƒ  s
   	r£   )#Zmysite.ladon.interfaces.baser   r   r   r   r   Zmysite.ladon.interfacesr   Zmysite.ladon.compatr   r	   r
   r   Zxml.sax.handlerr   r   Zxml.saxr   Zxml.sax.xmlreaderr   r7   Úrerž   ÚcompileÚIrt   r   rM   ÚobjectrN   rT   rŒ   r‘   rš   r£   r   r   r   r   Ú<module>   s&     H :9$