o
    ùjÍ[  ã                   @   sR  d dl Z e  e¡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 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 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* ej+ddZ,e ƒ Z-G dd„ de.ƒZ/ddd„Z0e0ƒ e#_1e0ƒ Z2e0ddZ3G dd„ de.ƒZ4dS )é    N)Úcopy)Úpformat)Úchain)Údefaultdict)ÚdirnameÚabspathÚjoin)Úetree)Úmemoize)Úodict)ÚNullÚXmlDataÚXmlAttributeÚArrayÚComplexModelBaseÚComplexModelMeta)ÚXmlModifier)ÚXmlDocument)ÚTYPE_MAP)Ú
SchemaBase)ÚXmlSchema10)ÚRÚGÚBÚMAGÚYELT)Úremove_commentsc                   @   s   e Zd Zdd„ ZdS )Ú_Schemac                 C   s   i | _ i | _tƒ | _d S ©N)ÚtypesÚelementsÚsetÚimports)Úself© r$   úa/var/www/html/LicenciasMiG/venv/lib/python3.10/site-packages/spyne/interface/xml_schema/parser.pyÚ__init__=   s   z_Schema.__init__N)Ú__name__Ú
__module__Ú__qualname__r&   r$   r$   r$   r%   r   <   s    r   Fc                    sL   ˆdu r	dd„ ‰ nˆdu sˆdkrdd„ ‰ n‡fdd„‰ d‡ ‡fdd„	‰ˆS )zÍTemplate for ``hier_repr``, a ``repr`` variant that shows spyne
    ``ComplexModel``s in a hierarchical format.

    :param with_ns: either bool or a callable that returns the class name
    as string
    Fc                 S   s   |   ¡ S r   )Úget_type_name©Úcr$   r$   r%   Úget_class_nameN   s   z"Thier_repr.<locals>.get_class_nameTé   c                 S   s   d|   ¡ |  ¡ f S )Nú{%s}%s©Úget_namespacer*   r+   r$   r$   r%   r-   R   s   c                    s   ˆ |   ¡ |  ¡ ƒS r   r0   r+   ©Úwith_nsr$   r%   r-   V   s   r   ú  Nc                    s°  |d u rt ƒ }| j}t|dƒst| ƒS dˆ |ƒ }t| ƒ|v r!|S | t| ƒ¡ |d }|d }|dg}|jj}	|	d urct|	ƒ}	t	|	ƒ\}
}|
d ur]t
| |
d ƒ}| dˆ||||ƒ ¡ n| d¡ n| d¡ |  |¡ ¡ D ]Z\}}t
| |d ƒ}t|tƒs„|jjdkr²|d ur²| d|| |f ¡ |D ]}| d|| ˆ||||ƒf ¡ q•| d	||  ¡ qot|tƒr¸qo| d
|| |ˆ||||ƒf ¡ qo| d||  ¡ d |¡S )NÚ
_type_infoz%sr.   ú(z%s,
Ú
z%s%s=[
z%s%s,
z%s],
z	%s%s=%s,
z%s)Ú )r!   Ú	__class__ÚhasattrÚreprÚidÚaddÚ
AttributesÚ_xml_tag_body_asÚiterÚnextÚgetattrÚappendÚget_flat_type_infoÚitemsÚ
issubclassr   Ú
max_occursr   r   )ÚinstÚi0ÚIÚtagsÚclsÚclsidÚi1Úi2ÚretvalÚxtbaÚxtba_keyÚ	xtba_typeÚvalueÚkÚvÚsubval)r-   Ú	hier_reprr$   r%   rX   Y   sL   


ÿ

ÿ
zThier_repr.<locals>.hier_repr)r   r4   Nr$   r2   r$   )r-   rX   r3   r%   Ú
Thier_reprE   s   

3rY   r2   c                   @   s¾   e Zd Zdedddfdd„Zd+dd„Zd	d
„ Zdd„ Zdd„ Zdd„ Z	dd„ Z
d,dd„Zd,dd„Zd,dd„Zd,dd„Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd-d'd(„Zd)d*„ ZdS ).ÚXmlSchemaParserNFr2   c                 C   sv   i | _ d| _|| _|| _|| _| jd u rt ¡ | _d | _d | _d | _	d | _
d | _d | _d | _d | _|| _ttƒ| _d S )Nr   )rP   ÚindentÚfilesÚbase_dirr;   ÚosÚgetcwdÚparentÚchildrenÚnsmapÚschemaÚprefmapÚtnsÚpending_elementsÚpending_typesÚskip_errorsr   r!   Úpending_simple_types)r#   r\   r]   Úrepr_rh   r$   r$   r%   r&   •   s"   

