a ÖâÏhP?ã@söddlmZgd¢ZddlZddlTddlZddlZddlmZddl Tddl Tddl m Z m Z eddƒZd d „Zd d „Zd d„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd „ZGd!d"„d"eƒZe eƒGd#d$„d$eƒƒZdS)%é)Úabsolute_import) Ústring_to_xmlnodeÚstring_to_cdata_xmlnodeÚvalidate_database_docÚbooleanÚxml_attributesÚxml_attribute_dictÚxml_child_elements_iterÚxml_child_elementsÚxml_get_child_element_by_nameÚxml_get_child_elements_by_nameÚxml_child_element_namesÚxml_has_child_elementsÚ XmlSerializeN)Ú*)Ú get_config)Ú add_metaclassÚ string_typesZgeneralÚ i18n_encodingcCsZ|durtdƒdS| ¡}|dur0tdƒdS| d¡}|durNtdƒdSt|ƒSdS)Nz3validate_database_doc: doc is empty, validate failsFz4validate_database_doc: root is empty, validate failsÚversionz7validate_database_doc: version is empty, validate fails)Ú log_debugÚgetRootElementÚpropZdatabase_version_compatible)ÚdocÚ root_noder©rú@/usr/lib/python3.9/site-packages/setroubleshoot/xml_serialize.pyr>s rcCsht|tƒr|St|tƒrF| ¡}|dvr,dS|dvr8dStd|ƒ‚nt|tƒrXt|ƒStd|ƒ‚dS)zconvert value to bool)ÚtÚtrueÚ1T)ÚfZfalseÚ0Fzcannot convert (%s) to booleanN)Ú isinstanceÚboolrÚlowerÚ ValueErrorÚint)ÚvaluerrrrNs   rcCst t|ƒ¡S©N)Úlibxml2ZnewTextÚstr©rr'rrrr`srcCs| |t|ƒ¡Sr()Z newCDataBlockÚlenr+rrrrdsrccs,| ¡}|r(| ¡| ¡fV| ¡}qdSr()Zget_propertiesÚget_nameZ get_contentÚget_next)ÚnoderrrrrtsrcCs"i}t|ƒD]\}}|||<q |Sr()r)r/ZpropsÚnamer'rrrr{s rccs,| ¡}|r(| ¡dkr|V| ¡}qdS©NÚelement©Ú get_childrenÚget_typer.©r/Úchildrrrr ‚s  r cCs6| ¡}|r2| ¡dkr(| ¡|kr(|S| ¡}qdSr1)r4r5r-r.)r/r0r7rrrr Šs   r cCs@g}| ¡}|r<| ¡dkr2| ¡|kr2| |¡| ¡}q |Sr1)r4r5r-Úappendr.)r/r0Úelementsr7rrrr ”s    r cCs tt|ƒƒSr()Úlistr ©r/rrrr Ÿsr cCsdd„t|ƒDƒS)NcSsg|] }| ¡‘qSr)r-)Ú.0ÚerrrÚ ¤óz+xml_child_element_names..)r r;rrrr £sr cCs*| ¡}|r&| ¡dkrdS| ¡}qdS)Nr2TFr3r6rrrr§s   rcs$eZdZdd„Z‡fdd„Z‡ZS)ÚXmlSerializeMetaDatacs|dkrt ||||¡S| d¡‰| dd¡‰| dd¡‰ˆdurh|D]}|j dd¡‰ˆdurFqhqFn‡‡‡fdd„}||d<t ||||¡S)NrÚ__init__Úinit_from_xml_nodeÚ_init_postprocesscsRt|ƒdkr@t|dtjƒr@ˆ|i|¤ŽˆdurNˆ|dƒnˆ|i|¤ŽdS)Néér)r,r"r)ZxmlNode)ÚargsÚkwds©rCZ normal_initZxml_initrrÚ wrapped_initÈs z2XmlSerializeMetaData.__new__..wrapped_init)ÚtypeÚ__new__ÚgetÚ__dict__)ÚclsÚ classnameÚbasesÚ classdictZbase_clsrIrrHrrK´s   zXmlSerializeMetaData.__new__cs¤tt|ƒ |||¡| d¡‰ˆs&dSˆdkr6d|_njd|_‡fdd„tˆ ¡ƒDƒ|_‡fdd„tˆ ¡ƒDƒ|_|j|j|_ |j  ¡|j  ¡|j   ¡dS)NÚ _xml_infoÚ unstructuredTFcs g|]}ˆ|ddkr|‘qS)ÚXMLFormr2r©r<Úx©Zxml_inforrr>Þr?z1XmlSerializeMetaData.__init__..cs g|]}ˆ|ddkr|‘qS)rTZ attributerrUrWrrr>ßr?) Úsuperr@rArLÚ _unstructuredr:ÚkeysÚ _elementsÚ _attributesÚ_namesÚsort)rNrOrPrQ©Ú __class__rWrrAÓs   zXmlSerializeMetaData.__init__)Ú__name__Ú __module__Ú __qualname__rKrAÚ __classcell__rrr_rr@²sr@c@sreZdZdd„Zdd„Zdd„Zdd„Zdd d „Zdd d „Zddd„Z ddd„Z ddd„Z ddd„Z ddd„Z d S)rcCs | ¡dSr()Ú_init_defaults©ÚselfrrrrAêszXmlSerialize.__init__cCs| ¡Sr()Úget_xml_text_docrfrrrÚ__str__íszXmlSerialize.__str__cCsp|jdkrdS|jD]V}|j|}| dd¡}|durFt|||ƒƒq| d¡r^t||gƒqt||dƒqdS)NrSÚdefaultr:)rRr]rLÚsetattr)rgr0Ú name_inforjrrrreðs     zXmlSerialize._init_defaultscCs8|jr$dd„t|j ¡ƒDƒ}g}n |j}|j}||fS)NcSsg|]}| d¡s|‘qS)Ú_)Ú startswithrUrrrr>r?z.)rYr:rMrZr[r\)rgr9Ú attributesrrrÚget_elements_and_attributesÿs z(XmlSerialize.get_elements_and_attributesNcCs$t d¡}| ||¡}| |¡|S)Nz1.0)r)ZnewDocÚ get_xml_nodesZsetRootElement)rgÚobj_namerÚrootrrrÚ get_xml_docs   zXmlSerialize.get_xml_doccCsLd}}z,| |¡}|jtdd}W|durH| ¡n|durF| ¡0|S)NrE)ÚencodingÚformat)rtZ serializerÚfreeDoc)rgrrrZtext_docrrrrhs  ÿ zXmlSerialize.get_xml_text_docc Cs¤d}zˆz&t | ¡¡}| ¡}| ||¡WnLtjyx}z2t tjd|¡WYd}~W|durl| ¡dSd}~00W|dur | ¡n|durž| ¡0dS)Nz"read_xml() libxml2.parserError: %s) r)ZparseDocÚstriprrBÚ parserErrorÚsyslogÚLOG_ERRrw)rgÚbufrrrrr=rrrÚread_xmls  ý ÿzXmlSerialize.read_xmlc Cs d}zêz>t |¡}|r8||ƒs8WW|dur4| ¡dS| ||¡Wn”tjy’}z2t tjd|¡WYd}~W|dur†| ¡dSd}~0tyÚ}z2t tjd|¡WYd}~W|durÎ| ¡dSd}~00W|dur| ¡n|dur| ¡0dS)NFz'read_xml_file() libxml2.parserError: %szread_xml_file() error: %sT)r)Z parseFilerwrBryrzr{Ú Exception)rgZxmlfilerrZ validate_docrr=rrrÚ read_xml_file&s8  ö ú  ý  ÿ  zXmlSerialize.read_xml_filec Cs¦zfd}|durtj}n2t|tƒr0t|dƒ}d}nt|tƒrs2      5