U
    .R”i  ã                   @   sh   d dl mZ d dlmZ d dlmZmZ ddlmZ G dd„ de	ƒZ
G dd	„ d	eƒZG d
d„ deƒZdS )é    )Úabsolute_import)Úcontextmanager)ÚElementÚ_escape_cdataé   )Úincremental_treec                   @   s   e Zd ZdS )ÚLxmlSyntaxErrorN)Ú__name__Ú
__module__Ú__qualname__© r   r   ú6/tmp/pip-unpacked-wheel-26y9xpxt/et_xmlfile/xmlfile.pyr      s   r   c                   @   s>   e Zd ZdZdd„ Zeddd„ƒZdd„ Zd	d
„ Zdd„ Z	dS )Ú_IncrementalFileWriterz.Replacement for _IncrementalFileWriter of lxmlc                 C   s&   g | _ || _d| _t ¡ | _d| _d S )NF)Ú_element_stackÚ_fileÚ
_have_rootr   Zcurrent_global_nsmapÚglobal_nsmapÚis_html)ÚselfÚoutput_filer   r   r   Ú__init__   s
    
z_IncrementalFileWriter.__init__Nc                 k   s  |rBd|krBd|kr,|d |d kr,t dƒ‚| ¡ }| d¡|d< d| _|dkrTi }t|fd|i|—Ž}d|_d|_| jr�d}| jd \}}}	nd}i }d}i }	tj	| j
||| jd| j||	||d�
\}}}}	}
| j |||	f¡ dV  | j ¡  |  
d	|› d
�¡ |j�r|  
t|jƒ¡ dS )z1Create a new xml element using a context manager.NÚ z?Found None and "" as default nsmap prefixes with different URIsTÚattribFéÿÿÿÿ)Únsmap_scoper   Úshort_empty_elementsr   Úis_rootÚuri_to_prefixÚdefault_ns_attr_prefixZ	new_nsmapz</ú>)Ú
ValueErrorÚcopyÚpopr   r   ÚtextÚtailr   r   Zwrite_elem_startr   r   r   Úappendr   )r   Útagr   ZnsmapZ_extraÚelemr   r   r   r   Znext_remains_rootr   r   r   Úelement   sl    ÿüýöúýÿ
z_IncrementalFileWriter.elementc                 C   sŠ   t |tƒr&| jstƒ ‚|  t|ƒ¡ n`| js8| jr8tƒ ‚| jrTd}| jd \}}}nd}i }d}i }tj| j||| j	d| j
|||d�	 dS )zWrite a string or subelement.Fr   TN)r   r   r   r   r   r   r   )Ú
isinstanceÚstrr   r   r   r   r   r   Z_serialize_ns_xmlr   r   )r   Úargr   r   r   r   r   r   r   Úwrite_   s:    
üý÷z_IncrementalFileWriter.writec                 C   s   d S ©Nr   )r   r   r   r   Ú	__enter__„   s    z _IncrementalFileWriter.__enter__c                 C   s   | j stƒ ‚d S r-   )r   r   ©r   ÚtypeÚvalueÚ	tracebackr   r   r   Ú__exit__‡   s    z_IncrementalFileWriter.__exit__)NN)
r	   r
   r   Ú__doc__r   r   r(   r,   r.   r3   r   r   r   r   r      s   @%r   c                   @   s*   e Zd ZdZddd„Zdd„ Zdd	„ Zd
S )Úxmlfilez4Context manager that can replace lxml.etree.xmlfile.Fúutf-8c                 C   s   || _ || _|| _d | _d S r-   )r   Ú_closeÚencodingÚ	writer_cm)r   r   Zbufferedr8   Úcloser   r   r   r   �   s    zxmlfile.__init__c                 C   s*   t j| j| jd�| _| j ¡ \}}t|ƒS )N)r8   )r   Ú_get_writerr   r8   r9   r.   r   )r   ÚwriterÚdeclared_encodingr   r   r   r.   •   s    zxmlfile.__enter__c                 C   s*   | j r| j  |||¡ | jr&| j ¡  d S r-   )r9   r3   r7   r   r:   r/   r   r   r   r3   š   s    zxmlfile.__exit__N)Fr6   F)r	   r
   r   r4   r   r.   r3   r   r   r   r   r5   �   s   
r5   N)Ú
__future__r   Ú
contextlibr   Úxml.etree.ElementTreer   r   r   r   Ú	Exceptionr   Úobjectr   r5   r   r   r   r   Ú<module>   s   x