o
    jl                     @   s  d dl mZ d dlZd dl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mZmZmZmZmZmZmZmZmZmZmZmZ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&m'Z'm(Z( d dl)m*Z* d dl+m,Z, d dl-m.Z. d dl/m0Z0 d dl1m2Z2 d dl3m4Z4 dZ5G dd deZ6e67e6e8 G dd deZ9e97e9e8 G dd de9Z:e:7e:e8 G dd deZ;e;7e;e8 G dd deZ<e<7e<e8 G dd deZ=e=7e=e8 G d d! d!eZ>e>7e>e8 G d"d# d#ej?Z@G d$d% d%eZAG d&d' d'eAZBG d(d) d)ej?ZCG d*d+ d+eZDG d,d- d-eZEG d.d/ d/ej?ZFG d0d1 d1ej?ZGG d2d3 d3ej?ZHG d4d5 d5ej?ZIG d6d7 d7ej?ZJG d8d9 d9ej?ZKG d:d; d;ej?ZLG d<d= d=ej?ZMG d>d? d?ej?ZNe8d@kreO  dS dS )A    )print_functionN)pprint)etree)	b64encode)Decimal)ApplicationrpcmrpcService	ByteArrayArrayComplexModelSelfReferenceXmlDataXmlAttributeUnicodeDateTimeFloatIntegerString)xml)ResourceNotFoundError)	Interface)Wsdl11)TimeSegmentDateSegmentDateTimeSegment)ProtocolBase)Soap11)
NullServer)SimpleDictDocument)XmlDocument)FakeApptest_namespacec                   @   s$   e Zd ZeZeZeZeZ	e
Ze
ZdS )AddressN)__name__
__module____qualname__r   streetcityr   zipr   sincer   	lattitude	longitude r.   r.   ]/var/www/html/LicenciasMiG/venv/lib/python3.10/site-packages/spyne/test/model/test_complex.pyr$   5   s    r$   c                   @   s(   e Zd ZeZeZeZe	e
Ze	eZdS )PersonN)r%   r&   r'   r   namer   	birthdater   ager   r$   	addressestitlesr.   r.   r.   r/   r0   @   s    r0   c                   @      e Zd ZeZeZdS )EmployeeN)r%   r&   r'   r   employee_idr   salaryr.   r.   r.   r/   r7   J       r7   c                   @   r6   )Level2N)r%   r&   r'   r   arg1r   arg2r.   r.   r.   r/   r;   P   r:   r;   c                   @      e Zd ZeZdS )Level3N)r%   r&   r'   r   r<   r.   r.   r.   r/   r?   W       r?   c                   @   r>   )Level4N)r%   r&   r'   r   r<   r.   r.   r.   r/   rA   ]   r@   rA   c                   @   s    e Zd ZeZeeZeeZ	dS )Level1N)
r%   r&   r'   r;   level2r   r?   level3rA   level4r.   r.   r.   r/   rB   c   s    rB   c                   @   D   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 )TestComplexModelc                 C   s8   G dd dt }z	d| _W td ty   Y d S w )Nc                   @      e Zd ZeddZdS )z<TestComplexModel.test_validate_on_assignment_fail.<locals>.CTvoaNr%   r&   r'   r   ir.   r.   r.   r/   Cm       rM   azmust fail with ValueError)r   rL   
ValueError	Exception)selfrM   r.   r.   r/    test_validate_on_assignment_faill   s   
z1TestComplexModel.test_validate_on_assignment_failc                 C   sB   G dd dt }| }d |_|jd u sJ d|_|jdksJ d S )Nc                   @   rH   )z?TestComplexModel.test_validate_on_assignment_success.<locals>.CTrI   NrK   r.   r.   r.   r/   rM   x   rN   rM      )r   rL   )rR   rM   cr.   r.   r/   #test_validate_on_assignment_successw   s   z4TestComplexModel.test_validate_on_assignment_successc                 C   s"  t  }d|_d|_d|_d|_d|_td}t 	d t ||t
 |d }| dt|  tjd	d
dtjd|_td}t 	d t ||t
 |d }| dt|  t d t |}| |j|j | |j|j | |j|j | |j|j | |j|j | |j|j d S )Nz123 happy waybadtown    g333333@g      V@testr   rT   i        )yearmonthdaytzinfo   )r$   r(   r)   r*   r,   r-   r   Elementr!   	to_parentns_testassertEquallengetchildrendatetimepytzutcr+   from_element)rR   rO   elementrr.   r.   r/   test_simple_class   s,   

z"TestComplexModel.test_simple_classc                 C   sh   t  }td}t d t ||t |d }| d |j | d |j | d |j	 | d |j
 d S )NrY   r   )r0   r   ra   r!   rb   rc   rd   r1   r2   r3   r4   )rR   prk   r.   r.   r/   test_nested_class   s   
z"TestComplexModel.test_nested_classc           
      C   s   g }g d}t j dddtjd}|D ]}t }||_||_d|_|| qtt}|	|t
 td}t d |||t |d }| dt|  t d ||}tddD ]}	| ||	 j||	  | ||	 j| qZd S )	N)bobjimpeabodymumblesleeves     )r_      rY   r      )rg   rh   ri   r0   r1   r2   r3   appendr   resolve_namespacer%   r   ra   r!   rb   rc   rd   re   rf   rj   range)
