3 h>`P? @s ddlmZdddddddd d d d d dg ZddlZddlTddlZddlZddlmZddl Tddl Tddl m Z m Z eddZddZddZddZddZddZddZddZdd Zdd Zdd Zdd Zd d ZGd!d"d"eZe eGd#ddeZdS)$)absolute_importstring_to_xmlnodestring_to_cdata_xmlnodevalidate_database_docbooleanxml_attributesxml_attribute_dictxml_child_elements_iterxml_child_elementsxml_get_child_element_by_namexml_get_child_elements_by_namexml_child_element_namesxml_has_child_elements XmlSerializeN)*) get_config) add_metaclass string_typesZgeneral i18n_encodingcCsZ|dkrtddS|j}|dkr0tddS|jd}|dkrNtddSt|SdS)Nz3validate_database_doc: doc is empty, validate failsFz4validate_database_doc: root is empty, validate failsversionz7validate_database_doc: version is empty, validate fails) log_debuggetRootElementpropZdatabase_version_compatible)doc root_noderr#/usr/lib/python3.6/xml_serialize.pyr>s cCsht|tr|St|trF|j}|d kr,dS|d kr8dStd |nt|trXt|Std |d S) zconvert value to boolttrue1Tffalse0Fzcannot convert (%s) to booleanN)rrr)r r!r") isinstanceboolrlower ValueErrorint)valuerrrrNs   cCstjt|S)N)libxml2ZnewTextstr)rr(rrrr`scCs|j|t|S)N)Z newCDataBlocklen)rr(rrrrdsccs0|j}x"|r*|j|jfV|j}q WdS)N)Zget_propertiesget_nameZ get_contentget_next)noderrrrrtscCs&i}xt|D]\}}|||<qW|S)N)r)r.Zpropsnamer(rrrr{s ccs0|j}x"|r*|jdkr |V|j}q WdS)Nelement) get_childrenget_typer-)r.childrrrr s  cCs:|j}x,|r4|jdkr*|j|kr*|S|j}q WdS)Nr0)r1r2r,r-)r.r/r3rrrr s   cCsDg}|j}x2|r>|jdkr4|j|kr4|j||j}qW|S)Nr0)r1r2r,appendr-)r.r/elementsr3rrrr s    cCs tt|S)N)listr )r.rrrr scCsddt|DS)NcSsg|] }|jqSr)r,).0errr sz+xml_child_element_names..)r )r.rrrr scCs.|j}x |r(|jdkrdS|j}q WdS)Nr0TF)r1r2r-)r.r3rrrrs   cs$eZdZddZfddZZS)XmlSerializeMetaDatacs|dkrtj||||S|jd|jdd|jdddkrjx&|D]}|jjdddk rHPqHWnfdd}||d<tj||||S)Nr__init__init_from_xml_node_init_postprocesscsJt|dkr.wrapped_init)type__new__get__dict__)cls classnamebases classdictZbase_clsrDr)r=rBrCrrFs    zXmlSerializeMetaData.__new__cstt|j||||jds&dSdkr6d|_njd|_fddtjD|_fddtjD|_|j|j|_ |jj |jj |j j dS)N _xml_info unstructuredTFcs g|]}|ddkr|qS)XMLFormr0r)r7x)xml_inforrr9sz1XmlSerializeMetaData.__init__..cs g|]}|ddkr|qS)rOZ attributer)r7rP)rQrrr9s) superr:r;rG _unstructuredr6keys _elements _attributes_namessort)rIrJrKrL) __class__)rQrr;s   zXmlSerializeMetaData.__init__)__name__ __module__ __qualname__rFr; __classcell__rr)rYrr:sr:c@sreZdZddZddZddZddZdd d Zdd d ZdddZ dddZ dddZ dddZ dddZ d S)rcCs |jdS)N)_init_defaults)selfrrrr;szXmlSerialize.__init__cCs|jS)N)get_xml_text_doc)r_rrr__str__szXmlSerialize.__str__cCst|jdkrdSx`|jD]V}|j|}|jdd}|dk rHt|||q|jdr`t||gqt||dqWdS)NrNdefaultr6)rMrWrGsetattr)r_r/ name_inforbrrrr^s     zXmlSerialize._init_defaultscCs8|jr$ddt|jjD}g}n |j}|j}||fS)NcSsg|]}|jds|qS)_) startswith)r7rPrrrr9sz.)rSr6rHrTrUrV)r_r5 attributesrrrget_elements_and_attributess z(XmlSerialize.get_elements_and_attributesNcCs$tjd}|j||}|j||S)Nz1.0)r)ZnewDoc get_xml_nodesZsetRootElement)r_obj_namerrootrrr get_xml_docs   zXmlSerialize.get_xml_docc Cs<d}}z|j|}|jtdd}Wd|dk r6|jX|S)Nr?)encodingformat)rlZ serializerfreeDoc)r_rjrZtext_docrrrr`s  zXmlSerialize.get_xml_text_doccCs|d}z`y&tj|j}|j}|j||Wn4tjk r`}ztjtjd|dSd}~XnXWd|dk rv|jXdS)Nz"read_xml() libxml2.parserError: %s) r)ZparseDocstriprr< parserErrorsyslogLOG_ERRro)r_Zbufrjrrr8rrrread_xmlszXmlSerialize.read_xmlcCsd}zy*tj|}|r"||s"dS|j||Wndtjk rd}ztjtjd|dSd}~Xn2tk r}ztjtjd|dSd}~XnXWd|dk r|jXdS)NFz'read_xml_file() libxml2.parserError: %szread_xml_file() error: %sT)r)Z parseFiler<rqrrrs Exceptionro)r_ZxmlfilerjZ validate_docrr8rrr read_xml_file&s"  zXmlSerialize.read_xml_filecCsyfd}|dkrtj}n2t|tr0t|d}d}nt|trsJ      5