o
    ùj,7  ã                   @   s@  d Z ddlZe e¡ZddlmZ ddlm	Z	m
Z
 ddlmZ ddlmZmZmZ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mZ ddlmZ ddlm Z  e ƒ Z!eee"dgƒee"g d¢ƒee"g d¢ƒee"g d¢ƒiƒZ#dd„ Z$dd„ Z%dd„ Z&dd„ Z'dd„ Z(dd„ Z)dd„ Z*e)Z+dd „ Z,e ƒ Z-d!d"„ Z.dS )#zcThe ``spyne.interface.xml_schema.model`` module contains type-specific logic
for schema generation.é    N©ÚDecimal)ÚdequeÚdefaultdict)Úetree)Ú	ModelBaseÚXmlAttributeÚAnyXmlÚUnicodeÚXmlDatar   ÚInteger)ÚNS_XSDÚXSD)Úmemoize)Úcdict)Údict_to_etree)Ústring_types)ÚXmlDocumentÚvalues)ÚpatternÚgtÚgeÚltÚler   Útotal_digitsÚfraction_digits)r   r   r   r   r   r   r   )r   Úmin_lenÚmax_lenr   c                 C   sj   |  d|¡ |  d| j |j¡¡ | jd ur|  d| j¡ | jjj}|d ur3|  dt | j|¡¡ d S d S )NÚnameÚtypeÚuseÚdefault)	Úsetr   Úget_type_name_nsÚ	interfaceÚ_useÚ
Attributesr!   Ú_protÚ
to_unicode)Úclsr   ÚelementÚdocumentÚd© r-   ú`/var/www/html/LicenciasMiG/venv/lib/python3.10/site-packages/spyne/interface/xml_schema/model.pyÚxml_attribute_add7   s   

ÿr/   c           
      C   s¶   | j }|j}| j}tdd„ t| jƒD ƒƒ}tdd„ t|jƒD ƒƒ}tƒ }||B D ]}t||dƒt||dƒkr;| |¡ q(t|  }d}	|durY|}	t||@ ƒdkrR|S |j }|dusF|	S )zFMake sure only customizations that need a restriction tag generate onec                 S   ó   g | ]	}|  d ¡s|‘qS ©Ú_©Ú
startswith©Ú.0Úkr-   r-   r.   Ú
<listcomp>L   ó    z*_check_extension_attrs.<locals>.<listcomp>c                 S   r0   r1   r3   r5   r-   r-   r.   r8   M   r9   Nr   )Ú__extends__r&   r"   ÚvarsÚgetattrÚaddÚ
ATTR_NAMESÚlen)
r)   ÚextendsÚeattrsÚcattrsÚckeysÚekeysÚdiffr7   Ú
attr_namesÚretvalr-   r-   r.   Ú_check_extension_attrsD   s&   
€ürH   c                 C   sš   t |ƒ}|d u r
d S t tdƒ¡}| d| ¡ ¡ |  ||¡ t |tdƒ¡}| d| | j	¡¡ |j
jD ]}t |tdƒ¡}| dtƒ  ||¡¡ q5|S )NÚ
simpleTyper   ÚrestrictionÚbaseÚenumerationÚvalue)rH   r   ÚElementr   r"   Úget_type_nameÚadd_simple_typeÚ
SubElementr#   r$   r&   r   r   r(   )r+   r)   r@   Úsimple_typerJ   ÚvrL   r-   r-   r.   Úsimple_get_restriction_taga   s   rT   c                 C   s   |  |¡s|  |¡ d S d S ©N)Ú
is_defaultÚget_restriction_tag©r+   r)   Útagsr-   r-   r.   Ú
simple_addu   s   
ÿrZ   c                 C   s   t | ||ƒ d S rU   )rZ   rX   r-   r-   r.   Úbyte_array_addy   ó   r[   c           "      C   s.  t  tdƒ¡}| d| ¡ ¡ | ¡ }|s|jjd urmt  |tdƒ¡}|r0t  |tdƒ¡}||_	|jj}|d urmt  |tdƒ¡}t
|tƒrKt||ƒ n"t
|tƒrT||_	nt
|t jƒr`| |¡ nddlm}	 | |	|ƒ¡ |}
t|dd ƒ}|j}|d urÀ| ¡ | ¡ krš| ¡ | ¡ krštd	||| ¡ | ¡ f ƒ‚|jjr¤| |¡}nt  |td
ƒ¡}t  |tdƒ¡}| d| | j¡¡ |}
|jjd uré|jjD ]\}}t  |
tdƒ¡}t  |tdƒ¡}|j | j¡|jd< qÊt  tdƒ¡}tƒ }tdd„ ƒ}|  ¡ D ]+\}}t
|tƒs
J ‚t!|t"ƒsJ ‚|j}|jrqýt!|t#ƒr!qýt!|t$ƒr/| ||f¡ qý|  %||¡ |j&}|d u r?|}| | j¡}|j'd ur_|j(d ur_t)|ƒd u r_|j( | j¡}t  |j*¡}|j*tdƒkrz| d|¡ | d|¡ n2|j*tdƒkr£t!|t+ƒr£|j,d ur•| d|j,¡ |j-d ur¢| d|j-¡ n	t.d||j*f ƒ‚|j/dkr»| dt0|j/ƒ¡ |j1dkrÜ|j1}|t2dƒt3dƒfv rÒd}nt0|ƒ}| d|¡ |j4d urí| dt5 6||j4¡¡ t7|j8ƒdkrû| dd¡ | ¡ }|rt  |tdƒ¡}t  |tdƒ¡}||_	|j9d u r!| |¡ qý||j9  |¡ qý| :| ;¡ ¡ t<|ƒdkr=|
 |¡ tƒ }|D ]&\}}t  td ƒ¡}t=|||| ƒ |jjd u rb|
 |¡ qB| |¡ qB|  >||¡ |jj&pw| ¡ } t  tdƒ¡}!|! d| ¡ |! d| | j¡¡ |  ?||!¡ d S )!NÚcomplexTyper   Ú
