o
    jA                     @   sx  d dl Z e je jd 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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"m#Z#m$Z$m%Z%m&Z&m'Z' de_(dd 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/G dd  d ej,Z0e1d!kre2  dS dS )"    Nlevel)BytesIO)etree)
LogicError)RESPONSE_SUFFIX)
NATIVE_MAP)Service)rpcsrpc)Application)SyncAuxProc)ThreadAuxProc)HttpRpc)Soap11)
NullServer)WsgiApplication)ArraySelfReferenceIterableComplexModelStringUnicodetestc                 C   s   t | | d S Nprint)codeheaders r   W/var/www/html/LicenciasMiG/venv/lib/python3.10/site-packages/spyne/test/test_service.pystart_response4   s   r!   c                   @      e Zd Zeedd ZdS )MultipleMethods1c                 C      d|  S )Nz
%r multi 1r   sr   r   r    multi9      zMultipleMethods1.multiN__name__
__module____qualname__r   r   r'   r   r   r   r    r#   8       r#   c                   @   r"   )MultipleMethods2c                 C   r$   )Nz
%r multi 2r   r%   r   r   r    r'   ?   r(   zMultipleMethods2.multiNr)   r   r   r   r    r.   >   r-   r.   c                   @   s   e Zd Zdd ZdS )
TestEventsc           	   
      s   ddl m} dg  fdd} fdd}G dd dt}t|gd	|d
dt d}|jd| |jd| |jd| t|}d}d|dddddt	|dt
} d dks^J d S )Nr   )XmlDocumentc                    sP   | j d usJ ddlm} t| j |sJ tdt| j   d  d7  < d S )Nr   SchemaValidationErrorzmethod_exception_object: %r   )	out_errorspyne.protocol.xmlr2   
isinstanceloggingerrorreprctxr2   hr   r    on_method_exception_objectJ   s
   zDTestEvents.test_method_exception.<locals>.on_method_exception_objectc                    sR   | j d usJ ddlm} t| j |sJ tdt| j  d  d7  < d S )Nr   r1   zmethod_exception_document: %rr3   )	r4   r5   r2   r6   r7   r8   r   tostringout_documentr:   r<   r   r    on_method_exception_documentQ   s   
zFTestEvents.test_method_exception.<locals>.on_method_exception_documentc                   @   s    e Zd Zeeddd ZdS )z5TestEvents.test_method_exception.<locals>.SomeService   c                 S   s   t | d S r   r   )r;   some_strr   r   r    	some_callZ   s   z?TestEvents.test_method_exception.<locals>.SomeService.some_callN)r*   r+   r,   r
   r   rD   r   r   r   r    SomeServiceY       
rE   some_tnslxml)	validatorin_protocolout_protocolmethod_exception_objectmethod_exception_documents   
            <tns:some_call xmlns:tns="some_tns">
                <tns:some_str>123456</tns:some_str>
            </tns:some_call>
            /	localhost7000POSThttp)	PATH_INFOSERVER_NAMESERVER_PORTREQUEST_METHODzwsgi.url_scheme
wsgi.input   )r5   r0   r	   r   r   event_manageradd_listenerr   joinr   r!   )	selfr0   r>   rA   rE   appwsgi_appxml_request_r   r<   r    test_method_exceptionE   s<   
	z TestEvents.test_method_exceptionN)r*   r+   r,   rc   r   r   r   r    r/   D   s    r/   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 )TestMultipleMethodsc                 C   s8   zt ttgdt t d W td ty   Y d S w )NtnsrJ   
