B
    ݡX                 @   s~   d Z ddlZejd dk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G dd deZ	dd Z
dd ZdS )z1Common constants, exceptions and helpe functions
    N   c               @   s   e Zd ZdZdd ZdS )DefusedXmlExceptionzBase exception
    c             C   s   t | S )N)str)self r   0lib/python3.7/site-packages/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 forbidden
    c                s$   t t|   || _|| _|| _d S )N)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   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 forbidden
    c                s6   t t|   || _|| _|| _|| _|| _|| _d S )N)	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   r   r   r   r   1   s    zEntitiesForbidden.__str__)r	   r
   r   r   r   r   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 )ExternalReferenceForbiddenz1Resolving an external reference is forbidden
    c                s*   t t|   || _|| _|| _|| _d S )N)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   r   A   s    z"ExternalReferenceForbidden.__str__)r	   r
   r   r   r   r   r   r   r   )r   r   r   6   s   r   c               @   s   e Zd ZdZdS )NotSupportedErrorz#The operation is not supported
    N)r	   r
   r   r   r   r   r   r   r   F   s   r   c             C   s~   | t j| j kst| j}t|i i dg t j| }tt|}x8t| 	 D ](\}}|
dsN||krjqNt||| qNW |S )N*_)sysmodulesr	   AssertionErrorZ
__origin__
__import__setdirvarsitems
startswithsetattr)Zdefused_modZstdlib_nameZ
stdlib_modZstdlib_namesr   objr   r   r   _apply_defusingK   s    
r,   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parserr.   r/   r0   )DefusedXMLParser_TreeBuilder_parser   r   parse]   s    z(_generate_etree_functions.<locals>.parsec                s&   |d kr  |||d}| ||S )N)r-   r.   r/   r0   r   )r1   Zeventsr2   r.   r/   r0   )r3   r4   
_iterparser   r   	iterparsef   s    z,_generate_etree_functions.<locals>.iterparsec                s$     |||d}| |  | S )N)r-   r.   r/   r0   )Zfeedclose)textr.   r/   r0   r2   )r3   r4   r   r   
fromstringo   s    
z-_generate_etree_functions.<locals>.fromstring)NFTT)NNFTT)FTTr   )r3   r4   r5   r7   r6   r8   r;   r   )r3   r4   r7   r5   r   _generate_etree_functionsX   s       r<   )r   r!   version_infoZPY3
ValueErrorr   r   r   r   r   r,   r<   r   r   r   r   <module>   s   