annotationÚdocumentationÚappinfor   )Úget_object_as_xmlr:   z1%r can't extend %r because they are both '{%s}%s'ÚcomplexContentÚ	extensionrK   ÚsimpleContentÚsequencec                   S   s   t  tdƒ¡S )NÚchoice)r   rN   r   r-   r-   r-   r.   Ú<lambda>¹   s    zcomplex_add.<locals>.<lambda>r*   r   ÚanyÚ	namespaceÚprocessContentsz.Unhandled schema_tag / type combination. %r %ré   Ú	minOccursÚinfÚ	unboundedÚ	maxOccursr!   FÚnillableÚtrueÚ	attribute)@r   rN   r   r"   rO   Úget_documentationÚAnnotationsr`   rQ   ÚtextÚ
isinstanceÚdictr   r   Ú_ElementÚappendÚspyne.util.xmlra   r<   Ú
_type_infoÚget_namespaceÚ	Exceptionr&   Úexc_interfaceÚget_simple_type_infor#   r$   Ú_xml_tag_body_asr   Úattribr   r   ÚitemsÚ
issubclassr   r   r   r=   Úsub_namer:   Ú__orig__rH   Ú
schema_tagr	   ri   Úprocess_contentsÚ
ValueErrorÚ
min_occursÚstrÚ
max_occursÚDÚfloatr!   r'   r(   Úboolrp   Úxml_choice_groupÚextendr   r?   r/   Úadd_complex_typeÚadd_element)"r+   r)   rY   Úcomplex_typeÚdoc_textr^   ÚdocÚ_air`   ra   Úsequence_parentr@   Ú	type_infoÚcomplex_contentrc   Úxtba_keyÚ	xtba_typeÚ_scÚxtba_extre   ÚdeferredÚchoice_tagsr7   rS   Úar   Útype_name_nsÚmemberÚvalÚ
v_doc_textÚ_ext_elementsrr   Úcomplex_type_namer*   r-   r-   r.   Úcomplex_add}   sä   

