U
    dL                     @   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   3/tmp/pip-unpacked-wheel-n91_q4n5/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                    s   t t| j||d}| |S )N)tagreversed)r   r   iterchildrenr   )r   r   r   r   r   r   r   r   3   s    zRestrictedElement.iterchildrenc                    s    t t| j|d|i}| |S Nr   )r   r   iterr   r   r   tagsr   r   r   r   r    7   s    zRestrictedElement.iterc                    s    t t| j|d|i}| |S r   )r   r   iterdescendantsr   r!   r   r   r   r#   ;   s    z!RestrictedElement.iterdescendantsc                    s   t t| j||d}| |S )N)r   	preceding)r   r   itersiblingsr   )r   r   r$   r   r   r   r   r%   ?   s    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)NF)N)N)NF)N)__name__
__module____qualname____doc__	__slots___etreeZ_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   s8   t jf | j}| j}| jd k	r4t j|d}|| |S )N)element)r.   	XMLParserparser_configelement_classZElementDefaultClassLookupZset_element_class_lookup)r   parserr5   lookupr   r   r   createDefaultParserW   s    

z#GlobalParserTLS.createDefaultParserc                 C   s
   || _ d S r   )_default_parserr   r6   r   r   r   setDefaultParser_   s    z GlobalParserTLS.setDefaultParserc                 C   s*   t | dd }|d kr&|  }| | |S )Nr9   )getattrr8   r;   r:   r   r   r   getDefaultParserb   s
    
z GlobalParserTLS.getDefaultParserN)
r)   r*   r+   r,   r4   r   r5   r8   r;   r=   r   r   r   r   r0   L   s    r0   FTc              	   C   sz   | j }|jr2|r"t|j|j|j|r2ts2td|rv|j|jfD ]2}|dkrPqB|	 D ]}t
|j|jddddqXqBd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   Z
system_url	public_idLXML3r   ZinternalDTDZexternalDTDZiterentitiesr   namecontent)elementtree
forbid_dtdforbid_entitiesr>   Zdtdentityr   r   r   check_docinfon   s    rH   c                 C   s.   |d krt  }tj| ||d}t||| |S N)base_url)r=   r.   parserH   )sourcer6   rJ   rE   rF   rD   r   r   r   rK      s
    rK   c                 C   s6   |d krt  }tj| ||d}| }t||| |S rI   )r=   r.   
fromstringZgetroottreerH   )textr6   rJ   rE   rF   ZrootelementrD   r   r   r   rM      s    rM   c                  O   s   t dd S )Nz*defused lxml.etree.iterparse not available)r   )argskwargsr   r   r   	iterparse   s    rQ   )FT)NNFT)NNFT)r,   
__future__r   r   	threadingwarningslxmlr   r.   commonr   r   r   ZLXML_VERSIONrA   
__origin__tostringwarnDeprecationWarningZElementBaser   localr0   Z_parser_tlsr=   rH   rK   rM   XMLrQ   r   r   r   r   <module>   s,   +


	