rR   peepsnamesdobr1   rO   typerk   peeps2rL   r.   r.   r/   test_class_array   s(   
z!TestComplexModel.test_class_arrayc                 C   s  g }g d}|D ]2}t  }||_tddd|_d|_g |_tddD ]}t }d|_d|_	|j
| q#|
| qtt }||t td	}t d |||t |d }| d
t|  t d ||}	|	D ]}
| d|
j | dt|
j | d|
jd j	 qld S )N)rp   rq   rr   mumbleslevesrt   ru   rv   r      z555 downtown	funkytownrY   rw      )r0   r1   rg   r2   r3   r4   rz   r$   r(   r)   rx   r   ry   r%   r   ra   r!   rb   rc   rd   re   rf   rj   )rR   r{   r|   r1   rO   rL   addrarrrk   r   peepr.   r.   r/   test_class_nested_array   s4   
z(TestComplexModel.test_class_nested_arrayc                 C   s
  t  }t |_d|j_d|j_g |_g |_tddD ]}t }||_|j	| qtddD ]}t
 }t||_|j	| q.td}t d t ||t |d }t d t |}| |jj|jj | |jj|jj | t|jt|j | dt|j d S )Nabcdgv?r   d   rw   rY   )rB   r;   rC   r<   r=   rD   rE   rz   r?   rx   rA   strr   ra   r!   rb   rc   rj   rd   re   )rR   lrL   rO   rk   l1r.   r.   r/   test_complex_class   s,   

z#TestComplexModel.test_complex_classN)
r%   r&   r'   rS   rV   rm   ro   r   r   r   r.   r.   r.   r/   rG   k   s     rG   c                   @   s   e Zd ZdZedddZdS )XtnsT	unbounded)nillable
max_occursN)r%   r&   r'   __namespace__r   xr.   r.   r.   r/   r         r   c                   @      e Zd ZdZeZdS )Yr   N)r%   r&   r'   r   r   yr.   r.   r.   r/   r     r:   r   c                   @   ,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestIncompleteInputc                 C   s\   t  }ddg|_td}t d t ||d |d }t d t |}| |jddg d S Nru      rY   r   r   )r   r   r   ra   r!   rb   rj   rd   rR   r   rk   msgrl   r.   r.   r/   test_x     

zTestIncompleteInput.test_xc                 C   s\   t  }ddg|_td}t d t ||d |d }t d t|}| |jddg d S r   )	r   r   r   ra   r!   rb   rj   r   rd   r   r.   r.   r/   test_y_fromxml  r   z"TestIncompleteInput.test_y_fromxmlc                 C   sP   t  }ddg|_d|_td}t d t ||d |d }t d t |}d S )Nru   r   &   rY   r   r   )r   r   r   r   ra   r!   rb   rj   )rR   r   rk   r   rl   r.   r.   r/   test_y_toxml  s   

z TestIncompleteInput.test_y_toxmlc                 C   s<   ddgdd}t |}| |jddg | |jd d S )Nru   r   r   )r   r   )r   get_serialization_instancerd   r   r   )rR   test_valuesinstancer.   r.   r/   'test_serialization_instance_on_subclass'  s   
z;TestIncompleteInput.test_serialization_instance_on_subclassN)r%   r&   r'   r   r   r   r   r.   r.   r.   r/   r     s
    			r   c                   @   sF   e Zd ZedddddZedddddZedddddZeddZdS )SisMsgFru   2   r   
min_occursr   max_len)r   N)	r%   r&   r'   r   data_source	directioninterface_namer   crt_dtr.   r.   r.   r/   r   2  s
    r   c                   @   sD   e Zd ZdZdZedddddZedddddZedddddZdS )EncExtractXsru   Fr   r   N)	r%   r&   r'   __min_occurs____max_occurs__r   mbr_idnenc_idnhist_idnr.   r.   r.   r/   r   9  s    r   c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )TestComplexc                 C   s   t tddjdksJ d S )Npunk	type_name)r   r   __type_name__)rR   r.   r.   r/   test_array_type_nameA  s   z TestComplex.test_array_type_namec                 C   sD   G dd dt }|dddgd}|jdksJ |jddgks J d S )Nc                   @   "   e Zd ZeddddZeeZdS )z.TestComplex.test_ctor_kwargs.<locals>.Categoryru   Fr   r   r   N)r%   r&   r'   r   idr   r   childrenr.   r.   r.   r/   CategoryE      r   rT   rO   br   r   r   r   r   rR   r   vr.   r.   r/   test_ctor_kwargsD  s   zTestComplex.test_ctor_kwargsc                 C   st   G dd dt }|dddgd}|jdksJ |jddgks J |dddgd}|jdks/J |jddgks8J d S )Nc                   @   s&   e Zd ZeeddddZeeZdS )z,TestComplex.test_ctor_args.<locals>.Categoryru   Fr   N)	r%   r&   r'   r   r   r   r   r   r   r.   r.   r.   r/   r   O  s    r   rT   rO   r   r   )r   r   r   r.   r.   r/   test_ctor_argsN  s   zTestComplex.test_ctor_argsc                 C   sT   G dd dt }G dd d|}|ddgdd}|jddgks!J |jdks(J d S )	Nc                   @      e Zd ZeeZdS )z.TestComplex.test_ctor_args_2.<locals>.CategoryN)r%   r&   r'   r   r   r   r.   r.   r.   r/   r   ^      r   c                   @   r>   )z4TestComplex.test_ctor_args_2.<locals>.BetterCategoryN)r%   r&   r'   r   sub_categoryr.   r.   r.   r/   BetterCategorya  r@   r   rO   r   aaa)r   r   )r   r   r   )rR   r   r   r   r.   r.   r/   test_ctor_args_2]  s
   zTestComplex.test_ctor_args_2c                 C   sH   G dd dt }G dd d|}d||v sJ d||v s"J d S )Nc                   @   r>   )z*TestComplex.test_flat_type_info.<locals>.ANrK   r.   r.   r.   r/   Aj  r@   r   c                   @   r>   )z*TestComplex.test_flat_type_info.<locals>.BN)r%   r&   r'   r   sr.   r.   r.   r/   Bm  r@   r   r   rL   )r   get_flat_type_inforR   r   r   r.   r.   r/   test_flat_type_infoi  s   zTestComplex.test_flat_type_infoc                 C   s   G dd dt }G dd d|}d||v sJ d||v s"J d||v s+J d||v s4J d||jv s>J d||jv sHJ d S )	Nc                   @      e Zd ZeZeeZdS )z/TestComplex.test_flat_type_info_attr.<locals>.AN)r%   r&   r'   r   rL   r   iar.   r.   r.   r/   r   t      r   c                   @   r   )z/TestComplex.test_flat_type_info_attr.<locals>.BN)r%   r&   r'   r   r   r   sar.   r.   r.   r/   r   x  r   r   r   rL   r   r   )r   r   attrsr   r.   r.   r/   test_flat_type_info_attrs  s   z$TestComplex.test_flat_type_info_attrN)	r%   r&   r'   r   r   r   r   r   r   r.   r.   r.   r/   r   @  s    

