a
    «Á‚b„  ã                   @   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
   úb/Users/vegardjervell/Documents/master/model/venv/lib/python3.9/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rz| jd }| | j¡ || _n|  |¡ 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   ZnsmapÚ_extraÚelÚparentr
   r
   r   Úelement   s    	


z"_FakeIncrementalFileWriter.elementc                 C   s„   t |tƒrP| jdu rtƒ ‚t| jƒdkr:| j j|7  _q€| jd  j|7  _n0| jdurh| j |¡ n| jsz|  	|¡ ntƒ ‚dS )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   s.   t |tƒrt|dƒ| _d| _n|| _|| _d S )NÚwbT)r!   r"   Úopenr   Ú_close)r   r   Z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 )NT)r3   r   r5   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   Úxml.etree.ElementTreer   r   Ú	Exceptionr   Úobjectr   r0   r
   r
   r
   r   Ú<module>   s
   I