zXmlSchemaParser.__init__r   c                 C   sf   t | ƒ}|jd u r| |_| jd u r|g| _n| j |¡ n|jj |¡ | j| |_|d ur1||_|S r   )r   r`   ra   rC   r[   r]   )r#   r[   r]   rP   r$   r$   r%   Úclone«   s   


zXmlSchemaParser.clonec                 O   s*   t jdd| j |f g|¢R i |¤Ž d S )Nú%s%sr4   ©ÚloggerÚdebugr[   ©r#   ÚsÚargsÚkwargsr$   r$   r%   Údebug0¾   s   *zXmlSchemaParser.debug0c                 O   ó.   t jdd| jd  |f g|¢R i |¤Ž d S )Nrl   r4   r.   rm   rp   r$   r$   r%   Údebug1Á   ó   .zXmlSchemaParser.debug1c                 O   ru   )Nrl   r4   é   rm   rp   r$   r$   r%   Údebug2Ä   rw   zXmlSchemaParser.debug2c                 C   s"   t jt|dƒ ¡ td}|  |¡S )NÚrb©Úparser)r	   Ú
fromstringÚopenÚreadÚPARSERÚparse_schema)r#   Ú	file_nameÚeltr$   r$   r%   Úparse_schema_fileÇ   s   
z!XmlSchemaParser.parse_schema_filec                 C   s0  |j }|d u r	d S |  d| j|¡ tt| j|ƒƒ}t|dƒ ¡ }tj|t	d}| j
 |j
¡ tdd„ | j
 ¡ D ƒƒ| _t d t|¡}|jrn|jD ]%}t|ƒ}| j|d}|  |¡ | j
 |j
¡ tdd„ | j
 ¡ D ƒƒ| _qHdD ]%}	t||	ƒ}
|
d u r}g }
t| j|	ƒ}|d u r‰g }| |
¡ t| j|	|ƒ qpd S )	Nzincluding %s %srz   r{   c                 S   ó   g | ]\}}||f‘qS r$   r$   ©Ú.0rU   rV   r$   r$   r%   Ú
<listcomp>Ö   ó    z4XmlSchemaParser.process_includes.<locals>.<listcomp>)r]   c                 S   r…   r$   r$   r†   r$   r$   r%   rˆ   ß   r‰   )r"   Úsimple_typesÚcomplex_typesr    )Úschema_locationrv   r]   r   r   r~   r   r	   r}   r€   rb   ÚupdateÚdictrE   rd   Ú_protÚfrom_elementr   Úincludesr   rk   Úprocess_includesrB   rc   ÚextendÚsetattr)r#   Úincluder‚   Údatarƒ   Ú
sub_schemaÚincr]   Ú	child_ctxÚattrÚsubÚownr$   r$   r%   r’   Ë   s6   



õz XmlSchemaParser.process_includesc                 C   sš   |j j}|d u r|  d|¡ d S |  |¡}|d u r/| j|  |¡  ||f¡ |  d||¡ d S |  d|¡ t|dd}||_| j	|_
| ¡ |jusKJ ‚|S )NzEskipping simple type: %s because its list itemType could not be foundz7pending  simple type list: %s because of unseen base %szadding   simple type list: %szsd-list)Úserialize_as)ÚlistÚ	item_typerv   Úget_typeri   Úget_namer=   r   Ú__type_name__re   Ú__namespace__r*   ÚEmpty)r#   rq   ÚnamerŸ   ÚbaserP   r$   r$   r%   Úprocess_simple_type_listî   s&   ÿ
ÿz(XmlSchemaParser.process_simple_type_listc                 C   s8  |j j}|d u r|  d|¡ d S |  |¡}|d u r/| j|  |¡  ||f¡ |  d||¡ d S |  d|¡ i }|j }|jrGdd„ |jD ƒ|d< |jrV|jj	rVt
|jj	ƒ|d< |jre|jj	ret
|jj	ƒ|d< |jrr|jj	rr|jj	|d	< |jd
i |¤Ž}||_| j|_|jd u r‰||_|jd u r‘||_| ¡ |jusšJ ‚|S )NzHskipping simple type: %s because its restriction base could not be foundz2pending  simple type: %s because of unseen base %szadding   simple type: %sc                 S   s   g | ]}|j ‘qS r$   )rT   ©r‡   Úer$   r$   r%   rˆ     s    zCXmlSchemaParser.process_simple_type_restriction.<locals>.<listcomp>ÚvaluesÚmax_lenÚmin_lenÚpatternr$   )Úrestrictionr¦   rv   r    ri   r¡   r=   ÚenumerationÚ
max_lengthrT   ÚintÚ
min_lengthr­   Ú	customizer¢   re   r£   Ú__orig__Ú__extends__r*   r¤   )r#   rq   r¥   Ú	base_namer¦   rs   r®   rP   r$   r$   r%   Úprocess_simple_type_restriction  sH   ÿ
ÿ

z/XmlSchemaParser.process_simple_type_restrictionc                 C   s   |   d|¡ d S )Nz;skipping simple type: %s because <union> is not implemented)rv   )r#   rq   r¥   r$   r$   r%   Úprocess_simple_type_union3  s   ÿz)XmlSchemaParser.process_simple_type_unionc                 C   s  d}|du r	|j }|jdur|  ||¡}n|jdur!|  ||¡}n|jdur,|  ||¡}|du r8|  d|¡ dS || j| j	 j
|j < |  |¡}| j| }t|ƒD ]&\}}|  ||¡}|durv|| j| j	 j
|j < |  d|j ¡ | ||f¡ qPt|ƒdkr| j|= |S )z6Returns the simple Spyne type from `<simpleType>` tag.Nzskipping simple type: %szadded back simple type: %sr   )r¥   rž   r§   Úunionr¸   r®   r·   rv   rP   re   r   r¡   ri   r!   Úprocess_simple_typery   ÚremoveÚlen)r#   rq   r¥   rP   ÚkeyÚ
dependentsÚstr$   r$   r%   rº   7  s2   




€z#XmlSchemaParser.process_simple_typec                 C   sj   |j d u rd S |  d|j ¡ |  |j¡}|r-|j | jv r!| j|j = || j| j j|j < d S || j|j < d S )Nzadding element: %s)r¥   rv   r    Útyperf   rP   re   r    )r#   r©   Útr$   r$   r%   Úprocess_schema_element\  s   

z&XmlSchemaParser.process_schema_elementc                 C   s  |j d ur|  |j ¡}|j ¡ |fS |jd ur!|jd ur!t|dƒ‚|jd ur9|  |j¡}|d u r8t|d|j ƒ‚n|jd urS|  |j|j¡}|d u rRt|d|j ƒ‚ntdƒ‚i }|j	d urgt
 ||j	¡|d< t|ƒdkr||jdi |¤Ž}|  d| ¡ |jt|ƒfS )	Nz&Both type and simple_type are defined.ztype %r not foundzsimple type %r not foundz
dunno attrÚdefaultr   zt = t.customize(**%r)r$   )Úrefr    rÀ   r*   Úsimple_typeÚ
ValueErrorrº   r¥   Ú	ExceptionrÃ   r   Úfrom_unicoder¼   r³   ry   r   )r#   ÚarÁ   rs   r$   r$   r%   Úprocess_attributel  s.   


ÿ
ÿ
z!XmlSchemaParser.process_attributec                    s†  d‡ ‡‡‡‡fdd„	‰‡‡fdd„}g ‰t }ˆjˆjˆj jv r(ˆ dˆj¡ nˆ dˆj¡ ˆjd uraˆjjd urEˆjjD ]‰|ˆƒ q>ˆjjd uraˆjjD ]}|jd ur`|jD ]‰|ˆƒ qYqOˆj	d urwˆj	jd urwˆj	jD ]‰|ˆƒ qpˆj
d ur˜ˆj
D ]‰ ˆ jd u r‡qˆ jd u rqˆˆ jˆ jtˆ d qˆjd urûˆj}|j}|j}|d urÇ|j}ˆ |j¡}	|j
d urÆ|j
D ]
‰ ˆ ˆ ˆ ¡¡ q»n&|d urè|j}ˆ |j¡}	|j
d urç|j
D ]
‰ ˆ ˆ ˆ ¡¡ qÜntd|ƒ‚t|	t ƒrõ|	}nˆ|d	tƒ ˆjˆjˆj jv rˆjˆj jˆj }
|
j ˆ¡ |
S tˆjˆjˆd
œƒ}ˆjd ur-ˆj|d< ttˆjƒ|f|ƒ}
|
ˆjˆj jˆj< |
S )Nc                    s†  |d u r	dd„ }n	t |tƒsJ |ƒ‚ˆ | ¡}ˆj|f}|d u r.ˆˆj|< ˆ d|| ¡ d S |ˆjv r7ˆj|= |d usAJ |ˆfƒ‚i }|d urˆjdkrStˆjƒ|d< ˆjdkr^ˆj|d< nˆjdkrjtˆjƒ|d< ˆj	d	krtˆj	|d
< ˆj
d ur‚t |ˆj
¡|d< t|ƒdkr|jdi |¤Ž}|d ur°|j
d ur¢t |ˆ j
¡|d< t|ƒdkr°|jdi |¤Ž}ˆ |||ƒf¡ ˆ d|| |¡ d S )Nc                 S   s   | S r   r$   )Úxr$   r$   r%   Ú<lambda>  s    zLXmlSchemaParser.process_complex_type.<locals>.process_type.<locals>.<lambda>znot found: %r(%s)Ú0Ú
min_occursÚ	unboundedrG   Ú1TÚnillablerÃ   r   z    found: %r(%s), c: %rr$   )rF   r   r    r¥   rg   ry   rÎ   r±   rG   rÑ   rÃ   r   rÈ   r¼   r³   rC   )Útnr¥   ÚwrapperÚelementÚ	attributerÁ   r½   rs   )rÉ   r,   r©   r#   Útir$   r%   Úprocess_type  sB   