r   c                   @   s6   e Zd ZdddZdd Zdd Zdd	 Zd
d ZdS )TestXmlAttributeNc                 C   s&   |du rd}|  | || dS dS )zStolen from Python 2.7 stdlib.Nzunexpectedly None)fail_formatMessage)rR   objr   standardMsgr.   r.   r/   assertIsNotNone  s   z TestXmlAttribute.assertIsNotNonec                 C   s   G dd dt }t }d|_|||j t|}|| t|}|d ||}|	|j
|  }|td}ttj|dd | | | |dd	 | |d
|jj| d S )Nc                   @   s   e Zd ZeZeZeeZdS )z/TestXmlAttribute.test_add_to_schema.<locals>.CMN)	r%   r&   r'   r   rL   r   r   r   rO   r.   r.   r.   r/   CM  s    r   r   zhttp://a-aaaa.com	attributeTpretty_printr1   rO   r~   )r   r"   r   ry   r   	add_classr   build_interface_documentget_namespace_prefixget_schema_infotypesget_type_namefindr   XSDprintr   tostringr   rd   getrO   r~   get_type_name_ns)rR   r   app	interfacewsdlpreftype_defattribute_defr.   r.   r/   test_add_to_schema  s   



 z#TestXmlAttribute.test_add_to_schemac                 C   s   G dd dt }d}t|}||gd}td}t d ||||  |d }|d|  j}| 	||
d t d ||}|jd |ksMJ d S )	Nc                   @   r   )zCTestXmlAttribute.test_b64_non_attribute.<locals>.PacketNonAttributemynsN)r%   r&   r'   r   r   Datar.   r.   r.   r/   PacketNonAttribute  r:   r      yo test datar   rY   r   z{%s}Dataascii)r   r   r   ra   r   rb   get_namespacer   textrd   decoderj   r   )rR   r   test_string	b64stringggrk   datas1r.   r.   r/   test_b64_non_attribute  s   
z'TestXmlAttribute.test_b64_non_attributec                 C   s   G dd dt }d}t|}||gd}td}t d ||||  |d }ttj|dd t|j	 | 
|j	d	 |d
 t d ||}|jd |ksTJ d S )Nc                   @   s   e Zd ZdZeeddZdS )z<TestXmlAttribute.test_b64_attribute.<locals>.PacketAttributer   required)useN)r%   r&   r'   r   r   r   r   r.   r.   r.   r/   PacketAttribute  r   r  r   r   rY   r   Tr   r   r   )r   r   r   ra   r   rb   r   r   r   attribrd   r  rj   r   )rR   r  r  r  r  rk   r  r.   r.   r/   test_b64_attribute  s   

z#TestXmlAttribute.test_b64_attributec                    s4   G dd dt  G  fdddt}t|gd}d S )Nc                   @   s   e Zd ZeeddZdS )z8TestXmlAttribute.test_customized_type.<locals>.SomeClassrw   )geN)r%   r&   r'   r   r   rO   r.   r.   r.   r/   	SomeClass      r  c                       s   e Zd Ze dd ZdS )z:TestXmlAttribute.test_customized_type.<locals>.SomeServicec                 S      d S Nr.   )ctx
some_classr.   r.   r/   	some_call     zDTestXmlAttribute.test_customized_type.<locals>.SomeService.some_callN)r%   r&   r'   r   r  r.   r  r.   r/   SomeService  s    r  some_tns)r   r
   r   )rR   r  r   r.   r  r/   test_customized_type  s   z%TestXmlAttribute.test_customized_typer  )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S )TestSimpleTypeRestrictionsc                    sB  G dd dt  G  fdddt }||}t| d|v s!J |d jdks*J |d jtu s3J |d j|u s<J d|v sBJ |d jdksKJ |d jtu sTJ |d j|u s]J d	|v scJ |d	 jd
