Skip to content

Tree Query

bigtree.tree.query

query_tree

query_tree(tree_node, query, debug=False)

Query tree using Tree Definition Language.

  • Supports clauses: AND, OR, NOT
  • Supports operation: ==, !=, >, <, >=, <=, BETWEEN, IN, LIKE
  • Note that string match in query must be in double quotes

Examples:

>>> from bigtree import Node, Tree
>>> paths = {
...     "a": {"age": 90},
...     "a/b": {"age": 65},
...     "a/c": {"age": 60},
...     "a/b/d": {"age": 40},
...     "a/b/e": {"age": 35},
...     "a/c/f": {"age": 38},
...     "a/b/e/g": {"age": 10},
...     "a/b/e/h": {"age": 6},
... }
>>> tree = Tree.from_dict(paths)
>>> tree.show(all_attrs=True)
a [age=90]
β”œβ”€β”€ b [age=65]
β”‚   β”œβ”€β”€ d [age=40]
β”‚   └── e [age=35]
β”‚       β”œβ”€β”€ g [age=10]
β”‚       └── h [age=6]
└── c [age=60]
    └── f [age=38]

Field-based comparisons

>>> results = tree.query('age >= 30 AND is_leaf OR node_name IN ["a"]')
>>> [result.node_name for result in results]
['a', 'd', 'f']

Path-based conditions

>>> results = tree.query('path_name LIKE ".*/b/.*"')
>>> [result.node_name for result in results]
['d', 'e', 'g', 'h']

Nested attribute conditions

>>> results = query_tree(root, "parent.is_root")
>>> [result.node_name for result in results]
['b', 'c']

Parameters:

Name Type Description Default
tree_node T

tree to query

required
query str

query

required
debug bool

if True, will print out the parsed query

False

Returns:

Type Description
list[T]

List of nodes that fulfil the condition of query