must fail.)r   r#   r.   r   
ValueError	Exception)r^   r   r   r    test_single_method   s   
z&TestMultipleMethods.test_single_methodc                    sl   g  G  fdddt }G  fdddt }t||gddt t }t|}|jd  ddgks4J d S )Nc                       s    e Zd Zee fddZdS )zCTestMultipleMethods.test_simple_aux_nullserver.<locals>.SomeServicec                         |  d S r   appendr%   datar   r    call      zHTestMultipleMethods.test_simple_aux_nullserver.<locals>.SomeService.callNr*   r+   r,   r   r   ro   r   rm   r   r    rE      s    rE   c                       s&   e Zd Ze Zee fddZdS )zBTestMultipleMethods.test_simple_aux_nullserver.<locals>.AuxServicec                    rj   r   rk   r%   rm   r   r    ro      rp   zGTestMultipleMethods.test_simple_aux_nullserver.<locals>.AuxService.callNr*   r+   r,   r   __aux__r   r   ro   r   rm   r   r    
AuxService   s    rt   re   namehey)r	   r   r   r   servicero   r^   rE   rt   r_   serverr   rm   r    test_simple_aux_nullserver   s   z.TestMultipleMethods.test_simple_aux_nullserverc                 C   s*   G dd dt }t|gddt t }d S )Nc                   @       e Zd Zeedddd ZdS )z=TestMultipleMethods.test_namespace_in_message_name.<locals>.Sz{tns}inMessageName)_in_message_namec                 S      d S r   r   r%   r   r   r    ro         zBTestMultipleMethods.test_namespace_in_message_name.<locals>.S.callNrq   r   r   r   r    S   rF   r   re   ru   )r	   r   r   )r^   r   r_   r   r   r    test_namespace_in_message_name   s   z2TestMultipleMethods.test_namespace_in_message_namec                    s|   g  G  fdddt }G  fdddt }t||gdt t d}t|}|ddd	d
dt dtd  ddgks<J d S )Nc                       $   e Zd Zeeed fddZdS )z=TestMultipleMethods.test_simple_aux_wsgi.<locals>.SomeService_returnsc                    rj   r   rk   r%   rm   r   r    ro      rp   zBTestMultipleMethods.test_simple_aux_wsgi.<locals>.SomeService.callNrq   r   rm   r   r    rE          
rE   c                       *   e Zd Ze Zeeed fddZdS )z<TestMultipleMethods.test_simple_aux_wsgi.<locals>.AuxServicer   c                    rj   r   rk   r%   rm   r   r    ro      rp   zATestMultipleMethods.test_simple_aux_wsgi.<locals>.AuxService.callNrr   r   rm   r   r    rt          
rt   re   rJ   s=hey/callrS   text/xml; charset=utf8rQ   QUERY_STRINGrU   rX   CONTENT_TYPErV   rY   http://nullrv   )r	   r   r   r   r   r!   rx   r   rm   r    test_simple_aux_wsgi   s$   
	z(TestMultipleMethods.test_simple_aux_wsgic                    s   dd l }|j|jd t  G  fdddt}G  fdddt}t||gdt t d}t|}|d	d
dddt dt	d dd l
}|d  tddgksSJ d S )Nr   r   c                       r   )z=TestMultipleMethods.test_thread_aux_wsgi.<locals>.SomeServicer   c                    rj   r   addr%   rm   r   r    ro      rp   zBTestMultipleMethods.test_thread_aux_wsgi.<locals>.SomeService.callNrq   r   rm   r   r    rE      r   rE   c                       r   )z<TestMultipleMethods.test_thread_aux_wsgi.<locals>.AuxServicer   c                    s     | d  d S )Nauxr   r%   rm   r   r    ro      s   zATestMultipleMethods.test_thread_aux_wsgi.<locals>.AuxService.callN)r*   r+   r,   r   rs   r   r   ro   r   rm   r   r    rt      r   rt   re   rJ   r   r   rS   r   rQ   r   r   r3   rv   heyaux)r7   basicConfigDEBUGsetr	   r   r   r   r   r!   timesleep)r^   r7   rE   rt   r_   ry   r   r   rm   r    test_thread_aux_wsgi   s,   
	