kslJ |d	 jtu suJ |d	 j u s~J d|v sJ |d jdksJ |d jtu sJ |d j u sJ d S )Nc                   @   r6   )z<TestSimpleTypeRestrictions.test_simple_type_info.<locals>.CMNr%   r&   r'   r   rL   r   r   r.   r.   r.   r/   r     r:   r   c                          e Zd Z ZeZeZdS )z=TestSimpleTypeRestrictions.test_simple_type_info.<locals>.CCMNr%   r&   r'   rU   r   rL   r   r   r.   r   r.   r/   CCM      r   rL   rL   r   r   c.i)rU   rL   c.s)rU   r   )r   get_simple_type_infor   pathr~   r   parentr   )rR   r   stir.   r  r/   test_simple_type_info  s(   
z0TestSimpleTypeRestrictions.test_simple_type_infoc                    sR   G dd dt  G  fdddt }z|j|dd W td ty(   Y d S w )Nc                   @   r6   )zFTestSimpleTypeRestrictions.test_simple_type_info_conflicts.<locals>.CMNr  r.   r.   r.   r/   r     r:   r   c                       s   e Zd Z ZeZdS )zGTestSimpleTypeRestrictions.test_simple_type_info_conflicts.<locals>.CCMN)r%   r&   r'   rU   r   c_ir.   r  r.   r/   r     r:   r   _)
hier_delim	must fail)r   r&  rP   rQ   )rR   r   r.   r  r/   test_simple_type_info_conflicts  s   z:TestSimpleTypeRestrictions.test_simple_type_info_conflictsN)r%   r&   r'   r*  r/  r.   r.   r.   r/   r    s    r  c                   @   rF   )TestFlatDictc                    s   G dd dt  G  fdddt }|dd ddd	d
}t ||}|d dks,J |d dks4J |d dks<J |d dksDJ t|dksLJ d S )Nc                   @   r6   )z#TestFlatDict.test_basic.<locals>.CMNr  r.   r.   r.   r/   r     r:   r   c                       r  )z$TestFlatDict.test_basic.<locals>.CCMNr  r.   r  r.   r/   r     r!  r   rT   rO      r   rL   r   )rL   r   rU   rL   r   r$  r%  rw   )r   r    object_to_simple_dictre   rR   r   valdr.   r  r/   
test_basic  s   zTestFlatDict.test_basicc                 C   sf   G dd dt }|ddd}t ||}t| |d dks!J |d dks)J t|dks1J d S )	Nc                   @       e Zd ZeddZeddZdS )z*TestFlatDict.test_sub_name_ser.<locals>.CMrL   sub_namer   Nr%   r&   r'   r   integerr   stringr.   r.   r.   r/   r         
r   r1  r   )r<  r=  rL   r   r   )r   r    r3  r   re   )rR   r   r5  r6  r.   r.   r/   test_sub_name_ser  s   zTestFlatDict.test_sub_name_serc                 C   sV   G dd dt }dgdgd}t d ||}t| |jdks"J |jdks)J d S )Nc                   @   r8  )z,TestFlatDict.test_sub_name_deser.<locals>.CMrL   r9  r   Nr;  r.   r.   r.   r/   r   ,  r>  r   r1  r   r2  )r   r    simple_dict_to_objectr   r<  r=  )rR   r   r6  r5  r.   r.   r/   test_sub_name_deser+  s   z TestFlatDict.test_sub_name_deserc                    s   G dd dt  G  fdddt }| fddtdD d}t ||}t| |d	 d
ks3J |d dks;J |d dksCJ |d dksKJ t|dksSJ d S )Nc                   @   r6   )z,TestFlatDict.test_array_not_none.<locals>.CMNr  r.   r.   r.   r/   r   :  r:   r   c                          e Zd Ze ZdS )z-TestFlatDict.test_array_not_none.<locals>.CCMNr%   r&   r'   r   rU   r.   r  r.   r/   r   >  r   r   c                    s    g | ]} |d |d  dqS )r   ru   r2  r.   .0rL   r  r.   r/   
<listcomp>A  s     z4TestFlatDict.test_array_not_none.<locals>.<listcomp>r   rU   c[0].ir   zc[0].sr   c[1].iru   zc[1].sbbrw   )r   rz   r    r3  r   re   r4  r.   r  r/   test_array_not_none9  s   z TestFlatDict.test_array_not_nonec                    sT   G dd dt  G  fdddt }| }t ||}t| t|dks(J d S )Nc                   @   r6   )z(TestFlatDict.test_array_none.<locals>.CMNr  r.   r.   r.   r/   r   N  r:   r   c                       rB  )z)TestFlatDict.test_array_none.<locals>.CCMNrC  r.   r  r.   r/   r   R  r   r   r   )r   r    r3  r   re   r4  r.   r  r/   test_array_noneM  s   zTestFlatDict.test_array_nonec                    s   G dd dt  G  fdddt }| fddtddD d	}t ||}t| |d
 ddgks6J |d g dks@J t|dksHJ d S )Nc                   @   r   )z*TestFlatDict.test_array_nested.<locals>.CMN)r%   r&   r'   r   r   rL   r.   r.   r.   r/   r   ]  r   r   c                       rB  )z+TestFlatDict.test_array_nested.<locals>.CCMNrC  r.   r  r.   r/   r   `  r   r   c                    s   g | ]	} t |d qS )r"  )rz   rD  r  r.   r/   rF  c  s    z2TestFlatDict.test_array_nested.<locals>.<listcomp>r   rw   rG  rH  r   ru   rI  )r   ru   r   )r   rz   r    r3  r   re   r4  r.   r  r/   test_array_nested\  s   zTestFlatDict.test_array_nestedc                 C   s6   t tdd}t|tsJ ||jjtdksJ d S )NF)wrappedinfinity)r   r   
issubclass
Attributesr   D)rR   rL   r.   r.   r/   test_array_nonwrappedm  s   z"TestFlatDict.test_array_nonwrappedN)
r%   r&   r'   r7  r?  rA  rK  rL  rM  rS  r.   r.   r.   r/   r0    s    r0  c                   @   $   e Zd Zdd Zdd Zdd ZdS )TestSelfRefencec                    sT   G dd dt   jd }|jp|}| u sJ G  fdddt}t|gd d S )Nc                   @   r>   )z>TestSelfRefence.test_canonical_case.<locals>.TestSelfReferenceN)r%   r&   r'   r   self_referencer.   r.   r.   r/   TestSelfReferencev  r@   rW  rV  c                          e Zd Ze ddd ZdS )z8TestSelfRefence.test_canonical_case.<locals>.SoapService_returnsc                 S   r  r  r.   r  r.   r.   r/   view_categories  r  zHTestSelfRefence.test_canonical_case.<locals>.SoapService.view_categoriesNr%   r&   r'   r   r\  r.   rW  r.   r/   SoapService~      r_  service.soap)r   
_type_info__orig__r
   r   )rR   rU   r_  r.   r^  r/   test_canonical_caseu  s   

