B
    Ý¡ŒX¶  ã               @   sø   d Z ddlmZmZ ddlZddlmZ ddlmZ	 ddlm
Z
 ddlmZ erZddlZn$dd	lmZ dd
lmZ ddlmZ ddlmZmZmZmZ dZdd„ Zer²eƒ \ZZZG dd„ deƒZe ZZeeee	eƒ\ZZZeZdddddddgZdS )z%Defused xml.etree.ElementTree facade
é    )Úprint_functionÚabsolute_importN)ÚTreeBuilder)Úparse)Útostringé   )ÚPY3)Ú	XMLParser)Ú	iterparse)Ú
ParseError)ÚDTDForbiddenÚEntitiesForbiddenÚExternalReferenceForbiddenÚ_generate_etree_functionszxml.etree.ElementTreec              C   s~   d} d}t j | d¡}t j |d¡}dt j|< t | ¡}|dk	rL|t j|< nt j |¡ |t j| < |j}|j}|j}|||fS )z„Python 3.3 hides the pure Python code but defusedxml requires it.

    The code is based on test.support.import_fresh_module().
    zxml.etree.ElementTreeZ_elementtreeN)ÚsysÚmodulesÚpopÚ	importlibÚimport_moduler	   r
   r   )Z	pymodnameZcmodnameZpymodZcmodZ
pure_pymodÚ
_XMLParserÚ
_iterparser   © r   ú5lib/python3.7/site-packages/defusedxml/ElementTree.pyÚ_get_py3_cls    s    


r   c               @   s6   e Zd Zddd„Zdd„ Zd	d
„ Zdd„ Zdd„ ZdS )ÚDefusedXMLParserr   NFTc             C   sj   t  | |||¡ || _|| _|| _tr.| j}n| j}| jrB| j|_	| jrX| j
|_| j|_| jrf| j|_d S )N)r   Ú__init__Ú
forbid_dtdÚforbid_entitiesÚforbid_externalr   ÚparserZ_parserÚdefused_start_doctype_declZStartDoctypeDeclHandlerÚdefused_entity_declZEntityDeclHandlerÚdefused_unparsed_entity_declZUnparsedEntityDeclHandlerÚ#defused_external_entity_ref_handlerZExternalEntityRefHandler)ÚselfZhtmlÚtargetÚencodingr   r   r   r   r   r   r   r   @   s    zDefusedXMLParser.__init__c             C   s   t |||ƒ‚d S )N)r   )r$   ÚnameÚsysidÚpubidZhas_internal_subsetr   r   r   r    T   s    z+DefusedXMLParser.defused_start_doctype_declc             C   s   t ||||||ƒ‚d S )N)r   )r$   r'   Zis_parameter_entityÚvalueÚbaser(   r)   Únotation_namer   r   r   r!   X   s    z$DefusedXMLParser.defused_entity_declc             C   s   t |d ||||ƒ‚d S )N)r   )r$   r'   r+   r(   r)   r,   r   r   r   r"   \   s    z-DefusedXMLParser.defused_unparsed_entity_declc             C   s   t ||||ƒ‚d S )N)r   )r$   Úcontextr+   r(   r)   r   r   r   r#   a   s    z4DefusedXMLParser.defused_external_entity_ref_handler)r   NNFTT)Ú__name__Ú
__module__Ú__qualname__r   r    r!   r"   r#   r   r   r   r   r   >   s     
r   ÚXMLÚXMLParseÚXMLTreeBuilderÚ
fromstringr
   r   r   )Ú__doc__Z
__future__r   r   r   Zxml.etree.ElementTreer   Z_TreeBuilderr   Ú_parser   Úcommonr   r   r	   r   r
   r   r   r   r   r   r   Z
__origin__r   r   r3   r2   r4   r1   Ú__all__r   r   r   r   Ú<module>   s0   
)
