o
    øBU„  ã                   @   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
   úD/var/www/html/env/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 )zÁCreate 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