o
    i@                     @   s8  d dl Z d dlZd dlmZ d dlZd dlmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlm Z  de_!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'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j,Z-G d+d, d,ej,Z.G d-d. d.ej,Z/d/Z0G d0d1 d1eZ1G d2d3 d3eZ2G d4d5 d5eZ3G d6d7 d7eZ4G d8d9 d9ej,Z5e6d:kre7  dS dS );    N)etree)MethodContext)Application)rpc)Wsdl11)Array)ComplexModel)Unicode)DateTimeDate)Float)Integer)String)Fault)Soap11)Service)
ServerBase)
_from_soap)_parse_xml_stringtestc                 C   s   t | | d S Nprint)codeheaders r   _/var/www/html/LicenciasMIG/venv/lib/python3.10/site-packages/spyne/test/protocol/test_soap11.pystart_response4   s   r   c                   @   s(   e Zd ZdZeZeZeZe	Z
eZeZdS )AddressTestServiceN)__name__
__module____qualname____namespace__r   streetcityr   zipr
   sincer   laditude	longituder   r   r   r   r   8   s    r   c                   @   s,   e Zd ZdZeZeZeZ	e
eZe
eZdS )Personr   N)r    r!   r"   r#   r   namer
   	birthdater   ager   r   	addressestitlesr   r   r   r   r*   B   s    r*   c                   @      e Zd ZdZeZeZdS )Requestr   N)r    r!   r"   r#   r   param1r   param2r   r   r   r   r1   K       r1   c                   @   s   e Zd ZdZeZdS )Responser   N)r    r!   r"   r#   r   r2   r   r   r   r   r5   Q   s    r5   c                   @   r0   )TypeNS1zTestService.NS1N)r    r!   r"   r#   r   sr   ir   r   r   r   r6   V   r4   r6   c                   @   r0   )TypeNS2zTestService.NS2N)r    r!   r"   r#   r
   dr   fr   r   r   r   r9   \   r4   r9   c                   @   s   e Zd Zeeedd ZdS )MultipleNamespaceServicec                 C      dS NOKr   )ctxt1t2r   r   r   ac      zMultipleNamespaceService.aN)r    r!   r"   r   r6   r9   rC   r   r   r   r   r<   b   s    r<   c                	   @   s   e Zd Zeeeddd Zeeeeddd Zee	ee
e
ddd Zee	dd	 Zee	d
d Zeeeeedddddddd ZdS )r   _returnsc                 C   s   |S r   r   r@   r7   r   r   r   aah   rD   zTestService.aac                 C   s
   t j  S r   )datetimenow)r@   r7   r8   r   r   r   rC   l      
zTestService.ac                 C   s   t  S r   )r   )r@   pr7   rC   r   r   r   bp   s   zTestService.bc                 C      d S r   r   r@   r*   r   r   r   r:   t   rD   zTestService.dc                 C   rN   r   r   rO   r   r   r   ex   rD   zTestService.efromselfimport)_from_self_importreturn)rF   _in_variable_names_out_variable_namec                 C   r=   )N1234r   )r@   rT   rU   rV   r   r   r   r;   |   s   zTestService.fN)r    r!   r"   r   r   rH   r   r
   rC   r*   r   rM   r:   rP   r;   r   r   r   r   r   g   s$    






r   c                   @   s&   e Zd Zeeeeefddd ZdS )MultipleReturnServicerE   c                 C   s
   |ddfS )NrC   rM   r   rG   r   r   r   multi   rK   zMultipleReturnService.multiN)r    r!   r"   r   r   r\   r   r   r   r   r[      s    r[   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )
TestSinglec                 C   sZ   t tgdt t d| _d| j_t | _t| jj}|d |	 | _
t| j
| _d S )Ntnsin_protocolout_protocolz
null.spyneURL)r   r   r   app	transportsrvr   	interfacebuild_interface_documentget_interface_documentwsdl_strr   
fromstringwsdl_doc)rR   wsdlr   r   r   setUp   s   

