From 576d7248699f8017f2909f548ef80df7217b57a4 Mon Sep 17 00:00:00 2001 From: "Bala.FA" Date: Thu, 13 Mar 2014 15:23:17 +0530 Subject: utils: add xml2dict() The method coverts xml object as elementTree to dictionary. Change-Id: Ia7eca3eb52a79979d7d1ee9d4ce1c842cc86e8ed Signed-off-by: Bala.FA Reviewed-on: https://cuckoo.blr.redhat.com:8443/22 --- glusternagios/utils.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'glusternagios') diff --git a/glusternagios/utils.py b/glusternagios/utils.py index b1bfe10..44c4727 100644 --- a/glusternagios/utils.py +++ b/glusternagios/utils.py @@ -32,6 +32,7 @@ import time import os import errno import signal +from collections import defaultdict class HostStatus: @@ -462,3 +463,26 @@ def retry(func, expectedException=Exception, tries=None, raise time.sleep(sleep) + + +def xml2dict(tree): + d = {tree.tag: {} if tree.attrib else None} + children = list(tree) + if children: + dd = defaultdict(list) + for dc in map(xml2dict, children): + for k, v in dc.iteritems(): + dd[k].append(v) + d = {tree.tag: {}} + for k, v in dd.iteritems(): + d[tree.tag][k] = v[0] if len(v) == 1 else v + if tree.attrib: + d[tree.tag].update((k, v) for k, v in tree.attrib.iteritems()) + if tree.text: + text = tree.text.strip() + if children or tree.attrib: + if text: + d[tree.tag]['#text'] = text + else: + d[tree.tag] = text + return d -- cgit