z(TestMultipleMethods.test_thread_aux_wsgic                 C   s0   zG dd dt }W td ty   Y d S w )Nc                   @   s8   e Zd Zeeee ddd Zeeeddd ZdS )zLTestMultipleMethods.test_mixing_primary_and_aux_methods.<locals>.SomeService)r   _auxc                 S   r}   r   r   r%   r   r   r    ro      r~   zQTestMultipleMethods.test_mixing_primary_and_aux_methods.<locals>.SomeService.callr   c                 S   r}   r   r   r%   r   r   r    mall   r~   zQTestMultipleMethods.test_mixing_primary_and_aux_methods.<locals>.SomeService.mallN)r*   r+   r,   r   r   r   ro   r   r   r   r   r    rE      s
    

rE   zamust fail with 'Exception: you can't mix aux and non-aux methods in a single service definition.')r	   rh   r^   rE   r   r   r    #test_mixing_primary_and_aux_methods   s   z7TestMultipleMethods.test_mixing_primary_and_aux_methodsc              
   C   sj   t |gdt t d}t|}d|dddddtdd	td
}t|}t	tj
|dd ||jjfS )Nre   rJ   rO    z
/some_callrS   r   rQ   r   r   Tpretty_print)r   r   r   r   r]   r   r!   r   
fromstringr   r?   	interfacensmap)r^   rw   r_   ry   return_stringeltr   r   r    __run_service   s"   
	z!TestMultipleMethods.__run_servicec                    s   G dd dt  G  fdddt}| |\}}d}|j||dd dks(J G  fd	ddt}| |\}}d}|j||dd dksHJ G  fd
ddt}| |\}}d}t|j||ddkshJ d S )Nc                   @      e Zd ZdZeZdS )zLTestMultipleMethods.test_settings_headers_from_user_code.<locals>.RespHeaderre   N)r*   r+   r,   __namespace__r   Elem1r   r   r   r    
RespHeader      r   c                       s"   e Zd Z Ze  fddZdS )MTestMultipleMethods.test_settings_headers_from_user_code.<locals>.SomeServicec                         | _ d| j _d S NTest1
out_headerr   r;   r   r   r    rD        WTestMultipleMethods.test_settings_headers_from_user_code.<locals>.SomeService.some_callN)r*   r+   r,   __out_header__r
   rD   r   r   r   r    rE     s    rE   zD/soap11env:Envelope/soap11env:Header/tns:RespHeader/tns:Elem1/text())
namespacesr   r   c                       s"   e Zd Ze d fddZdS )r   )_out_headerc                    r   r   r   r   r   r   r    rD   )  r   r   Nr*   r+   r,   r
   rD   r   r   r   r    rE   (  s    c                       s   e Zd Ze  fddZdS )r   c                    r   r   r   r   r   r   r    rD   5  r   r   Nr   r   r   r   r    rE   4  s    )r   r	   !_TestMultipleMethods__run_servicexpathlen)r^   rE   r   r   queryr   r   r    $test_settings_headers_from_user_code  s   z8TestMultipleMethods.test_settings_headers_from_user_codeN)r*   r+   r,   ri   rz   r   r   r   r   r   r   r   r   r   r    rd      s    #rd   c                   @   s   e Zd Zdd Zdd ZdS )TestNativeTypesc                    sH   t D ] G  fdddt}|jd jj \}t|t   s!J qd S )Nc                       s   e Zd Ze dd ZdS )z6TestNativeTypes.test_native_types.<locals>.SomeServicec                 S   r}   r   r   r;   argr   r   r    rD   D  r~   z@TestNativeTypes.test_native_types.<locals>.SomeService.some_callNr   r   tr   r    rE   C  r-   rE   rD   r   r	   public_methods
in_message
_type_infovalues
issubclassr^   rE   ntr   r   r    test_native_typesA  s   
z!TestNativeTypes.test_native_typesc                    sT   t D ]% G  fdddt}|jd jj \}|j \}t|t   s'J qd S )Nc                       s    e Zd Zee dd ZdS )z@TestNativeTypes.test_native_types_in_arrays.<locals>.SomeServicec                 S   r}   r   r   r   r   r   r    rD   P  r~   zJTestNativeTypes.test_native_types_in_arrays.<locals>.SomeService.some_callN)r*   r+   r,   r
   r   rD   r   r   r   r    rE   O  rF   rE   rD   r   r   r   r   r    test_native_types_in_arraysM  s   
z+TestNativeTypes.test_native_types_in_arraysN)r*   r+   r,   r   r   r   r   r   r    r   @  s    r   c                   @   sD   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S )TestBodyStylec                 C   s   G dd dt }t|gdt tddd}d}t|}td|d	d
dddt|dtd}t	tj
|dd |d jdksBJ t|d dksLJ |d d jdt ksYJ t|d d dkseJ d S )Nc                   @   r{   )z>TestBodyStyle.test_soap_bare_empty_output.<locals>.SomeServicebare)_body_stylec                 S   s   |dksJ d S Nabcr   )r;   r&   r   r   r    rD   ]  s   zHTestBodyStyle.test_soap_bare_empty_output.<locals>.SomeService.some_callNr*   r+   r,   r
   r   rD   r   r   r   r    rE   \  rF   rE   re   Tcleanup_namespacesrJ   s   
<soap11env:Envelope  xmlns:soap11env="http://schemas.xmlsoap.org/soap/envelope/"
                     xmlns:tns="tns">
    <soap11env:Body>
        <tns:some_call>abc</tns:some_call>
    </soap11env:Body>
</soap11env:Envelope>
        rO   r   r   rS   r   rQ   r   r   r   r   /{http://schemas.xmlsoap.org/soap/envelope/}Bodyr3   {tns}some_call)r	   r   r   r   r   r   r]   r   r!   r   r?   tagr   r   r^   rE   r_   reqry   respr   r   r    test_soap_bare_empty_output[  s*   	
	z)TestBodyStyle.test_soap_bare_empty_outputc                 C   s   G dd dt }t|gdt tddd}d}t|}td|d	d
dddt|dtd}t	tj
|dd |d jdksBJ |d d jdt ksOJ |d d jdksZJ d S )Nc                   @   s    e Zd Zededdd ZdS )z=TestBodyStyle.test_soap_bare_empty_input.<locals>.SomeServicer   r   r   c                 S      dS r   r   r   r   r   r    rD     r~   zGTestBodyStyle.test_soap_bare_empty_input.<locals>.SomeService.some_callNr   r   r   r   r    rE     s    
rE   re   Tr   rJ   s  
        <soap11env:Envelope
                    xmlns:soap11env="http://schemas.xmlsoap.org/soap/envelope/"
                    xmlns:tns="tns">
            <soap11env:Body>
                <tns:some_call/>
            </soap11env:Body>
        </soap11env:Envelope>
        rO   r   r   rS   r   rQ   r   r   r   r   r   r   r   r	   r   r   r   r   r   r]   r   r!   r   r?   r   r   textr   r   r   r    test_soap_bare_empty_input~  s(   

	z(TestBodyStyle.test_soap_bare_empty_inputc                    sD   G dd dt  zG  fdddt}W td ty!   Y d S w )Nc                   @   s   e Zd ZdS )zPTestBodyStyle.test_soap_bare_empty_model_input_method_name.<locals>.EmptyRequestN)r*   r+   r,   r   r   r   r    EmptyRequest  s    r   c                       s"   e Zd Ze deddd ZdS )zOTestBodyStyle.test_soap_bare_empty_model_input_method_name.<locals>.SomeServicer   r   c                 S   r   r   r   )r;   requestr   r   r    rD     r~   zYTestBodyStyle.test_soap_bare_empty_model_input_method_name.<locals>.SomeService.some_callNr   r   r   r   r    rE     s    rE   zOMust fail with exception: body_style='bare' does not allow empty model as param)r   r	   rh   r   r   r   r    ,test_soap_bare_empty_model_input_method_name  s   z:TestBodyStyle.test_soap_bare_empty_model_input_method_namec              
      sx   G dd dt  G  fdddt}zt|gdt tddd W td	 ty; } zt| W Y d }~d S d }~ww )
