U ep!@sdZddlmZzddlmZddlmZWn,ek rXddlmZddl mZYnXdZ 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__rrC/opt/hc_python/lib64/python3.8/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|kr,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|dkrd}n|dkr"td||dkr^t|drB|}|}n|}t|drp|jj}nt|drp|}t||||dS)Nrz;expected non-negative depth or None for 'max_depth', got %rrdocinfo) ValueErrorhasattrr getroottreer'URL_include)elemr#base_url max_depthtreerrrrs      cCs|dk rt|}nt}|dkr$t}|j}t|t}|D]}|jt krt || d} | dd} | } | dkr"| |krt d| |dkrtd| || | |d} | dkrt d| | ft| || |d | h|B} |jr| jpd |j| _| dkr| S| || n| d kr|| | | d d } | dkrZt d| | f|}|dk r|jpvd | |_n0| dkr| S| jpd | |jpd | _| |n t d| q@|jtkr| } | dk r| 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 getpreviousr3removeXINCLUDE_FALLBACK)r-r#r.r/Z _parent_hrefsZ load_includerZinclude_elementserrparentnoder3Z predecessorrrrr,sx               r,)N)NN)__doc__Zlxmlrurlparserurllib2r ImportError urllib.parseurllib.requestZXINCLUDEr9r>r7ZDEFAULT_MAX_INCLUSION_DEPTHZLxmlSyntaxErrorr rrr!r%rr,rrrr,s0