a
    %ñ»jd"  ã                   @   sÜ   d Z ddlmZ zddlmZ ddlmZ W n* eyV   ddlmZ ddl	mZ Y n0 dZ
e
d Ze
d Ze
d Zd	ZG d
d„ dejƒZG dd„ deƒZddd„Zddd„Zdd„ Zddefdd„Zddedfdd„ZdS )a  
Limited XInclude support for the ElementTree package.

While lxml.etree has full support for XInclude (see
`etree.ElementTree.xinclude()`), this module provides a simpler, pure
Python, ElementTree compatible implementation that supports a simple
form of custom URL resolvers.
é    )Úetree)Úurljoin)Úurlopenz!{http://www.w3.org/2001/XInclude}ÚincludeÚfallbackÚ*é   c                   @   s   e Zd ZdS )ÚFatalIncludeErrorN©Ú__name__Ú
__module__Ú__qualname__© r   r   ú9E:\soccer\ml_env\Lib\site-packages\lxml/ElementInclude.pyr	   K   s   r	   c                   @   s   e Zd ZdS )ÚLimitedRecursiveIncludeErrorNr
   r   r   r   r   r   O   s   r   Nc                 C   sH   t | dƒ}|dkr"t |¡ ¡ }n| ¡ }|s2d}| |¡}| ¡  |S )NÚrbÚxmlúutf-8)Úopenr   ÚparseÚgetrootÚreadÚdecodeÚclose)Úhrefr   ÚencodingÚfileÚdatar   r   r   Údefault_loader`   s    

r   c                 C   s\   |dkrt  | |¡ ¡ }n>d| v r,t| ƒ}n
t| dƒ}| ¡ }| ¡  |sNd}| |¡}|S )Nr   z://r   r   )r   r   r   r   r   r   r   r   )r   r   r   Úparserr   Úfr   r   r   Ú_lxml_default_loaderq   s    


r!   c                    s   d‡ fdd„	}|S )Nc                    s   ˆ | ||ƒS )Nr   )r   r   r   r   ©Úloaderr   r   Úload…   s    z_wrap_et_loader.<locals>.load)NNr   )r#   r$   r   r"   r   Ú_wrap_et_loader„   s    r%   c                 C   s‚   |d u rd}n|dk r"t d| ƒ‚|d u r^t| dƒrB| }|  ¡ } n|  ¡ }t|dƒrp|jj}nt| dƒrp|  ¡ } t| |||ƒ d S )Néÿÿÿÿr   z;expected non-negative depth or None for 'max_depth', got %rr   Údocinfo)Ú
ValueErrorÚhasattrr   Úgetroottreer'   ÚURLÚ_include)Úelemr#   Úbase_urlÚ	max_depthÚtreer   r   r   r   œ   s    




c                 C   s  |d urt |ƒ}nt}|d u r$tƒ }|  ¡ j}t|  t¡ƒ}|D �]Ð}|jt	k�rÊt
|| d¡ƒ}	| dd¡}
| ¡ }|
dk�r"|	|v r”td|	 ƒ‚|dkr¨td|	 ƒ‚||	|
|d�}|d u rÎtd|	|
f ƒ‚t|||	|d	 |	h|B ƒ}|j�r|jpød
|j |_|d u �r|  S | ||¡ n¦|
dk�r¼||	|
| d¡d�}|d u �rZtd|	|
f ƒ‚| ¡ }|d u�r€|j�pvd
| |_n0|d u �r’|  S |j�pœd
| |j�pªd
 |_| |¡ ntd|
 ƒ‚q@|jtk�r| ¡ }|d u�r|jt	k�rtd|j ƒ‚q@td|j ƒ‚q@| S )Nr   r   r   z recursive include of %r detectedr   z5maximum xinclude depth reached when including file %s)r   zcannot load %r as %ré   Ú Útextr   )r   z)unknown parse type in xi:include tag (%r)z0xi:fallback tag must be child of xi:include (%r)z0Invalid element found in XInclude namespace (%r))r%   r!   Úsetr*   r   ÚlistÚiterÚXINCLUDE_ITER_TAGÚtagÚXINCLUDE_INCLUDEr   ÚgetZ	getparentr	   r   r,   ÚtailÚreplaceZgetpreviousr3   ÚremoveÚXINCLUDE_FALLBACK)r-   r#   r.   r/   Z_parent_hrefsZload_includer   Zinclude_elementsÚer   r   ÚparentÚnoder3   Zpredecessorr   r   r   r,   °   sx    

ÿ

ÿÿ
ÿ



ÿ

ÿÿÿr,   )N)NN)Ú__doc__Zlxmlr   Úurlparser   Úurllib2r   ÚImportErrorÚurllib.parseÚurllib.requestZXINCLUDEr9   r>   r7   ZDEFAULT_MAX_INCLUSION_DEPTHZLxmlSyntaxErrorr	   r   r   r!   r%   r   r,   r   r   r   r   Ú<module>,   s.   	

ÿ
ÿ