z:XmlSchemaParser.process_complex_type.<locals>.process_typec                    sp   | j d ur| j }| j  dd¡d }n| jd ur+| j}| j}|d u r*ˆ d| j¡ d S ntdƒ‚ˆ ||| d d S )Nú:r.   éÿÿÿÿz  skipped: %s ur-typeÚdunno)rÔ   )rÄ   Úsplitr¥   rÀ   ry   rÇ   )r©   rÒ   r¥   )r×   r#   r$   r%   Úprocess_element¼  s   

ûz=XmlSchemaParser.process_complex_type.<locals>.process_elementzmodifying existing %rzadding complex type: %s)rÕ   zInvalid simpleContent tag: %rÚ_data)r¢   r£   r5   Ú__repr__)NNN)r   r¥   rP   re   r   rv   Úsequencer    ÚchoicesÚchoiceÚ
attributesrÀ   r   Úsimple_contentÚ	extensionr®   r¦   r    rC   rÊ   rÇ   rF   r   r5   r   r   r;   r   Ústr)r#   r,   rÜ   r¦   ÚchÚscÚextÚrestrr¶   ÚbÚrÚcls_dictr$   )rÉ   r,   r©   r×   r#   rÖ   r%   Úprocess_complex_typeŒ  s€   /




€








€

