o
    f                     @   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
   K/home/ubuntu/webapp/venv/lib/python3.10/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   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)r4   r   r7   r+   r
   r
   r   r/   f   s   
zxmlfile.__exit__)FNF)r   r   r	   r0   r   r*   r/   r
   r
   r
   r   r1   Y   s
    
r1   N)
__future__r   
contextlibr   xml.etree.ElementTreer   r   	Exceptionr   objectr   r1   r
   r
   r
   r   <module>   s    I