U ®Dx`„ ã@s\ddlmZddlmZddlmZmZGdd„deƒZGdd„de ƒZ Gdd „d e ƒZ d S) é)Úabsolute_import)Úcontextmanager)ÚElementÚtostringc@s eZdZdS)ÚLxmlSyntaxErrorN)Ú__name__Ú __module__Ú __qualname__©r r ú9/tmp/pip-target-zr53vnty/lib/python/et_xmlfile/xmlfile.pyr src@sFeZdZdZdd„Zeddd„ƒZdd„Zd d „Zd d „Z d d„Z dS)Ú_FakeIncrementalFileWriterz_Replacement for _IncrementalFileWriter of lxml. Uses ElementTree to build xml in memory.cCsg|_d|_||_d|_dS)NF)Ú_element_stackÚ _top_elementÚ_fileÚ _have_root)ÚselfÚ output_filer r r Ú__init__sz#_FakeIncrementalFileWriter.__init__NcksŽd|_|dkri}t|fd|i|—Ž|_d|j_d|j_|j |j¡dV|j ¡}|jrz|jd}| |j¡||_n| |¡d|_dS)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Úéÿÿÿÿ) rrrÚtextÚtailr ÚappendÚpopÚ_write_element)rÚtagrZnsmapZ_extraÚelÚparentr r r Úelements     z"_FakeIncrementalFileWriter.elementcCs„t|tƒrP|jdkrtƒ‚t|jƒdkr:|jj|7_q€|jdj|7_n0|jdk rh|j |¡n|jsz|  |¡ntƒ‚dS)zWrite a string or subelement.Nrr) Ú isinstanceÚstrrrÚlenrrrrr)rÚargr r r Úwrite5s    z _FakeIncrementalFileWriter.writecCst|ƒ}|j |¡dS©N)rrr$)rrÚxmlr r r rLsz)_FakeIncrementalFileWriter._write_elementcCsdSr%r ©rr r r Ú __enter__Psz$_FakeIncrementalFileWriter.__enter__cCs|js tƒ‚dSr%)rr©rÚtypeÚvalueÚ tracebackr r r Ú__exit__Ssz#_FakeIncrementalFileWriter.__exit__)NN) rrr Ú__doc__rrrr$rr(r-r r r r r s r c@s*eZdZdZd dd„Zdd„Zdd „ZdS) Úxmlfilez4Context manager that can replace lxml.etree.xmlfile.FNcCs.t|tƒrt|dƒ|_d|_n ||_||_dS)NÚwbT)r r!ÚopenrÚ_close)rrZbufferedÚencodingÚcloser r r r[s   zxmlfile.__init__cCs t|jƒSr%)r rr'r r r r(cszxmlfile.__enter__cCs|jdkr|j ¡dS)NT)r2rr4r)r r r r-fs zxmlfile.__exit__)FNF)rrr r.rr(r-r r r r r/Ys r/N) Ú __future__rÚ contextlibrÚxml.etree.ElementTreerrÚ ExceptionrÚobjectr r/r r r r Ús  I