€

õý
z$XmlSchemaParser.process_complex_typec                 C   sŠ   |  d¡r|dd …  dd¡\}}||fS d|v r*| dd¡\}}| j| }||fS d | jv r;| jd  |}}||fS | j|}}||fS )NÚ{r.   Ú}rØ   )Ú
startswithrÛ   rb   re   )r#   rÒ   ÚnsÚqnr$   r$   r%   r¡      s   
ö

ûþzXmlSchemaParser.get_namec                 C   sÄ   |d u rt S |  |¡\}}| j |¡}|d urY|j |¡}|r!|S |j |¡}|rY|jr7d|jv r7|  |j¡S |  d||jf ¡}|d u rWd | jv rW|  d| jd  |jf ¡}|S t	 d||f ¡S )NrØ   r/   )
r   r¡   rP   Úgetr   r    rÀ   r    rb   r   )r#   rÒ   rñ   rò   rÖ   rÁ   r©   rP   r$   r$   r%   r    0  s&   ÿzXmlSchemaParser.get_typec                 C   sl   |   dt| jƒ¡ t| j ¡ ƒD ]\\}}}|  |¡ q|   dt| jƒ¡ | j ¡ D ]	\}}|  	|¡ q*d S )Nz%6 %s processing pending complex_typesz 7 %s processing pending elements)
rt   r   re   rž   rg   rE   rí   r   rf   rÂ   )r#   Úc_nameÚe_nameÚ_vÚ_kr$   r$   r%   Úprocess_pendingI  s   ÿzXmlSchemaParser.process_pendingc                 C   sî   t dd„ | j ¡ D ƒƒdk}t| jƒdkst| jƒdks|rs|r'tjtjd |  	d¡ |  	| j
¡ |  	d¡ |  	d¡ |  	t| jƒ¡ |  	d¡ |  	d¡ |  	t| jƒ¡ |  	d¡ |  	d	¡ |  	t| jƒ¡ |  	d¡ |rutd
ƒ‚d S d S )Nc                 s   ó    | ]}t |ƒV  qd S r   ©r¼   ©r‡   rV   r$   r$   r%   Ú	<genexpr>T  ó   € z0XmlSchemaParser.print_pending.<locals>.<genexpr>r   )Úlevelz2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%r8   r    zsimple typeszcomplex typesz#there are still unresolved elements)Úsumri   rª   r¼   rf   rg   ÚloggingÚbasicConfigÚDEBUGrt   re   r   rÇ   )r#   ÚfailÚptt_pendingr$   r$   r%   Úprint_pendingS  s,   ÿ