z#TestSelfRefence.test_canonical_casec                    s   ddl m} G dd dt t  jd<   } dd ddg|_|| }t| |d d d dks8J |d d d dksDJ G  fd	d
d
t}t|gdt	 t	 d d S )Nr   )get_object_as_dictc                   @   s   e Zd ZeddddZdS )zHTestSelfRefence.test_self_referential_array_workaround.<locals>.Categoryru   Fr   N)r%   r&   r'   r   r   r.   r.   r.   r/   r     r  r   r   r   ru   r   c                       rX  )zKTestSelfRefence.test_self_referential_array_workaround.<locals>.SoapServicerY  c                 S   r  r  r.   r[  r.   r.   r/   r\    r  z[TestSelfRefence.test_self_referential_array_workaround.<locals>.SoapService.view_categoriesNr]  r.   r   r.   r/   r_    r`  r_  ra  )in_protocolout_protocol)
spyne.util.dictdocre  r   r   rb  r   r   r
   r   r   )rR   re  r(  r6  r_  r.   rg  r/   &test_self_referential_array_workaround  s   

z6TestSelfRefence.test_self_referential_array_workaroundc                 C   sP   G dd dt }| }|dd|ddg|_|jd j \}t||s&J d S )Nc                   @   r   )z6TestSelfRefence.test_canonical_array.<locals>.Categoryru   Fr   N)r%   r&   r'   r   r   r   r   r   r.   r.   r.   r/   r     r   r   ru   rf  r   r   )r   r   rb  valuesrP  )rR   r   r(  srr.   r.   r/   test_canonical_array  s
   z$TestSelfRefence.test_canonical_arrayN)r%   r&   r'   rd  rk  rn  r.   r.   r.   r/   rU  t  s    rU  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d Zdd Zdd Zdd ZdS )TestMemberRpcc                 C   0   G dd dt }|jj}t| d|v sJ d S )Nc                   @      e Zd Ze dd ZdS )z3TestMemberRpc.test_simple.<locals>.SomeComplexModelc                 S      dS NzPUNK!!!r.   rR   r  r.   r.   r/   put  r  z7TestMemberRpc.test_simple.<locals>.SomeComplexModel.putNr%   r&   r'   r	   ru  r.   r.   r.   r/   SomeComplexModel      rw  ru  r   rQ  methodsr   rR   rw  rz  r.   r.   r/   test_simple  s   zTestMemberRpc.test_simplec                 C   s8   G dd dt }|jddjj}t| d|v sJ d S )Nc                   @   rq  )z=TestMemberRpc.test_simple_customize.<locals>.SomeComplexModelc                 S   rr  rs  r.   rt  r.   r.   r/   ru    r  zATestMemberRpc.test_simple_customize.<locals>.SomeComplexModel.putNrv  r.   r.   r.   r/   rw    rx  rw  zurt)zartru  )r   	customizerQ  rz  r   r{  r.   r.   r/   test_simple_customize  s   z#TestMemberRpc.test_simple_customizec                 C   rp  )Nc                   @   s   e Zd ZeZe dd ZdS )z?TestMemberRpc.test_simple_with_fields.<locals>.SomeComplexModelc                 S   rr  rs  r.   rt  r.   r.   r/   ru    r  zCTestMemberRpc.test_simple_with_fields.<locals>.SomeComplexModel.putN)r%   r&   r'   r   rO   r	   ru  r.   r.   r.   r/   rw    s    rw  ru  ry  r{  r.   r.   r/   test_simple_with_fields     z%TestMemberRpc.test_simple_with_fieldsc                 C   rp  )Nc                   @   s$   e Zd ZdefgZe dd ZdS )zHTestMemberRpc.test_simple_with_explicit_fields.<locals>.SomeComplexModelrO   c                 S   rr  rs  r.   rt  r.   r.   r/   ru    r  zLTestMemberRpc.test_simple_with_explicit_fields.<locals>.SomeComplexModel.putN)r%   r&   r'   r   rb  r	   ru  r.   r.   r.   r/   rw    s    
rw  ru  ry  r{  r.   r.   r/    test_simple_with_explicit_fields  r  z.TestMemberRpc.test_simple_with_explicit_fieldsc                    s0   d G  fdddt }| d  ksJ d S )Nwhateverc                       s   e Zd Ze  fddZdS )z8TestMemberRpc.test_native_call.<locals>.SomeComplexModelc                        S r  r.   rt  r   r.   r/   ru    r  z<TestMemberRpc.test_native_call.<locals>.SomeComplexModel.putNrv  r.   r  r.   r/   rw    s    rw  )r   ru  rR   rw  r.   r  r/   test_native_call  s   zTestMemberRpc.test_native_callc                    h   G dd dt   jj}t| d|v sJ G  fdddt}t|gd}td }||jjv s2J d S )Nc                   @   rq  )z6TestMemberRpc.test_interface.<locals>.SomeComplexModelc                 S   r  r  r.   rt  r.   r.   r/   member_method  r  zDTestMemberRpc.test_interface.<locals>.SomeComplexModel.member_methodNr%   r&   r'   r	   r  r.   r.   r.   r/   rw    rx  rw  r  c                       "   e Zd Ze d fddZdS )z1TestMemberRpc.test_interface.<locals>.SomeServicerY  c                         S r  r.   r[  rw  r.   r/   service_method     z@TestMemberRpc.test_interface.<locals>.SomeService.service_methodN)r%   r&   r'   r   r  r.   r  r.   r/   r        r  some_ns.SomeComplexModel.member_method	r   rQ  rz  r   r
   r   r%   r   method_id_maprR   rz  r  r   mmmr.   r  r/   test_interface  s   zTestMemberRpc.test_interfacec                    r  )Nc                   @   rq  )z;TestMemberRpc.test_interface_mult.<locals>.SomeComplexModelc                 S   r  r  r.   rt  r.   r.   r/   r    r  zITestMemberRpc.test_interface_mult.<locals>.SomeComplexModel.member_methodNr  r.   r.   r.   r/   rw    rx  rw  r  c                       s@   e Zd Ze d fddZe jddd fddZdS )	z6TestMemberRpc.test_interface_mult.<locals>.SomeServicerY  c                    r  r  r.   r[  r  r.   r/   r    r  zETestMemberRpc.test_interface_mult.<locals>.SomeService.service_methodzonr   c                    r  r  r.   r[  r  r.   r/   service_method_2  r  zGTestMemberRpc.test_interface_mult.<locals>.SomeService.service_method_2N)r%   r&   r'   r   r  r  r  r.   r  r.   r/   r    s
    r  r  r  r  r  r.   r  r/   test_interface_mult  s   	z!TestMemberRpc.test_interface_multc                    sv   ddl m dG fdddt G  fdddt}tt|gdd	}z
