U nf@sddlZddlZddlmZddlmZddlmZgej_ dgZ ddZ dd Z d d Z d d ZddZddZddZGdddeZdS)N)tostring) OrderedDict)IntEnumZSNAPSHOTcCsHt|trdd|DSt|tr4dd|DSdt|dSdS)zV recursively traverse nested dict and add xml CDATA element to the leaves cSsg|] }t|qS add_cdata).0xrr8/opt/hc_python/lib/python3.8/site-packages/pyone/util.py $szadd_cdata..cSsi|]\}}|t|qSrr)rkvrrr 'szadd_cdata..z N) isinstancelistdictitemsstr)drrr rs   rcCsdd}t|tr|jSt|trt|dr2|j}t|rt|d}||rft j t |dddSd}| D]\}}d|||f}qr|Sqt d n|Sd S) ae This function will cast parameters to make them nebula friendly flat dictionaries will be turned into attribute=value vectors dictionaries with root dictionary will be serialized as XML Structures will be turned into strings before being submitted. :param param: the parameter to make nebula friendly :return: casted parameter cSs"|D]}t|trdSqdS)NTF)valuesrr) dictionaryvalrrr is_nested_dict8s  z cast2one..is_nested_dict_rootrF)indentnewlinesz %s%s="%s" zCannot cast empty dictionaryN) rrvaluerhasattrrboolrrdict2xmlrr Exception)paramrrootretr r rrr cast2one-s&      r%cCs|jS)aW This function returns a dictionary from an anyType binding element The dictionary can then be used later as imput for an udpate This is now deprecated, included for backward compatibility. :param element: anyType element to be converted such as TEMLATE or USER_TEMPLATE :return: a dictionary representing the element )r)elementrrr one2dictYs r'cCs<|D].\}}t|tkr&t|q|dkrd||<qdS)Nr)rtyper none2emptystr)rr r rrr r)fs   r)cCsR|dkrNt|ddrN|d}tD]*}||kr"t||tkr"||g||<q"dS)NTEMPLATE__iter__)rTEMPLATE_ALWAYS_LIST_ELEMr(r)rtagtmplelemrrr fix_dictns r0cCst|}tj|dd}t||jd|jkrH|jdd}||d=n|j}||dkrdt||<t|t||tst||t rt||||<|||_ ||S)zv Creates a dictionary from the documentTree obtained from a binding Element. :param element: :return: F)Zstrip_whitespace}z@xmlnsN) r xmltodictparser0r-splitrr)rrr)r&xmlr$ZtagNamerrr child2dictxs      r7cCs4|dkrt||_dS|dkr,t||_dSdSdS)z Utility function to build an anyType element that can be accessed as a dictionary :param obj: :param nodeName: :param child: :return: r*T USER_TEMPLATEFN)r7r*r8)objZnodeNamechildrrr build_template_nodes  r;cs*eZdZdZddZdfdd ZZS) TemplatedTypez, Mixin class for Templated bindings cCst|t|d<dS)NZ custom_attrs)rvars)selfnodeattrsZalready_processedrrr _buildAttributesszTemplatedType._buildAttributesFNcs(t|||s$tt||||||dS)N)r;superr<_buildChildren)r>Zchild_r?Z nodeName_Z fromsubclass_Zgds_collector_ __class__rr rCs zTemplatedType._buildChildren)FN)__name__ __module__ __qualname____doc__rArC __classcell__rrrDr r<sr<)r r3Z lxml.etreer collectionsrZaenumrNodeentitiesr,rr%r'r)r0r7r;objectr<rrrr s   ,  #