zTestSingle.setUpc                 C   s,   | j d}| t| jjt|  d S )Nz*{http://schemas.xmlsoap.org/wsdl/}portType)rk   findassertEquallenre   public_methodsgetchildren)rR   porttyper   r   r   test_portypes   s   zTestSingle.test_portypesc                 C   s    dD ]}|| j v sJ dqd S )N)s   selfs   imports   returns   fromz"%s" not in self.wsdl_str)ri   )rR   nr   r   r   test_override_param_names   s   z$TestSingle.test_override_param_namesN)r    r!   r"   rm   rt   rv   r   r   r   r   r]      s    r]   c                   @   s   e Zd Zdd Zdd ZdS )
TestReturnc                 C   s>   t tgdt t d| _d| j_t| jj| _| jd d S )Nr^   r_   nonerb   )	r   r[   r   rc   rd   r   rf   rl   rg   rR   r   r   r   rm      s   zTestReturn.setUpc                 C   s   t tj d j}| }| t|jd t	d}| j
jd |d|| j
j |d }ttj|dd | j
jd ||}| t|d | |d d | |d d	 | |d
 d d S )Nr      r   )rC   rM   cT)pretty_printrC      rM      r{   )listr[   rq   valuesout_messagero   rp   
_type_infor   Elementrc   ra   	to_parentr^   r   tostringfrom_element)rR   message_classmessagesent_xmlresponse_datar   r   r   test_multiple_return   s   
zTestReturn.test_multiple_returnN)r    r!   r"   rm   r   r   r   r   r   rw      s    rw   c                   @   sL   e 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 )
TestSoap11c                 C   s   t jd dttdd}||d |ddd}td}t d ||||	  |d }| 
|jd|	   | 
|d	|	  jd | 
|d
|	  jd t d ||}| 
d|j | 
d|j d S )N	myMessager7   r8   	namespace	type_namemembersr   rC   +   r   {%s}myMessagez{%s}sz{%s}i43)r   producer   r   resolve_namespacer   r   r   r   get_namespacero   tagrn   textr   r7   r8   )rR   mm_instrP   r   r   r   r   test_simple_message   s    
zTestSoap11.test_simple_messagec                 C   s@   dg}t |t d\}}t||\}}| t|d d d S )Ns?  <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xmlns:xsd="http://www.w3.org/2001/XMLSchema"
               xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
               xmlns:tns="http://tempuri.org/"
               xmlns:types="http://example.com/encodedTypes"
               xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
    <tns:myResponse xsi:type="tns:myResponse">
      <myResult href="#id1" />
    </tns:myResponse>
    <soapenc:Array id="id1" soapenc:arrayType="tns:MyData[2]">
      <Item href="#id2" />
      <Item href="#id3" />
    </soapenc:Array>
    <tns:MyData id="id2" xsi:type="tns:MyData">
      <Machine xsi:type="xsd:string">somemachine</Machine>
      <UserName xsi:type="xsd:string">someuser</UserName>
    </tns:MyData>
    <tns:MyData id="id3" xsi:type="tns:MyData">
      <Machine xsi:type="xsd:string">machine2</Machine>
      <UserName xsi:type="xsd:string">user2</UserName>
    </tns:MyData>
  </soap:Body>
</soap:Envelope>utf8r   r~   )r   r   	XMLParserr   ro   rp   )rR   envelope_stringrootxmlidsheaderpayloadr   r   r   	test_href   s   zTestSoap11.test_hrefc                 C   s^   t jddttdd}| }d|_td}t d ||||	  |d }| 
|jd d S )	Nsome_namespacer   r   r   rC   r   r   z{some_namespace}myMessage)r   r   r   r   r7   r   r   r   r   r   ro   r   )rR   r   mirP   r   r   r   test_namespaces   s   
zTestSoap11.test_namespacesc                 C   s2  t jd ddtid}||d | }t |_d|j_d|j_g |j_t	d}t
 d ||||  |d }| |jd	|   | |d d