|j  W t	d
 ty:   Y d S w )Nr   r	   degerc                       s"   e Zd Z edfddZdS )z>TestMemberRpc.test_remote_call_error.<locals>.SomeComplexModelrY  c                    r  r  r.   rt  r  r.   r/   ru    r  zBTestMemberRpc.test_remote_call_error.<locals>.SomeComplexModel.putN)r%   r&   r'   r   ru  r.   )r	   r   r.   r/   rw    r  rw  c                       r  )z9TestMemberRpc.test_remote_call_error.<locals>.SomeServicerY  c                    r  r  r.   r[  r  r.   r/   r     r  z=TestMemberRpc.test_remote_call_error.<locals>.SomeService.getNr%   r&   r'   r   r   r.   r  r.   r/   r    r  r  r  r   z`Must fail with: "Requested resource '{spyne.test.model.test_complex}SomeComplexModel' not found")
spyner	   r   r
   r   r   serviceru  r   rQ   )rR   r  nullr.   )rw  r	   r   r/   test_remote_call_error
  s   z$TestMemberRpc.test_remote_call_errorc                 C   s6   G dd dt }|jj}|d jjd j|u sJ d S )Nc                   @   rq  )z6TestMemberRpc.test_signature.<locals>.SomeComplexModelc                 S   r  r  r.   rt  r.   r.   r/   r  $  r  zDTestMemberRpc.test_signature.<locals>.SomeComplexModel.member_methodNr  r.   r.   r.   r/   rw  #  rx  rw  r  r   )r   rQ  rz  
in_messagerb  rc  r{  r.   r.   r/   test_signature"  s   zTestMemberRpc.test_signaturec                    sD   ddl m  G  fdddt}|jj}|d jjd |u s J d S )Nr   r  c                       s   e Zd Z eddd ZdS )z;TestMemberRpc.test_self_reference.<locals>.SomeComplexModelrY  c                 S   r  r  r.   rt  r.   r.   r/   method1  r  zBTestMemberRpc.test_self_reference.<locals>.SomeComplexModel.methodN)r%   r&   r'   r   r  r.   r  r.   r/   rw  0  r`  rw  r  )r  r	   r   rQ  rz  out_messagerb  r{  r.   r  r/   test_self_reference-  s   z!TestMemberRpc.test_self_referencec                    sj   ddl m G fdddt G  fdddt}tt|gdd} d	d
}|jd ||u s3J d S )Nr   r  c                       s"   e Zd ZeZ eddd ZdS )z@TestMemberRpc.test_remote_call_success.<locals>.SomeComplexModelrY  c                 S   s   | S r  r.   rt  r.   r.   r/   echo=  r  zETestMemberRpc.test_remote_call_success.<locals>.SomeComplexModel.echoN)r%   r&   r'   r   rL   r   r  r.   r  r.   r/   rw  ;  s    rw  c                       r  )z;TestMemberRpc.test_remote_call_success.<locals>.SomeServicerY  c                    r  r  r.   r[  r  r.   r/   r   B  r  z?TestMemberRpc.test_remote_call_success.<locals>.SomeService.getNr  r.   r  r.   r/   r  A  r  r  r  r  rT   r"  zSomeComplexModel.echo)r  r	   r   r
   r   r   r  )rR   r  r  r   r.   )rw  r	   r/   test_remote_call_success8  s   
z&TestMemberRpc.test_remote_call_successc                 C   s*   G dd dt }|j ddgksJ d S )Nc                   @   s"   e Zd ZdefdeddfgZdS )z$TestMemberRpc.test_order.<locals>.CMrO   rU   r   )orderN)r%   r&   r'   r   rb  r.   r.   r.   r/   r   L  s    r   rU   rO   )r   rb  keys)rR   r   r.   r.   r/   
test_orderK  s   zTestMemberRpc.test_orderN)r%   r&   r'   r|  r  r  r  r  r  r  r  r  r  r  r  r.   r.   r.   r/   ro    s    


