JFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3RbrJFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr ٓg: ZdZddlmZdZeZddlmZ ddlmZ ddl Z ddl Z ddlmZe j dZ e edd Zd ZgZd d Zd ZdZdZdZdZdZdZ dZ!d!dZ"dZ#dZ$d"dZ%d"dZ&d"dZ'dddd de!d dddf dZ(y#e $r ddl mZ Y}wxYw#eZYdxYw#eZYjxYw)#a Converts a Python dictionary or other native data type into a valid XML string. Supports item (`int`, `float`, `long`, `decimal.Decimal`, `bool`, `str`, `unicode`, `datetime`, `none` and other number-like objects) and collection (`list`, `set`, `tuple` and `dict`, as well as iterable and dict-like objects) data types, with arbitrary nesting for the collections. Items with a `datetime` type are converted to ISO format strings. Items with a `None` type become empty XML elements. This module works with both Python 2 and 3. )unicode_literalsz1.7.16)randint)IterableN) parseString dicttoxmlFc2|rqddl}td|ztj|tjt j dt|jjzytjtjy)Nrz*Debug mode is on. Events are logged at: %s)filenamelevelz Logging session starts: %s)r ) datetimeprintlogging basicConfigINFOLOGinfostrtodayWARNING)debugr r s 8/opt/hc_python/lib/python3.12/site-packages/dicttoxml.py set_debugr,si  :hGHXW\\B / !!'') *,  '//2crtjd|d t|dS#t|cYSxYw)zConverts strings with non-ASCII characters to unicode for LOG. Python 3 doesn't have a `unicode()` function, so `unicode()` is an alias for `str()`, but `str()` doesn't take a second argument, hence this kludge. zInside unicode_me(). val = ""utf-8)rrunicodevals r unicode_mer8s6 HH# 89sG$$s|s ' 6c btjd|d|d|d|dt||S)zReturns a random integerzInside make_id(). element = "z ", start="z", end="r_)rrr)elementstartends rmake_idr%Fs)HHRWY\ ]^wuc2 33rctjd|dt|}d}|r.|tvrd}tj |n t|}|r.tdS)z'Returns a unique id for a given elementz#Inside get_unique_id(). element = "rTF)rrr%idsappend)r"this_iddups r get_unique_idr,LsVHH CDgG C # C JJw g&G  r7Nrctjd|dt|jdt|jdk(rtjdyt|jdk(rtjdyt|jd vrtjd y t|jd vrtjd yt|jdk(rtjdyt |t j rtjdyt |trtjdyt |trtjdytjdt|jzt|jS)z0Returns the data type for the xml type attributezInside get_xml_type(). val = "z", type(val) = "rNoneTypez2type(val).__name__ == 'NoneType', returning 'null'nullboolz.type(val).__name__ == 'bool', returning 'bool')rrz8type(val).__name__ in ('str', unicode'), returning 'str'r)intlongz5type(val).__name__ in ('int', long'), returning 'int'r1floatz0type(val).__name__ == 'float', returning 'float'z3isinstance(val, numbers.Number), returning 'number'numberz'isinstance(val, dict), returning 'dict'dictz+isinstance(val, iterable), returning 'list'listztype not found, returning '%s') rrtype__name__ isinstancenumbersNumberr5iterablers r get_xml_typer=ZsGHHc4PS9K]K] ^_ CyZ' EF c  v % AB c  1 1 KL c   . HI c  w & CD C ( FG C  :; C " >?HH -c1C1C DE 9  rcHtjd|dt|dt|ttfvret |}|j dd}|j dd}|j dd}|j d d }|j d d }|S) NzInside escape_xml(). s = "z" and type(s) = "r&z&z"'z'z>)rrr7rrrreplace)ss r escape_xmlrEsHH1d1g NO Aw3. qM IIc7 # IIc8 $ IIdH % IIc6 " IIc6 " Hrc tjd|ddj|jDcgc] \}}|d|dc}}}|dk7rdnd|Scc}}w)z2Returns an attribute string in the form key="val" z!Inside make_attstring(). attr = "r z=")rrjoinitems)attrkv attrstrings rmake_attrstringrOsZHHt >?$**,G,$!Q1-,GHJ&",S"4j AAHsA ctjdt|zd|d|d} t|y#t$rYywxYw)z%Checks that a key is a valid XML namez'Inside key_is_valid_xml(). Testing "%s"z(foorGz type="list"NrerfrgrH)rrr)r, enumeraterr7r8r9r:r;rrrjrkrdr0rhr5rlr<rOrmrirnrI) rJr(r_rprqrrryrzrsr*ir]rKs rrmrm'sHH $% FmmG&!I 'U#4  t id)<)<> rDWac*B"D dGNN +tDzc7^/K Jy$ 5$G H T; ' Jy$..*:IudS T $Z4  LD)UDI J d # sFIy%P sFIy%Ph 't4 sIy)USt4 sIy)US\ LD)UDI Jd4j))+ e$j 776?rc 4tjdt|dt|dt|jd|i}t ||\}}|rt ||d<t|}d||d|dk(r t|n t|d |dS) z/Converts a number or string into an XML elementzInside convert_kv(): key="rv", type(val) is: "rr7rArBTrx) rrrr7r8rYr=rOr[rErRrrprrrKrNs rrjrjjsHH3C$s)*<*<> |#C.IC#C(V  &J Z D= 3jo=  rc 0tjdt|dt|dt|jd|i}t ||\}}|rt ||d<t|}d||dt|jd|dS) z&Converts a boolean into an XML elementzInside convert_bool(): key="rvrrr7rArBrx) rrrr7r8rYr=rOrlowerrs rrhrhsHH33 S   |#C.IC#C(V  &J!:ws|/A/A/CS IIrc tjdt|dt|dt|dt||i}t ||\}}|rt ||d<t |}d||d|dS) z)Converts a null value into an XML elementzInside convert_none(): key="z". val="z", attr_type="z", attr=r7rAz>z$rArBr^rxrHr) rrr7r8rr)rtrIencode) rora custom_rootxml_declarationr(rprqrrinclude_encodingencoding return_bytesryrzs rrrs:HH49CUCUWabeWf gh FmmG t| d "5(01>(KLS)YkJ   S)YbIJuwwv 776? ! !' **r)Fz dicttoxml.log)ii?B)ra)FN))__doc__ __future__r __version__versionrandomrcollections.abcrr< ImportError collectionsr:r xml.dom.minidomr getLoggerrrrr2r1rrr(r%r,r=rErOrTrYr[r`rtrlrmrjrhrirrrrs( 14 'g $  3  4 %P  B@% R8<~@F*J(2.  ! 2+g 101G  Ds'B BB$ BBB!$B*