o
    eL                     @   s   d Z ddlmZmZ ddlZddlZddlmZ ddl	m
Z
mZmZ ejd dkZdZejZejd	ed
d G dd dejZG dd dejZe ZejZdddZdddZdddZeZdd ZdS )zkDEPRECATED Example code for lxml.etree protection

The code has NO protection against decompression bombs.
    )print_functionabsolute_importN)etree   )DTDForbiddenEntitiesForbiddenNotSupportedError   z
lxml.etreezOdefusedxml.lxml is no longer supported and will be removed in a future release.   )category
stacklevelc                       s   e Zd ZdZdZejZdd Z fddZ	d fd	d
	Z
d fdd	Zd fdd	Zd fdd	Z fddZd fdd	Z  ZS )RestrictedElementzEA restricted Element class that filters out instances of some classes c                 c   s(    | j }|D ]}t||rq|V  qd S N)	blacklist
isinstance)selfiteratorr   childr   r   B/var/www/html/venv/lib/python3.10/site-packages/defusedxml/lxml.py_filter(   s   
zRestrictedElement._filterc                    s   t t|  }| |S r   )superr   __iter__r   r   r   	__class__r   r   r   /   s   
zRestrictedElement.__iter__NFc                       t t| j||d}| |S )N)tagreversed)r   r   iterchildrenr   )r   r   r   r   r   r   r   r   3      
zRestrictedElement.iterchildrenc                        t t| j|d|i}| |S Nr   )r   r   iterr   r   r   tagsr   r   r   r   r#   7      
zRestrictedElement.iterc                    r!   r"   )r   r   iterdescendantsr   r$   r   r   r   r'   ;   r&   z!RestrictedElement.iterdescendantsc                    r   )N)r   	preceding)r   r   itersiblingsr   )r   r   r(   r   r   r   r   r)   ?   r    zRestrictedElement.itersiblingsc                    s   t t|  }t| |S r   )r   r   r   listr   r   r   r   r   getchildrenC   s   zRestrictedElement.getchildrenc                    s   t t| |}| |S r   )r   r   getiteratorr   )r   r   r   r   r   r   r,   G   s   
zRestrictedElement.getiterator)NFr   )__name__
__module____qualname____doc__	__slots___etree_Entityr   r   r   r   r#   r'   r)   r+   r,   __classcell__r   r   r   r   r   !   s    r   c                   @   s4   e Zd ZdZddiZeZdd Zdd Zdd	 Z	d
S )GlobalParserTLSz0Thread local context for custom parser instancesresolve_entitiesFc                 C   s<   t jdi | j}| j}| jd urt j|d}|| |S )N)elementr   )r2   	XMLParserparser_configelement_classElementDefaultClassLookupset_element_class_lookup)r   parserr:   lookupr   r   r   createDefaultParserW   s   

z#GlobalParserTLS.createDefaultParserc                 C   s
   || _ d S r   )_default_parserr   r=   r   r   r   setDefaultParser_   s   
z GlobalParserTLS.setDefaultParserc                 C   s*   t | dd }|d u r|  }| | |S )Nr@   )getattrr?   rB   rA   r   r   r   getDefaultParserb   s
   
z GlobalParserTLS.getDefaultParserN)
r-   r.   r/   r0   r9   r   r:   r?   rB   rD   r   r   r   r   r5   L   s    r5   FTc              	   C   s|   | j }|jr|rt|j|j|j|rtstd|r:|j|jfD ]}|du r(q!|	 D ]}t
|j|jddddq!dS dS )zCheck docinfo of an element tree for DTD and entity declarations

    The check for entity declarations needs lxml 3 or newer. lxml 2.x does
    not support dtd.iterentities().
    z3Unable to check for entity declarations in lxml 2.xN)docinfodoctyper   
system_url	public_idLXML3r   internalDTDexternalDTDiterentitiesr   namecontent)elementtree
forbid_dtdforbid_entitiesrE   dtdentityr   r   r   check_docinfon   s   rT   c                 C   s.   |d u rt  }tj| ||d}t||| |S N)base_url)rD   r2   parserT   )sourcer=   rV   rP   rQ   rO   r   r   r   rW      s
   rW   c                 C   s6   |d u rt  }tj| ||d}| }t||| |S rU   )rD   r2   
fromstringgetroottreerT   )textr=   rV   rP   rQ   rootelementrO   r   r   r   rY      s   rY   c                  O   s   t d)Nz*defused lxml.etree.iterparse not available)r   )argskwargsr   r   r   	iterparse   s   r_   )FT)NNFT)r0   
__future__r   r   	threadingwarningslxmlr   r2   commonr   r   r   LXML_VERSIONrI   
__origin__tostringwarnDeprecationWarningElementBaser   localr5   _parser_tlsrD   rT   rW   rY   XMLr_   r   r   r   r   <module>   s.   +


	