Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def element(self, _type, index=0):
- if isinstance(index, int):
- index = f'{_type.lower()}{index}'
- elif isinstance(index, tuple):
- index = list(index)
- def walk(parent):
- nodes = parent.get_nodes()
- if not isinstance(index, list) and index in nodes:
- return nodes[index]
- def get_element(_nodes):
- for node in _nodes.values():
- if node.type == _type and index == node.id:
- return node
- if node.has_children:
- node = walk(node)
- if node:
- return node
- return None
- if not isinstance(index, list) and index in nodes:
- return nodes[index]
- elif isinstance(index, list) and '/' in _type:
- elements = _type.split('/', 1)
- elm = self.element(elements[0], index[0])
- if len(index[1:]) == 1:
- idx = f'{elements[1]}{index[1]}'.lower()
- if idx in elm.nodes:
- return elm.nodes[idx]
- else:
- parts = elements[1].split('/')
- idx = f'{parts[0]}{index[1]}'.lower()
- if idx not in elm.nodes:
- return None
- return elm.element(elements[1], index[1:])
- elif '/' in _type:
- elements = _type.split('/')
- elm = self.element(elements[0], 0)
- return elm.element(elements[1], 0)
- return get_element(nodes)
- return walk(self)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement