o
    ~e                     @   s^   d dl mZ 	 d dlmZ d dlmZ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tostringc                   @   s   e Zd ZdS )LxmlSyntaxErrorN)__name__
__module____qualname__ r
   r
   BD:\Projects\ConvertPro\env\Lib\site-packages\et_xmlfile/xmlfile.pyr      s    r   c                   @   sF   e Zd ZdZdd ZedddZdd Zd	d
 Zdd Z	dd Z
dS )_FakeIncrementalFileWriterz_Replacement for _IncrementalFileWriter of lxml.
       Uses ElementTree to build xml in memory.c                 C   s   g | _ d | _|| _d| _d S )NF)_element_stack_top_element_file
_have_root)selfoutput_filer
   r
   r   __init__   s   
z#_FakeIncrementalFileWriter.__init__Nc                 k   s    d| _ |du r
i }t|fd|i|| _d| j_d| j_| j| j dV  | j }| jr?| jd }|| j || _dS | | d| _dS )zCreate a new xml element using a context manager.
        The elements are written when the top level context is left.

        This is for code compatibility only as it is quite slow.
        TNattrib )	r   r   r   texttailr   appendpop_write_element)r   tagr   Znsmap_extraelparentr
   r
   r   element   s    	




z"_FakeIncrementalFileWriter.elementc                 C   s   t |tr*| jdu rt t| jdkr| j j|7  _dS | jd  j|7  _dS | jdur7| j| dS | jsA| 	| dS t )zWrite a string or subelement.Nr   r   )

isinstancestrr   r   lenr   r   r   r   r   )r   argr
   r
   r   write5   s   


z _FakeIncrementalFileWriter.writec                 C   s   t |}| j| d S N)r   r   r%   )r   r    xmlr
   r
   r   r   L   s   z)_FakeIncrementalFileWriter._write_elementc                 C   s   d S r&   r
   r   r
   r
   r   	__enter__P   s   z$_FakeIncrementalFileWriter.__enter__c                 C   s   | j st d S r&   )r   r   r   typevalue	tracebackr
   r
   r   __exit__S   s   z#_FakeIncrementalFileWriter.__exit__)NN)r   r   r	   __doc__r   r   r    r%   r   r)   r.   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.FNc                 C   s0   t |trt|d| _d| _d S || _|| _d S )NwbT)r!   r"   openr   _close)r   r   bufferedencodingcloser
   r
   r   r   [   s
   


zxmlfile.__init__c                 C   s
   t | jS r&   )r   r   r(   r
   r
   r   r)   c   s   
zxmlfile.__enter__c                 C   s   | j dkr| j  d S d S )NT)r3   r   r6   r*   r
   r
   r   r.   f   s   
zxmlfile.__exit__)FNF)r   r   r	   r/   r   r)   r.   r
   r
   r
   r   r0   Y   s
    
r0   N)
__future__r   
contextlibr   Zxml.etree.ElementTreer   r   	Exceptionr   objectr   r0   r
   r
   r
   r   <module>   s    I