a ap!@sdZddlmZzddlmZddlmZWn*eyVddlmZddl mZYn0dZ e dZ e dZ e dZ d ZGd d d ejZGd d d eZdddZdddZddZddefddZddedfddZdS)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}includefallback*c@s eZdZdS)FatalIncludeErrorN__name__ __module__ __qualname__rr9/usr/lib64/python3.9/site-packages/lxml/ElementInclude.pyr Ksr c@s eZdZdS)LimitedRecursiveIncludeErrorNr rrrrrOsrNcCsHt|d}|dkr"t|}n|}|s2d}||}||S)Nrbxmlutf-8)openrparsegetrootreaddecodeclose)hrefrencodingfiledatarrrdefault_loader`s  rcCs\|dkrt||}n>d|vr,t|}n t|d}|}||sNd}||}|S)Nrz://rr)rrrrrrrr)rrrparserrfrrr_lxml_default_loaderqs   r!csdfdd }|S)Ncs |||S)Nr)rrrrloaderrrloadsz_wrap_et_loader..load)NNr)r#r$rr"r_wrap_et_loadersr%cCs|durd}n|dkr"td||dur^t|drB|}|}n|}t|drp|jj}nt|drp|}t||||dS)Nrz;expected non-negative depth or None for 'max_depth', got %rrdocinfo) ValueErrorhasattrr getroottreer'ZURL_include)elemr#base_url max_depthZtreerrrrs      cCs|durt|}nt}|dur$t}|j}t|t}|D]}|jt krt || d} | dd} | } | dkr"| |vrt d| |dkrtd| || | |d} | durt d| | ft| || |d | h|B} |jr| jpd |j| _| dur| S| || n| d kr|| | | d d } | durZt d| | f|}|dur|jpvd | |_n0| dur| S| jpd | |jpd | _| |n t d| q@|jtkr| } | dur| jt krt d|jq@t d|jq@|S)Nrrrz recursive include of %r detectedrz5maximum xinclude depth reached when including file %s)rzcannot load %r as %rtextr)rz)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*rlistiterXINCLUDE_ITER_TAGtagXINCLUDE_INCLUDErgetZ getparentr rr+tailreplaceZ getpreviousr1removeXINCLUDE_FALLBACK)r,r#r-r.Z _parent_hrefsZ load_includerZinclude_elementserrparentZnoder1Z predecessorrrrr+sx               r+)N)NN)__doc__ZlxmlrurlparserZurllib2r ImportError urllib.parseZurllib.requestZXINCLUDEr7r<r5ZDEFAULT_MAX_INCLUSION_DEPTHZLxmlSyntaxErrorr rrr!r%rr+rrrr,s.