ëzXmlSchemaParser.print_pendingc                 C   sZ  t |j ¡ ƒ| _t dd„ | j ¡ D ƒƒ| _t | t|¡ | _}i | _i | _	|j
 | _}| jd u r5d | _}|| jv r<d S tƒ | j|< |  dt|ƒ¡ |jrX|jD ]}|  |¡ qP|jrftdd„ |jD ƒƒ|_|jrttdd„ |jD ƒƒ|_|jr‚tdd„ |jD ƒƒ|_|jrtdd„ |jD ƒƒ|_|  d	t|ƒ¡ |jrÊ|jD ]+}|j| jvrÉ|  d
||j¡ | j|j }|  dt|ƒ¡ |¡ | j| j |j¡ qž|  dt |ƒ¡ |jr÷|j !¡ D ]}|  "|¡ qÚt#dd„ | j$ !¡ D ƒƒdks÷J | j$ !¡ ƒ‚|  dt |ƒ¡ |jr|j !¡ D ]}|  %|¡\}}	|	| j| j j&|< q|  dt'|ƒ¡ |jr6|j !¡ D ]}
|  (|
¡ q-|  dt)|ƒ¡ |jrP|j !¡ D ]}|  *|¡ qG|  +¡  | j,d u rª| j-d urªt.| g| j-ƒD ]}
|
 /¡  qg|  d¡ t.| g| j-ƒD ]}
|
 +¡  q{t.| g| j-ƒD ]}
|
 +¡  qŠ|  d¡ t.| g| j-ƒD ]}
|
j/| j0 d qž| jS )Nc                 S   r…   r$   r$   r†   r$   r$   r%   rˆ   n  r‰   z0XmlSchemaParser.parse_schema.<locals>.<listcomp>Ú	__no_ns__z1 %s processing includesc                 S   ó   g | ]}|j |f‘qS r$   ©r¥   r¨   r$   r$   r%   rˆ     ó    c                 S   r  r$   r  )r‡   r,   r$   r$   r%   rˆ   ƒ  ó    ÿc                 S   r  r$   r  )r‡   rq   r$   r$   r%   rˆ   †  r
  c                 S   r  r$   r  )r‡   rÉ   r$   r$   r%   rˆ   ‰  r	  z2 %s processing importsz%s importing %srx   z3 %s processing simple_typesc                 s   rù   r   rú   rû   r$   r$   r%   rü   š  rý   z/XmlSchemaParser.parse_schema.<locals>.<genexpr>r   z4 %s processing attributesz5 %s processing complex_typesz6 %s processing elementsr8   )r  )1rŽ   rb   rE   rd   r   r   r   rc   rg   rf   Útarget_namespacere   rP   r   rt   r   r‘   r’   r    r   r‹   rŠ   râ   r   r"   Ú	namespacerv   r\   rk   r   r„   r=   r   rª   rº   rÿ   ri   rÊ   r   r   rí   r   rÂ   rø   r`   ra   r   r  rh   )r#   rƒ   rc   re   r•   ÚimpÚfnamerq   ÚnrÁ   r,   r©   r$   r$   r%   r   l  sŒ   




ÿ
ÿ
€ÿ

zXmlSchemaParser.parse_schema)r   Nr   ©F)r'   r(   r)   rY   r&   rk   rt   rv   ry   r„   r’   r§   r·   r¸   rº   rÂ   rÊ   rí   r¡   r    rø   r  r   r$   r$   r$   r%   rZ   ”   s.    

ÿ

#

.
%  

rZ   r  )5r   Ú	getLoggerr'   rn   r^   r   Úpprintr   Ú	itertoolsr   Úcollectionsr   Úos.pathr   r   r   Úlxmlr	   Ú
spyne.utilr
   Úspyne.util.odictr   Úspyne.modelr   r   r   r   r   r   Úspyne.model.complexr   Úspyne.protocol.xmlr   Úspyne.interface.xml_schema.defnr   r   r   Úspyne.util.colorr   r   r   r   r   Ú	XMLParserr€   r   Úobjectr   rY   rÞ   rX   Úhier_repr_nsrZ   r$   r$   r$   r%   Ú<module>   s4   
 
	I
