B
    eAdp!                 @   s   d Z ddlmZ yddlmZ ddlmZ W n, ek
rX   ddlmZ ddl	mZ Y nX 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   E/var/www/html/venv/lib/python3.7/site-packages/lxml/ElementInclude.pyr	   K   s   r	   c               @   s   e Zd ZdS )LimitedRecursiveIncludeErrorN)r
   r   r   r   r   r   r   r   O   s   r   Nc             C   sH   t | d}|dkr"t| }n| }|s2d}||}|  |S )Nrbxmlz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| kr,t| }n
t| d}| }|  |sNd}||}|S )Nr   z://r   zutf-8)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 krd}n|dk r"t d| |d kr^t| drB| }|  } n|  }t|drp|jj}nt| drp|  } t| ||| d S )Nr   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 k	rt |}nt}|d kr$t }|  j}t| t}x|D ]}|jt	krt
||d}	|dd}
| }|
dkr"|	|krtd|	 |dkrtd|	 ||	|
|d}|d krtd|	|
f t|||	|d	 |	h|B }|jr|jpd
|j |_|d kr|S ||| n|
dkr||	|
|dd}|d krZtd|	|
f | }|d k	r|jpvd
| |_n,|d kr|S |jpd
| |jpd
 |_|| ntd|
 qD|jtkr | }|d k	r|jt	krtd|j qDtd|j qDW | 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getpreviousr0   removeXINCLUDE_FALLBACK)r*   r    r+   r,   Z_parent_hrefsZload_includer   Zinclude_elementser   r   parentnoder0   Zpredecessorr   r   r   r)      sh    









r)   )N)NN)__doc__Zlxmlr   urlparser   urllib2r   ImportErrorurllib.parseurllib.requestZXINCLUDEr6   r;   r4   ZDEFAULT_MAX_INCLUSION_DEPTHZLxmlSyntaxErrorr	   r   r   r   r"   r   r)   r   r   r   r   <module>3   s*   