t  jd | |d dt  jd | t|d dt  d t
 d ||d }| |j|jj | |j|jj | |jg  d S )Nr   rL   r   punksteve-or~   r   r   r   z{%s}namez{%s}age2{%s}addresses)r   r   r*   r   rL   r+   r-   r.   r   r   r   r   r   ro   r   rn   r   rp   r   )rR   r   r   elementp1r   r   r   test_class_to_parent  s4   
 zTestSoap11.test_class_to_parentc                 C   s~   t j tjjdd}d}td}t d t	|d||d |d j
| ks*J t d t	|d|d }||ks=J d S )Nr   )microsecondz%Y %m %d %H %M %Sr   )	dt_formatr   )rI   rJ   pytzutcreplacer   r   r   r   r
   r   	isoformatr   )rR   ru   formatr   dtr   r   r   test_datetime_fixed_format'  s   
z%TestSoap11.test_datetime_fixed_formatc                 C   sZ   dD ](}t  t|}t|tjdksJ |jdksJ |jdks#J |jdks*J qd S )N)z
2013-04-05z2013-04-05+02:00z2013-04-05-02:00z2013-04-05ZTi        )	r   from_unicoder   
isinstancerI   dateyearmonthday)rR   iso_dr:   r   r   r   test_date_with_tzoffset4  s   z"TestSoap11.test_date_with_tzoffsetc                 C   s  t jd ddtid}||d t }d|_d|_g |_tddD ]}t }d	|_	||_
d
|_d|_|j| q!||d}td}t d ||||  |d }| d|  |j |d dt  }| dt| | d|d dt  j d S )Nr   rL   r   r   r   r~   r   d   z123 happy wayz45.22z444.234)rL   r   r   r   0z{%s}zip)r   r   r*   r   r+   r-   r.   ranger   r$   r&   r(   r)   appendr   r   r   r   r   ro   r   rn   rp   r   )rR   r   rL   r8   rC   r   r   r.   r   r   r   test_to_parent_nested<  s:   

z TestSoap11.test_to_parent_nestedc                 C   s4   t d}t d t|d d }|jdksJ d S )Ns  
        <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
          <soap:Body>
            <soap:Fault>
              <faultcode>soap:Client</faultcode>
              <faultstring>Some String</faultstring>
              <detail>
                <Detail xmlns="some_ns">
                  <Policy>Some_Policy</Policy>
                </Detail>
              </detail>
            </soap:Fault>
          </soap:Body>
        </soap:Envelope>r   zsoap:Client)r   rj   r   r   r   	faultcode)rR   r   retr   r   r   .test_fault_deserialization_missing_fault_actor_  s   
z9TestSoap11.test_fault_deserialization_missing_fault_actorN)r    r!   r"   r   r   r   r   r   r   r   r   r   r   r   r   r      s    $ #r   z$http://www.w3.org/2005/08/addressingc                   @      e Zd Zd ZeZdS )ActionNr    r!   r"   __type_name__NAMESPACE_ADDRESSINGr#   r   r   r   r   r   x      r   c                   @   r   )	MessageIDNr   r   r   r   r   r   |  r   r   c                   @   r   )	RelatesToNr   r   r   r   r   r     r   r   c                   @   s*   e Zd Zeeeeefdeddd ZdS )SOAPServiceWithHeaderstatus)
_in_headerrY   rF   c                 C   s   t | dS r>   r   )r@   responser   r   r   someRequest  s   z!SOAPServiceWithHeader.someRequestN)	r    r!   r"   r   r	   r   r   r   r   r   r   r   r   r     s    r   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestSoapHeaderc                 C   s   t tgdt t d| _d S )Nr^   r_   )r   r   r   rc   ry   r   r   r   rm     s
   zTestSoapHeader.setUpc                 C   sr   t | j}t|tj}dg|_|j|dd\}|| | |jd d | |jd d | |jd d	 d S )
