U
    muf                     @   s   d Z ddlZddlZejd dkZeejjds8e	dG dd de
ZG dd	 d	eZG d
d deZG dd deZG dd deZdd Zdd ZdS )z1Common constants, exceptions and helpe functions
    N   ParserCreateZpyexpatc                   @   s   e Zd ZdZdd ZdS )DefusedXmlExceptionzBase exceptionc                 C   s   t | S N)str)self r   5/tmp/pip-unpacked-wheel-d6x4jz3i/defusedxml/common.py__repr__   s    zDefusedXmlException.__repr__N)__name__
__module____qualname____doc__r
   r   r   r   r	   r      s   r   c                       s(   e Zd ZdZ fddZdd Z  ZS )DTDForbiddenz%Document type definition is forbiddenc                    s$   t t|   || _|| _|| _d S r   )superr   __init__namesysidpubid)r   r   r   r   	__class__r   r	   r      s    zDTDForbidden.__init__c                 C   s   d}| | j| j| jS )Nz7DTDForbidden(name='{}', system_id={!r}, public_id={!r})formatr   r   r   r   Ztplr   r   r	   __str__"   s    zDTDForbidden.__str__r   r   r   r   r   r   __classcell__r   r   r   r	   r      s   r   c                       s(   e Zd ZdZ fddZdd Z  ZS )EntitiesForbiddenzEntity definition is forbiddenc                    s6   t t|   || _|| _|| _|| _|| _|| _d S r   )	r   r   r   r   valuebaser   r   notation_name)r   r   r   r   r   r   r    r   r   r	   r   *   s    zEntitiesForbidden.__init__c                 C   s   d}| | j| j| jS )Nz<EntitiesForbidden(name='{}', system_id={!r}, public_id={!r})r   r   r   r   r	   r   3   s    zEntitiesForbidden.__str__r   r   r   r   r	   r   '   s   	r   c                       s(   e Zd ZdZ fddZdd Z  ZS )ExternalReferenceForbiddenz,Resolving an external reference is forbiddenc                    s*   t t|   || _|| _|| _|| _d S r   )r   r!   r   contextr   r   r   )r   r"   r   r   r   r   r   r	   r   ;   s
    z#ExternalReferenceForbidden.__init__c                 C   s   d}| | j| jS )Nz8ExternalReferenceForbidden(system_id='{}', public_id={}))r   r   r   r   r   r   r	   r   B   s    z"ExternalReferenceForbidden.__str__r   r   r   r   r	   r!   8   s   r!   c                   @   s   e Zd ZdZdS )NotSupportedErrorzThe operation is not supportedN)r   r   r   r   r   r   r   r	   r#   G   s   r#   c                 C   sz   | t j| j kst| j}t|i i dg t j| }tt|}t| 	 D ](\}}|
dsL||krhqLt||| qL|S )N*_)sysmodulesr   AssertionError
__origin__
__import__setdirvarsitems
startswithsetattr)Zdefused_modZstdlib_nameZ
stdlib_modZstdlib_namesr   objr   r   r	   _apply_defusingK   s    
r2   c                    s>   d
 fdd	}d fdd	}d fdd		}|||fS )zdFactory for functions needed by etree, dependent on whether
    cElementTree or ElementTree is used.NFTc                    s$   |d kr  |||d}| |S N)target
forbid_dtdforbid_entitiesforbid_externalr   )sourceparserr5   r6   r7   )DefusedXMLParser_TreeBuilder_parser   r	   parse\   s    z(_generate_etree_functions.<locals>.parsec                    s&   |d kr  |||d}| ||S r3   r   )r8   eventsr9   r5   r6   r7   )r:   r;   
_iterparser   r	   	iterparsef   s    z,_generate_etree_functions.<locals>.iterparsec                    s$     |||d}| |  | S r3   )feedclose)textr5   r6   r7   r9   )r:   r;   r   r	   
fromstringw   s    
z-_generate_etree_functions.<locals>.fromstring)NFTT)NNFTT)FTTr   )r:   r;   r<   r?   r=   r@   rD   r   )r:   r;   r?   r<   r	   _generate_etree_functionsX   s         
rE   )r   r&   xml.parsers.expatxmlversion_infoPY3hasattrparsersexpatImportError
ValueErrorr   r   r   r!   r#   r2   rE   r   r   r   r	   <module>   s   