From 60b8ecaf2afb874b733c1c61be26da68df51d989 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Thu, 11 May 2023 10:46:20 +0200 Subject: Adding upstream version 1.6.4. Signed-off-by: Daniel Baumann --- examples/recursive_dirtree_generator.py | 89 +++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 examples/recursive_dirtree_generator.py (limited to 'examples/recursive_dirtree_generator.py') diff --git a/examples/recursive_dirtree_generator.py b/examples/recursive_dirtree_generator.py new file mode 100644 index 0000000..986cd1a --- /dev/null +++ b/examples/recursive_dirtree_generator.py @@ -0,0 +1,89 @@ +#!/usr/bin/env python + +""" +Example of treelib usage to generate recursive tree of directories. +It could be useful to implement Directory Tree data structure + +2016 samuelsh +""" + +import treelib +import random +import hashlib +from string import digits, letters +import sys + + +MAX_FILES_PER_DIR = 10 + + +def range2(stop): + if sys.version_info[0] < 3: + return xrange(stop) # noqa: F821 + else: + return range(stop) + + +def get_random_string(length): + return "".join(random.choice(digits + letters) for _ in range2(length)) + + +def build_recursive_tree(tree, base, depth, width): + """ + Args: + tree: Tree + base: Node + depth: int + width: int + + Returns: + + """ + if depth >= 0: + depth -= 1 + for i in range2(width): + directory = Directory() + tree.create_node( + "{0}".format(directory.name), + "{0}".format(hashlib.md5(directory.name)), + parent=base.identifier, + data=directory, + ) # node identifier is md5 hash of it's name + dirs_nodes = tree.children(base.identifier) + for dir in dirs_nodes: + newbase = tree.get_node(dir.identifier) + build_recursive_tree(tree, newbase, depth, width) + else: + return + + +class Directory(object): + def __init__(self): + self._name = get_random_string(64) + self._files = [ + File() for _ in range2(MAX_FILES_PER_DIR) + ] # Each directory contains 1000 files + + @property + def name(self): + return self._name + + @property + def files(self): + return self._files + + +class File(object): + def __init__(self): + self._name = get_random_string(64) + + @property + def name(self): + return self._name + + +tree = treelib.Tree() +base = tree.create_node("Root", "root") +build_recursive_tree(tree, base, 2, 10) + +tree.show() -- cgit v1.2.3