Nc                   @   r   )zDTestBodyStyle.test_implicit_class_conflict.<locals>.someCallResponsere   N)r*   r+   r,   r   r   r&   r   r   r   r    someCallResponse  r   r   c                       s    e Zd Ze eddd ZdS )z?TestBodyStyle.test_implicit_class_conflict.<locals>.SomeServicer   c                 S      ddgS Nr   defr   )r;   xr   r   r    someCall  r(   zHTestBodyStyle.test_implicit_class_conflict.<locals>.SomeService.someCallN)r*   r+   r,   r
   r   r   r   r   r   r    rE     rF   rE   re   Tr   rJ   rf   )r   r	   r   r   rg   r   rh   )r^   rE   er   r   r    test_implicit_class_conflict  s   z*TestBodyStyle.test_implicit_class_conflictc                 C   s   G dd dt }t|gdt tddd}d}t|}td|d	d
ddt|dtd}t	tj
|dd |d jdksAJ |d d jdt ksNJ |d d d jdks[J |d d d jdkshJ d S )Nc                   @   s$   e Zd Zedeeddd ZdS )zFTestBodyStyle.test_soap_bare_wrapped_array_output.<locals>.SomeServicer   r   c                 S   r   r   r   r   r   r   r    rD     r(   zPTestBodyStyle.test_soap_bare_wrapped_array_output.<locals>.SomeService.some_callN)r*   r+   r,   r
   r   r   rD   r   r   r   r    rE     s    rE   re   Tr   rJ   s   
<soap11env:Envelope  xmlns:soap11env="http://schemas.xmlsoap.org/soap/envelope/"
                     xmlns:tns="tns">
    <soap11env:Body>
        <tns:some_call/>
    </soap11env:Body>
</soap11env:Envelope>
        rO   r   r   rS   r   )r   rU   rX   r   rY   r   r   r   r   r   r   r3   r   r   r   r   r   r    #test_soap_bare_wrapped_array_output  s(   	
z1TestBodyStyle.test_soap_bare_wrapped_array_outputc                 C   s6   G dd dt }t|gdt tddd}t|}d S )Nc                   @   s&   e Zd Zeeeeedd ZdS )z6TestBodyStyle.test_array_iterable.<locals>.SomeServicec                 S   r}   r   r   )r;   abr   r   r    rD     r~   z@TestBodyStyle.test_array_iterable.<locals>.SomeService.some_callN)r*   r+   r,   r
   r   r   r   rD   r   r   r   r    rE     s    rE   re   Tr   rJ   )r	   r   r   r   )r^   rE   r_   ry   r   r   r    test_array_iterable  s
   z!TestBodyStyle.test_array_iterablec                 C   s0   zG dd dt }W td ty   Y d S w )Nc                   @   s   e Zd Zeeddd ZdS )z>TestBodyStyle.test_invalid_self_reference.<locals>.SomeServicer   c                 S   r}   r   r   r   r   r   r    method  r~   zETestBodyStyle.test_invalid_self_reference.<locals>.SomeService.methodN)r*   r+   r,   r
   r   r   r   r   r   r    rE     s    rE   zEMust fail with: 'SelfReference can't be used inside @rpc and its ilk')r	   r   rh   r   r   r   r    test_invalid_self_reference  s   z)TestBodyStyle.test_invalid_self_referenceN)
r*   r+   r,   r   r   r   r   r   r   r   r   r   r   r    r   Z  s    #$"r   __main__)3r7   r   r   unittestspyne.util.sixr   rH   r   spyner   spyne.constr   spyne.model.primitiver   spyne.servicer	   spyne.decoratorr
   r   spyne.applicationr   spyne.auxproc.syncr   spyne.auxproc.threadr   spyne.protocol.httpr   spyne.protocol.soapr   spyne.server.nullr   spyne.server.wsgir   spyne.modelr   r   r   r   r   r   	transportr!   r#   r.   TestCaser/   rd   r   r   r*   mainr   r   r   r    <module>   s>    A < $