ro  c                   @   r   )
TestDocc                 C   $   G dd dt }d| ksJ d S )Nc                   @   &   e Zd ZdZeZG dd dejZdS )z1TestDoc.test_parent_doc.<locals>.SomeComplexModelSome docstringc                   @      e Zd ZdZdS )z=TestDoc.test_parent_doc.<locals>.SomeComplexModel.AnnotationsTNr%   r&   r'   __use_parent_doc__r.   r.   r.   r/   AnnotationsZ  r@   r  Nr%   r&   r'   __doc__r   
some_fieldr   r  r.   r.   r.   r/   rw  W      rw  r  r   get_documentationr  r.   r.   r/   test_parent_docV  s   zTestDoc.test_parent_docc                 C   r  )Nc                   @   &   e Zd ZdZG dd dejZeZdS )z1TestDoc.test_annotation.<locals>.SomeComplexModelr  c                   @   r  )z=TestDoc.test_annotation.<locals>.SomeComplexModel.AnnotationsSome annotationsN)r%   r&   r'   docr.   r.   r.   r/   r  a  r@   r  Nr%   r&   r'   r  r   r  r   r  r.   r.   r.   r/   rw  _      rw  r  r  r  r.   r.   r/   test_annotation^     zTestDoc.test_annotationc                 C   r  )Nc                   @   r  )z4TestDoc.test_no_parent_doc.<locals>.SomeComplexModelr  c                   @   r  )z@TestDoc.test_no_parent_doc.<locals>.SomeComplexModel.AnnotationsFNr  r.   r.   r.   r/   r  j  r@   r  Nr  r.   r.   r.   r/   rw  h  r  rw   r  r  r.   r.   r/   test_no_parent_docg  r  zTestDoc.test_no_parent_docc                 C   s(   G dd dt }d|  ksJ dS )z:Check that we keep the documentation when we use customizec                   @   r  )z;TestDoc.test_parent_doc_customize.<locals>.SomeComplexModelr  c                   @   r  )zGTestDoc.test_parent_doc_customize.<locals>.SomeComplexModel.AnnotationsTNr  r.   r.   r.   r/   r  u  r@   r  Nr  r.   r.   r.   r/   rw  r  r  rw  r  N)r   r  r  r  r.   r.   r/   test_parent_doc_customizep  s   z!TestDoc.test_parent_doc_customizeN)r%   r&   r'   r  r  r  r  r.   r.   r.   r/   r  U  s
    		r  c                   @   s   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d Zdd Zdd Zdd Zdd Zdd Zdd ZdS ) TestCustomizec                 C   s   G dd dt }| jd u sJ G dd d|}|jd u s J | }|j|u s+J |j|u s2J | }|j|u s=J |j|u sDJ d S )Nc                   @   r>   )z(TestCustomize.test_base_class.<locals>.ANr%   r&   r'   r   r   r.   r.   r.   r/   r   |  r@   r   c                   @   r>   )z(TestCustomize.test_base_class.<locals>.BNrK   r.   r.   r.   r/   r     r@   r   )r   r  __extends__rc  rR   r   r   B2B3r.   r.   r/   test_base_class{  s   zTestCustomize.test_base_classc                 C   s2   G dd dt }||d jjtdksJ d S )Nc                   @   r>   )z"TestCustomize.test_noop.<locals>.ANr  r.   r.   r.   r/   r     r@   r   r   inf)r   r   rQ  r   rR  rR   r   r.   r.   r/   	test_noop  s   "zTestCustomize.test_noopc                 C   s:   t dd}|jjdksJ |jt u sJ |jt u sJ d S )N
   r   )r   rQ  r   r  rc  )rR   tr.   r.   r/   test_cust_simple  s   
zTestCustomize.test_cust_simplec                 C   sT   t dd}|dd}|jjdksJ |jjdksJ |j|u s!J |jt u s(J d S )Nr  r  rT   )min_len)r   rQ  r   r  r  rc  )rR   r  t2r.   r.   r/   test_cust_simple_again  s   

z$TestCustomize.test_cust_simple_againc                 C   sF   G dd dt }|jttdddd}||d jjdks!J d S )Nc                   @   r>   )z*TestCustomize.test_cust_complex.<locals>.ANr  r.   r.   r.   r/   r     r@   r   r  r  r#  child_attrsr   r   r  dictr   rQ  r   )rR   r   A2r.   r.   r/   test_cust_complex  s   zTestCustomize.test_cust_complexc                 C   sV   G dd dt }G dd d|}|jttdddd}||d	 jjdks)J d S )
Nc                   @   r>   )z-TestCustomize.test_cust_base_class.<locals>.ANr  r.   r.   r.   r/   r     r@   r   c                   @   r>   )z-TestCustomize.test_cust_base_class.<locals>.BNrK   r.   r.   r.   r/   r     r@   r   r  r  r#  r  r   r  rR   r   r   r  r.   r.   r/   test_cust_base_class  s   z"TestCustomize.test_cust_base_classc                 C   sH   G dd dt }| }zG dd d|}W td ty#   Y d S w )Nc                   @   r>   )z3TestCustomize.test_cust_again_base_class.<locals>.ANr  r.   r.   r.   r/   r     r@   r   c                   @   r>   )z3TestCustomize.test_cust_again_base_class.<locals>.BNrK   r.   r.   r.   r/   r     r@   r   r.  )r   r  AssertionErrorrQ   )rR   r   r  r   r.   r.   r/   test_cust_again_base_class  s   z(TestCustomize.test_cust_again_base_classc                 C   s6   t t}|jt u sJ |jd u sJ t|t sJ d S r  )r   r   rc  r  rP  r  r.   r.   r/   test_cust_array  s   zTestCustomize.test_cust_arrayc                 C   sR   t t}|jdd}|jjdksJ |jt u sJ |jd u s J t|t s'J d S )Nbar)foo)r   r   r  rQ  r  rc  r  rP  r  r.   r.   r/   test_cust_array_again  s   z#TestCustomize.test_cust_array_againc                 C   sV   t t}|jtddd}|j \}|jjdksJ |jtu s"J t	|ts)J d S )Nr  r  serializer_attrs)
r   r   r  r  rb  rl  rQ  r   rc  rP  )rR   r   
serializerr.   r.   r/   test_cust_array_serializer  s   z(TestCustomize.test_cust_array_serializerc                 C   s   G dd dt }ttttddddd}|jdi |}|jd j \}|jjdks/J G d	d
 d
