o
    òT·jL  ã                   @   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   úR/home/dinkstrade/pdmp-scanner/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 )zµCheck 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.   ý+


	