Module brevettiai.utils.tag_utils

Expand source code
def find(tree, key, value):
    items = tree.get("children", []) if isinstance(tree, dict) else tree
    for item in items:
        if item[key] == value:
            yield item
        else:
            yield from find(item, key, value)


def find_path(tree, key, value, path=()):
    items = tree.get("children", []) if isinstance(tree, dict) else tree
    for item in items:
        if item[key] == value:
            yield (*path, item)
        else:
            yield from find_path(item, key, value, (*path, item))

#
# class TagUtils:
#     __tags = []
#     __datasets = []
#     __tag2datasets = {}
#
#     @classmethod
#     def add_info(self, tags, datasets):
#         self.__tags.extend(tags)
#         self.__datasets.extend(datasets)
#         self.recalculate_caches()
#
#     @classmethod
#     def recalculate_caches(self):
#         for ds in self.__datasets:
#             tags = ds.get("tags", [])
#             for tag in tags:
#                 self.__tag2datasets.setdefault(tag["id"], set()).add(ds["id"])

Functions

def find(tree, key, value)
Expand source code
def find(tree, key, value):
    items = tree.get("children", []) if isinstance(tree, dict) else tree
    for item in items:
        if item[key] == value:
            yield item
        else:
            yield from find(item, key, value)
def find_path(tree, key, value, path=())
Expand source code
def find_path(tree, key, value, path=()):
    items = tree.get("children", []) if isinstance(tree, dict) else tree
    for item in items:
        if item[key] == value:
            yield (*path, item)
        else:
            yield from find_path(item, key, value, (*path, item))