U
    jÕÕjÄ  ã                   @   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-xc2j09cz/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   