
    E0j                     D    d dl mZ d dlmZ d dlmZ  G d d          ZdS )    )ElementTree)	DaraModel)defaultdictc                       e Zd ZeeefZedd            Zed             Z	ed             Z
ed             Zedd            Zed             ZdS )	XMLNc                 ,   |d S t          |t                    rt                              | |           d S t          |t          j                  r/|t          d          t                              | ||           d S t          |          | _        d S )NzMissing root tag)	
isinstancedictr   _XML__get_xml_by_dict
_LIST_TYPERuntimeError_XML__get_xml_by_liststrtext)elemvalparent_elements      [/home/rurouni/.hermes/hermes-agent/venv/lib/python3.11/site-packages/darabonba/utils/xml.py__get_xml_factoryzXML.__get_xml_factory	   s    ;Fc4   	!!!$,,,,,S^,, 	!%"#5666!!$^<<<<<CDIII    c                 ~    |D ]9}t          j        | |          }t                              |||         |            :d S N)r   
SubElementr   _XML__get_xml_factory)r   r   ksub_elems       r   __get_xml_by_dictzXML.__get_xml_by_dict   sL     	: 	:A"-dA66H!!(CFD9999	: 	:r   c                    d}| j         }|                                dk    r"t                              | |d         |           |D ]>}|dk    r1t	          j        ||          }t                              |||           |dz   }?d S )Nr      )tag__len__r   r   r   r   )r   r   r   itag_nameitemr   s          r   __get_xml_by_listzXML.__get_xml_by_list   s    8;;==1!!$A??? 	 	D1uu&1.(KK%%hnEEEAAA		 	r   c                 ~   | j         | j        ri nd i}t          |           }|rt          t                    }t	          t
          j        |          D ]7}|                                D ] \  }}||                             |           !8| j         d |                                D             i}| j        rA|| j                  	                    d | j                                        D                        | j
        r?| j
                                        }|s| j        r|r||| j                  d<   n
||| j         <   |S )Nc                 P    i | ]#\  }}|t          |          d k    r|d         n|$S )r   r   )len.0r   vs      r   
<dictcomp>z"XML._parse_xml.<locals>.<dictcomp>3   s4    NNN41aCFFaKKAaDDQNNNr   c              3   *   K   | ]\  }}d |z   |fV  dS )@N r)   s      r   	<genexpr>z!XML._parse_xml.<locals>.<genexpr>6   s.      FFTQS1WaLFFFFFFr   z#text)r    attriblistr   mapr   
_parse_xmlitemsappendupdater   strip)tdchildrendddcr   r+   r   s           r   r4   zXML._parse_xml*   s>   U!(,BB-77 	PT""B#.(33 $ $HHJJ $ $DAqqELLOOOO$NN288::NNNOA8 	GaeHOOFFQX^^5E5EFFFFFF6 	 6<<>>D  18   -(,AaeHW%!%r   c                 Z    t                               t          j        |                     S )z
        Parse body into the response, and put the resposne into a object
        @param body: source content
        @param response: target model
        @return the final object
        )r   r4   r   
fromstring)bodyresponses     r   	parse_xmlzXML.parse_xmlA   s!     ~~k4T::;;;r   c                    | dS i }t          | t                    r|                                 }nt          | t                    r| }|                                dk    rdS d}|D ]h}t          j        |          }t                              |||                    |t          
                    t          j        |          d          z  }i|S )zl
        Parse body as a xml string
        @param body: source body
        @return the xml string
        Nr    z&<?xml version="1.0" encoding="utf-8"?>zutf-8)encoding)r	   r   to_mapr
   r!   r   Elementr   r   bytesdecodetostring)r@   dic
result_xmlr   r   s        r   to_xmlz
XML.to_xmlK   s     <FdI&& 	++--CCd## 	C;;==A2AJ Y Y"*1--%%dCF333ell;+?+E+EPWlXXX

r   r   )__name__
__module____qualname__r2   tuplesetr   staticmethodr   r   r   r4   rB   rM   r/   r   r   r   r      s        s#J! ! ! \! : : \:
 
 
 \
   \, < < < \<   \  r   r   N)	xml.etreer   darabonba.modelr   collectionsr   r   r/   r   r   <module>rW      sw    ! ! ! ! ! ! % % % % % % # # # # # #^ ^ ^ ^ ^ ^ ^ ^ ^ ^r   