o
    پi
                  	   @   s   d Z ddlmZmZmZmZmZ ddlmZ ej	Z
ddedeee  deeef fdd	Zd
e
dee deeeef ee f fddZdeeef defddZdedeeef de
fddZdS )z+
Slightly faster replacement for xmltodict
    )OptionalAnySetUnionDict)etreeNdocumentrepeated_tagsreturnc                 C   s.   |du rt  }t| }t||d}|j|iS )zU
    Convert an XML document to a dictionary, like xmltodict.parse but with lxml
    N)r	   )setr   
fromstring_recursive_dicttag)r   r	   rootchildren r   A/home/ubuntu/.local/lib/python3.10/site-packages/blobfile/_xml.pyparse   s
   

r   elemc                 C   s   t | dkr	| jS t }i }| D ]2}|j|v r'||jg }|t|| q|j|vs4J d|j ||j t||||j< q|S )Nr   z6Found repeated tag that was not in repeated_tags set: )lentextr   r   
setdefaultappendr   add)r   r	   	seen_tagsresultchild
child_listr   r   r   r      s   

r   datac                 C   sN   t |  }t|dksJ d| t|d | |d  }dtj|dd S )zY
    Convert a dictionary into an XML document, like xmltodict.unparse but with lxml
       z%Must be only one root element, found r   s'   <?xml version="1.0" encoding="utf-8"?>
utf8)encoding)listkeysr   _create_treer   tostring)r   	root_keysr   r   r   r   unparse*   s   r'   namec                 C   s   t | }| D ]f\}}t|tr|t|| q	t|trO|D ]+}t|tr7t |}||_	|| q"t|trE|t|| q"J dt
| q	t|tsZ|d u sZJ t |}|d u rgd|_	n||_	|| q	|S )NFzInvalid value item type:  )r   Elementitems
isinstancedictr   r$   r"   strr   type)r(   r   r   kvitemser   r   r   r$   6   s*   







r$   )N)__doc__typingr   r   r   r   r   lxmlr   _Elementr*   bytesr.   r   r   r'   r$   r   r   r   r   <module>   s    (."