Nsx  <senv:Envelope xmlns:tns="tns"
                xmlns:wsa="http://www.w3.org/2005/08/addressing"
                xmlns:senv="http://schemas.xmlsoap.org/soap/envelope/">
                <senv:Header>
                    <wsa:Action>/SomeAction</wsa:Action>
                    <wsa:MessageID>SomeMessageID</wsa:MessageID>
                    <wsa:RelatesTo>SomeRelatesToID</wsa:RelatesTo>
                </senv:Header>
                <senv:Body>
                    <tns:someRequest>
                        <tns:status>OK</tns:status>
                    </tns:someRequest>
                </senv:Body>
            </senv:Envelope>r   in_string_charsetr   /SomeActionr}   SomeMessageIDr~   SomeRelatesToID	r   rc   r   SERVER	in_stringgenerate_contextsget_in_objectro   	in_headerrR   serverinitial_ctxr@   r   r   r   test_soap_input_header  s   

z%TestSoapHeader.test_soap_input_headerc                 C   sr   t | j}t|tj}dg|_|j|dd\}|| | |jd d | |jd d | |jd d	 d
S )z
        Tests supports for input headers whose elements are provided in
        different order than that defined in rpc declaration _in_header parameter.
        s  <senv:Envelope xmlns:tns="tns"
                       xmlns:wsa="http://www.w3.org/2005/08/addressing"
                       xmlns:senv="http://schemas.xmlsoap.org/soap/envelope/">
                <senv:Header>
                    <wsa:MessageID>SomeMessageID</wsa:MessageID>
                    <wsa:RelatesTo>SomeRelatesToID</wsa:RelatesTo>
                    <wsa:Action>/SomeAction</wsa:Action>
                </senv:Header>
                <senv:Body>
                    <tns:someRequest>
                        <tns:status>OK</tns:status>
                    </tns:someRequest>
                </senv:Body>
            </senv:Envelope>r   r   r   r   r}   r   r~   r   Nr   r   r   r   r   test_soap_input_header_order  s   

z+TestSoapHeader.test_soap_input_header_orderc                 C   sr   t | j}t|tj}dg|_|j|dd\}|| | |jd d | |jd d | |jd d	 d	S )
z
        Test that header ordering logic also works when an input header
        element is missing.  Confirm that it returns None for the missing
        parameter.
        sI  <senv:Envelope xmlns:tns="tns"
                        xmlns:wsa="http://www.w3.org/2005/08/addressing"
                        xmlns:senv="http://schemas.xmlsoap.org/soap/envelope/">
                <senv:Header>
                    <wsa:MessageID>SomeMessageID</wsa:MessageID>
                    <wsa:Action>/SomeAction</wsa:Action>
                </senv:Header>
                <senv:Body>
                    <tns:someRequest>
                        <tns:status>OK</tns:status>
                    </tns:someRequest>
                </senv:Body>
                </senv:Envelope>r   r   r   r   r}   r   r~   Nr   r   r   r   r   (test_soap_input_header_order_and_missing  s   

z7TestSoapHeader.test_soap_input_header_order_and_missingN)r    r!   r"   rm   r   r   r   r   r   r   r   r     s
     r   __main__)8rI   unittestlxmlr   r   spyner   spyne.applicationr   spyne.decoratorr   spyne.interface.wsdlr   spyne.model.complexr   r   spyne.model.primitiver	   r
   r   r   r   r   spyne.model.faultr   spyne.protocol.soapr   spyne.servicer   spyne.serverr   r   r   rd   r   r   r*   r1   r5   r6   r9   r<   r   r[   TestCaser]   rw   r   r   r   r   r   r   r   r    mainr   r   r   r   <module>   sZ   
	 =
c