|}|jdi |}||}|d j \}|jjdksTJ dS )zvanilla class is passed as basec                   @   r   )z,TestCustomize.test_cust_sub_array.<locals>.AN)r%   r&   r'   r   r   r   r.   r.   r.   r/   r     r   r   r  r  r  r#  r  r   c                   @   r>   )z,TestCustomize.test_cust_sub_array.<locals>.BNrK   r.   r.   r.   r/   r     r@   r   Nr.   )r   r  r  rb  rl  rQ  r   r   )rR   r   r6  r  serr   r  b2_ftir.   r.   r/   test_cust_sub_array  s$   

z!TestCustomize.test_cust_sub_arrayc                 C   s   G dd dt }G dd d|}|jttdddd}||d	 jjdks)J |jttd
ddd}||d	 jjdksBJ d S )Nc                   @   r6   )z.TestCustomize.test_cust_side_effect.<locals>.ANr%   r&   r'   r   r   r   rL   r.   r.   r.   r/   r     r:   r   c                   @   r>   )z.TestCustomize.test_cust_side_effect.<locals>.BNr%   r&   r'   r   r6  r.   r.   r.   r/   r     r@   r   r  r  r#  r  r   z%y)	dt_format)r6  r  r  r.   r.   r/   test_cust_side_effect  s   z#TestCustomize.test_cust_side_effectc                 C   sj   G dd dt }G dd d|}|jtddd}||d jjdks&J ||d	 jjdks3J d S )
Nc                   @   s   e Zd ZeZeZdS )z&TestCustomize.test_cust_all.<locals>.AN)r%   r&   r'   r   r   rL   r.   r.   r.   r/   r   $  r:   r   c                   @   r>   )z&TestCustomize.test_cust_all.<locals>.BNr  r.   r.   r.   r/   r   (  r@   r   r  r  )child_attrs_allr   rL   r  r  r.   r.   r/   test_cust_all#  s
   zTestCustomize.test_cust_allc                 C   s   G dd dt }G dd d|}|jttdddd}||d	 jjdks)J ||d	 jjd
ks6J ||d jjdksCJ d S )Nc                   @   r6   )z(TestCustomize.test_cust_noexc.<locals>.ANr  r.   r.   r.   r/   r   0  r:   r   c                   @   r>   )z(TestCustomize.test_cust_noexc.<locals>.BNr  r.   r.   r.   r/   r   4  r@   r   r  r  r#  )child_attrs_noexcr   FrL   T)r   r  r  r   rQ  r   excr  r.   r.   r/   test_cust_noexc/  s   zTestCustomize.test_cust_noexcc              
      s   G dd dt }| G dd dt }|G  fdddt}zt|gd W td tyA } zt| W Y d }~d S d }~ww )Nc                   @   r>   zFTestCustomize.test_complex_type_name_clashes.<locals>.TestComplexModelN)r%   r&   r'   r   attr1r.   r.   r.   r/   rG   >  r@   rG   c                   @   r>   r  )r%   r&   r'   r   attr2r.   r.   r.   r/   rG   C  r@   c                       s,   e Zd Ze dd Zedd ZdS )zATestCustomize.test_complex_type_name_clashes.<locals>.TestServicec                 S   r  r  r.   r  r   r.   r.   r/   test1I  r  zGTestCustomize.test_complex_type_name_clashes.<locals>.TestService.test1c                 S   r  r  r.   r  r.   r.   r/   test2M  r  zGTestCustomize.test_complex_type_name_clashes.<locals>.TestService.test2N)r%   r&   r'   r   r  r  r.   TestComplexModel1TestComplexModel2r.   r/   TestServiceH  s
    
r  r   zmust fail with: ValueError: classes <class 'spyne.test.model.test_complex.TestComplexModel'> and <class 'spyne.test.model.test_complex.TestComplexModel'> have conflicting names.)r   r
   r   rQ   r   )rR   rG   r  er.   r  r/   test_complex_type_name_clashes=  s   	z,TestCustomize.test_complex_type_name_clashesN)r%   r&   r'   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r.   r.   r.   r/   r  z  s     	
r  c                   @   rT  )TestAdditionalc                 C   sV   t d}|js
J |jtddddksJ |jtdddd	ks$J |js)J d S )
Nz![11:12:13.123456,14:15:16.789012]   rZ      i@          i
 )r   from_stringstart_inclusivestartrg   timeendend_inclusiverR   r  r.   r.   r/   test_time_segment_  s
   

z TestAdditional.test_time_segmentc                 C   sZ   t d}|jdksJ |jtdddksJ |jtdddks$J |jdks+J d S )Nz[2016-03-03,2016-05-07[T     rT   r1  F)r   r  r	  r
  rg   dater  r  r  r.   r.   r/   test_date_segmentg  s
   
z TestAdditional.test_date_segmentc              
   C   sj   t d}|jdksJ |jtdddddddksJ |jtdd	d
ddddks,J |jdks3J d S )Nz7]2016-03-03T10:20:30.405060,2016-05-07T00:01:02.030405]Fr  r  r        iD. rT   r1  r   ru   r   iv  T)r   r  r	  r
  rg   r  r  r  r.   r.   r/   test_datetime_segmento  s
   
  z$TestAdditional.test_datetime_segmentN)r%   r&   r'   r  r  r  r.   r.   r.   r/   r  ^  s    r  __main__)P
__future__r   rh   rg   unittestr   lxmlr   base64r   decimalr   rR  r  r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   spyne.constr   spyne.errorr   spyne.interfacer   spyne.interface.wsdlr   spyne.model.addtlr   r   r   spyne.protocolr   spyne.protocol.soapr   spyne.server.nullr   spyne.protocol.dictdocr    spyne.protocol.xmlr!   
spyne.testr"   rc   r$   ry   r%   r0   r7   r;   r?   rA   rB   TestCaserG   r   r   r   r   r   r   r   r  r0  rU  ro  r  r  r  mainr.   r.   r.   r/   <module>   sp   D 'DQ0o5 -% e
