U
    muf                     @   s~   d Z ddlmZmZ ddlmZ ddlmZ ddl	m
Z
mZmZ dZG dd	 d	eZG d
d deeZdddZdddZdS )zDefused xml.dom.expatbuilder
    )print_functionabsolute_import)ExpatBuilder)
Namespaces   )DTDForbiddenEntitiesForbiddenExternalReferenceForbiddenzxml.dom.expatbuilderc                   @   sB   e Zd ZdZdddZdd Zd	d
 Zdd Zdd Zdd Z	dS )DefusedExpatBuilderzDefused document builderNFTc                 C   s"   t | | || _|| _|| _d S N)_ExpatBuilder__init__
forbid_dtdforbid_entitiesforbid_external)selfoptionsr   r   r    r   ;/tmp/pip-unpacked-wheel-d6x4jz3i/defusedxml/expatbuilder.pyr      s    zDefusedExpatBuilder.__init__c                 C   s   t |||d S r   )r   )r   namesysidpubidZhas_internal_subsetr   r   r   defused_start_doctype_decl   s    z.DefusedExpatBuilder.defused_start_doctype_declc                 C   s   t ||||||d S r   r   )r   r   is_parameter_entityvaluebaser   r   notation_namer   r   r   defused_entity_decl    s    z'DefusedExpatBuilder.defused_entity_declc                 C   s   t |d ||||d S r   r   )r   r   r   r   r   r   r   r   r   defused_unparsed_entity_decl%   s    z0DefusedExpatBuilder.defused_unparsed_entity_declc                 C   s   t ||||d S r   )r	   )r   contextr   r   r   r   r   r   #defused_external_entity_ref_handler)   s    z7DefusedExpatBuilder.defused_external_entity_ref_handlerc                 C   sB   t | | | jr| j|_| jr0| j|_| j|_	| j
r>| j|_d S r   )r   installr   r   StartDoctypeDeclHandlerr   r   EntityDeclHandlerr   UnparsedEntityDeclHandlerr   r!   ExternalEntityRefHandlerr   parserr   r   r   r"   ,   s    zDefusedExpatBuilder.install)NFTT)
__name__
__module____qualname____doc__r   r   r   r   r!   r"   r   r   r   r   r
      s          
r
   c                   @   s    e Zd ZdZdd Zdd ZdS )DefusedExpatBuilderNSz2Defused document builder that supports namespaces.c                 C   s    t | | | jjr| j|_d S r   )r
   r"   _optionsZnamespace_declarationsZstart_namespace_decl_handlerStartNamespaceDeclHandlerr'   r   r   r   r"   <   s    zDefusedExpatBuilderNS.installc                 C   s   t |  |   d S r   )r
   resetZ_initNamespaces)r   r   r   r   r0   A   s    
zDefusedExpatBuilderNS.resetN)r)   r*   r+   r,   r"   r0   r   r   r   r   r-   9   s   r-   TFc           	      C   sZ   |r
t }nt}||||d}t| trLt| d}z||}W 5 |  X n
|| }|S )z{Parse a document, returning the resulting Document node.

    'file' may be either a file name or an open file object.
    r   r   r   rb)r-   r
   
isinstancestropenclose	parseFile)	file
namespacesr   r   r   build_builderbuilderfpresultr   r   r   parseF   s      


r>   c                 C   s&   |r
t }nt}||||d}|| S )zOParse a document from a string, returning the resulting
    Document node.
    r1   )r-   r
   parseString)stringr9   r   r   r   r:   r;   r   r   r   r?   ^   s      r?   N)TFTT)TFTT)r,   
__future__r   r   Zxml.dom.expatbuilderr   r   r   Z_Namespacescommonr   r   r	   
__origin__r
   r-   r>   r?   r   r   r   r   <module>   s   '
       