diff options
Diffstat (limited to 'netdisco/util.py')
-rw-r--r-- | netdisco/util.py | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/netdisco/util.py b/netdisco/util.py index 65475b4..445062d 100644 --- a/netdisco/util.py +++ b/netdisco/util.py @@ -1,5 +1,6 @@ """Util functions used by Netdisco.""" from collections import defaultdict +from typing import Any, Dict, List, Optional # noqa: F401 # Taken from http://stackoverflow.com/a/10077069 @@ -9,21 +10,26 @@ def etree_to_dict(t): # strip namespace tag_name = t.tag[t.tag.find("}")+1:] - d = {tag_name: {} if t.attrib else None} + d = { + tag_name: {} if t.attrib else None + } # type: Dict[str, Optional[Dict[str, Any]]] children = list(t) if children: - dd = defaultdict(list) + dd = defaultdict(list) # type: Dict[str, List] for dc in map(etree_to_dict, children): for k, v in dc.items(): dd[k].append(v) d = {tag_name: {k: v[0] if len(v) == 1 else v for k, v in dd.items()}} + dt = d[tag_name] if t.attrib: - d[tag_name].update(('@' + k, v) for k, v in t.attrib.items()) + assert dt is not None + dt.update(('@' + k, v) for k, v in t.attrib.items()) if t.text: text = t.text.strip() if children or t.attrib: if text: - d[tag_name]['#text'] = text + assert dt is not None + dt['#text'] = text else: d[tag_name] = text return d |