Advertisement
Uno-Dan

A run around the block!

Mar 17th, 2019
196
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.70 KB | None | 0 0
  1.     def element(self, _type, index=0):
  2.         if isinstance(index, int):
  3.             index = f'{_type.lower()}{index}'
  4.         elif isinstance(index, tuple):
  5.             index = list(index)
  6.  
  7.         def walk(parent):
  8.             nodes = parent.get_nodes()
  9.  
  10.             if not isinstance(index, list) and index in nodes:
  11.                 return nodes[index]
  12.  
  13.             def get_element(_nodes):
  14.                 for node in _nodes.values():
  15.                     if node.type == _type and index == node.id:
  16.                         return node
  17.                     if node.has_children:
  18.                         node = walk(node)
  19.                         if node:
  20.                             return node
  21.                 return None
  22.  
  23.             if not isinstance(index, list) and index in nodes:
  24.                 return nodes[index]
  25.             elif isinstance(index, list) and '/' in _type:
  26.                 elements = _type.split('/', 1)
  27.                 elm = self.element(elements[0], index[0])
  28.  
  29.                 if len(index[1:]) == 1:
  30.                     idx = f'{elements[1]}{index[1]}'.lower()
  31.                     if idx in elm.nodes:
  32.                         return elm.nodes[idx]
  33.                 else:
  34.                     parts = elements[1].split('/')
  35.                     idx = f'{parts[0]}{index[1]}'.lower()
  36.                     if idx not in elm.nodes:
  37.                         return None
  38.  
  39.                 return elm.element(elements[1], index[1:])
  40.  
  41.             elif '/' in _type:
  42.                 elements = _type.split('/')
  43.                 elm = self.element(elements[0], 0)
  44.                 return elm.element(elements[1], 0)
  45.  
  46.             return get_element(nodes)
  47.  
  48.         return walk(self)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement