U
    ~fh                     @   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-veh5255l/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rd}| 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