ÿÿÿ
€ÿ
r§   c                 C   s~   t  tdƒ¡}| d| ¡ ¡ t  |tdƒ¡}| dd| j t¡ ¡ |j	D ]}t  |tdƒ¡}| d|¡ q&|  
||¡ d S )NrI   r   rJ   rK   z	%s:stringrL   rM   )r   rN   r   r"   rO   rQ   r$   Úget_namespace_prefixr   Ú
__values__rP   )r+   r)   rY   rR   rJ   rS   rL   r-   r-   r.   Úenum_add  s   
ÿ
rª   c                 C   sè   t | |ƒ}|d u rd S |jj|jjkr&t |tdƒ¡}| dt|jjƒ¡ n4|jjt	jjkr@t |tdƒ¡}| dt|jjƒ¡ |jjt	jjkrZt |tdƒ¡}| dt|jjƒ¡ |jj
t	jj
krrt |tdƒ¡}| d|jj
¡ |S )NÚlengthrM   Ú	minLengthÚ	maxLengthr   )rT   r&   r   r   r   rQ   r   r"   rŠ   r
   r   )r+   r)   rJ   r«   Úmin_lÚmax_lr   r-   r-   r.   Úunicode_get_restriction_tag0  s    
r°   c                    s|   ddl m} ddl m} tˆ |ƒr1‡ fdd„‰‡ fdd„‰tˆ |ƒr)‡fdd	„‰n‡‡fd
d	„‰ndd	„ ‰‡ ‡fdd„}|S )z‚The get_range_restriction template function. Takes a primitive, returns
    a function that generates range restriction tags.
    r   r   )r   c                    ó@   |j jˆ j jkrt |tdƒ¡}| d|  ||j j¡¡ d S d S )NÚfractionDigitsrM   )r&   r   r   rQ   r   r"   r(   ©ÚprotrJ   r)   Úelt©ÚTr-   r.   Ú_get_float_restrictionsW  ó   
ÿþz;Tget_range_restriction_tag.<locals>._get_float_restrictionsc                    r±   )NÚtotalDigitsrM   )r&   r   r   rQ   r   r"   r(   r³   r¶   r-   r.   Ú_get_integer_restrictions]  r¹   z=Tget_range_restriction_tag.<locals>._get_integer_restrictionsc                    s   ˆ | ||ƒ d S rU   r-   ©r´   rJ   r)   )r»   r-   r.   Ú_get_additional_restrictionsd  r\   z@Tget_range_restriction_tag.<locals>._get_additional_restrictionsc                    s   ˆ| ||ƒ ˆ | ||ƒ d S rU   r-   r¼   )r¸   r»   r-   r.   r½   h  s   c                 S   s   d S rU   r-   r¼   r-   r-   r.   r½   m  s   c                    s6  t | |ƒ}|d u rd S |jjˆ jjkr't |tdƒ¡}| dt ||jj¡¡ |jj	ˆ jj	krCt |tdƒ¡}| dt ||jj	¡¡ |jj
ˆ jj
kr_t |tdƒ¡}| dt ||jj
¡¡ |jjˆ jjkr{t |tdƒ¡}| dt ||jj¡¡ |jjˆ jjkr“t |tdƒ¡}| d|jj¡ ˆt||ƒ |S )NÚminExclusiverM   ÚminInclusiveÚmaxExclusiveÚmaxInclusiver   )rT   r&   r   r   rQ   r   r"   r´   r(   r   r   r   r   )r+   r)   rJ   rµ   )r·   r½   r-   r.   Ú_get_range_restriction_tagp  s(   
z>Tget_range_restriction_tag.<locals>._get_range_restriction_tag)Úspyne.model.primitiver   r   rƒ   )r·   r   r   rÂ   r-   )r·   r½   r¸   r»   r.   ÚTget_range_restriction_tagN  s   

rÄ   )/Ú__doc__ÚloggingÚ	getLoggerÚ__name__ÚloggerÚdecimalr   rŒ   Úcollectionsr   r   Úlxmlr   Úspyne.modelr   r   r	   r
   r   r   Úspyne.const.xmlr   r   Ú
spyne.utilr   Úspyne.util.cdictr   Úspyne.util.etreeconvr   Úspyne.util.sixr   Úspyne.protocol.xmlr   r'   r"   r>   r/   rH   rT   rZ   r[   r§   rª   Ú	fault_addr°   r´   rÄ   r-   r-   r-   r.   Ú<module>   s@   
$
û #