summaryrefslogtreecommitdiffstats
path: root/examples/recursive_dirtree_generator.py
diff options
context:
space:
mode:
Diffstat (limited to 'examples/recursive_dirtree_generator.py')
-rw-r--r--examples/recursive_dirtree_generator.py89
1 files changed, 89 insertions, 0 deletions
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()