Source code for anytree.importer.dictimporter

# -*- coding: utf-8 -*-
from anytree import AnyNode


[docs]class DictImporter(object): def __init__(self, nodecls=AnyNode): u""" Import Tree from dictionary. Every dictionary is converted to an instance of `nodecls`. The dictionaries listed in the children attribute are converted likewise and added as children. Keyword Args: nodecls: class used for nodes. >>> from anytree.importer import DictImporter >>> from anytree import RenderTree >>> importer = DictImporter() >>> data = { ... 'a': 'root', ... 'children': [{'a': 'sub0', ... 'children': [{'a': 'sub0A', 'b': 'foo'}, {'a': 'sub0B'}]}, ... {'a': 'sub1'}]} >>> root = importer.import_(data) >>> print(RenderTree(root)) AnyNode(a='root') ├── AnyNode(a='sub0') │ ├── AnyNode(a='sub0A', b='foo') │ └── AnyNode(a='sub0B') └── AnyNode(a='sub1') """ self.nodecls = nodecls
[docs] def import_(self, data): """Import tree from `data`.""" return self.__import(data)
def __import(self, data, parent=None): assert isinstance(data, dict) assert "parent" not in data attrs = dict(data) children = attrs.pop("children", []) node = self.nodecls(parent=parent, **attrs) for child in children: self.__import(child, parent=node) return node