Skip to content

Commit 3a3e454

Browse files
authored
Add files via upload
1 parent d981a93 commit 3a3e454

File tree

3 files changed

+98
-0
lines changed

3 files changed

+98
-0
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# __init__.py
2+
3+
"""Top-level package for RP Tree."""
4+
5+
__version__ = "0.1.0"
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import pathlib
2+
import argparse
3+
import sys
4+
5+
from . import __version__
6+
from .dstree import DirTree
7+
8+
def main():
9+
args = parse_args()
10+
root_dir = pathlib.Path(args.root_dir)
11+
if not root_dir.is_dir():
12+
print("Entered directory is invalid!! ")
13+
sys.exit()
14+
tree = DirTree(root_dir)
15+
tree.generate()
16+
17+
18+
def parse_args():
19+
parser = argparse.ArgumentParser(
20+
prog = "tree",
21+
description = "DS Tree, a directory tree generator.",
22+
epilog = "Thank you for using dstree!!"
23+
)
24+
25+
parser.version = f"ds tree v{__version__}"
26+
parser.add_argument("-v","--version", action = "version")
27+
parser.add_argument(
28+
"root_dir",
29+
metavar = "ROOT_DIR",
30+
nargs = "?",
31+
default = ".",
32+
help = "Generate directory tree starting at ROOT_DIR"
33+
)
34+
return parser.parse_args()
35+
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
import os
2+
import pathlib
3+
4+
PIPE = "|"
5+
ELBOW = "└──"
6+
TEE = "├──"
7+
PIPE_PREFIX = "| "
8+
SPACE_PREFIX = " "
9+
10+
class DirTree:
11+
def __init__(self,root_dir):
12+
self._generator = _TreeGenerator(root_dir) #Composition
13+
14+
def generate(self):
15+
tree = self._generator.build_tree()
16+
for item in tree:
17+
print(item)
18+
19+
20+
class _TreeGenerator():
21+
def __init__(self,root_dir):
22+
self._tree = []
23+
self._root_dir = pathlib.Path(root_dir)
24+
25+
def build_tree(self):
26+
self._tree_head()
27+
self._tree_body(self._root_dir)
28+
return self._tree
29+
30+
def _tree_head(self):
31+
self._tree.append(f"{self._root_dir}{os.sep}")
32+
self._tree.append(PIPE)
33+
34+
def _tree_body(self,directory,prefix = ""):
35+
entries = directory.iterdir()
36+
entries = sorted(entries, key = lambda x : x.is_file())
37+
entry_count = len(entries)
38+
for index,entry in enumerate(entries):
39+
connector = ELBOW if index == entry_count-1 else TEE
40+
if entry.is_dir():
41+
self._add_directory(entry,index,entry_count,prefix,connector)
42+
else:
43+
self._add_file(entry,prefix,connector)
44+
45+
46+
def _add_directory(self,directory,index,entry_count,prefix,connector):
47+
self._tree.append(f"{prefix}{connector}{directory.name}{os.sep}")
48+
if entry_count != index - 1:
49+
prefix += PIPE_PREFIX
50+
else:
51+
prefix += SPACE_PREFIX
52+
self._tree_body(directory=directory , prefix=prefix) #overwrite default prefix
53+
self._tree.append(prefix.rstrip())
54+
55+
def _add_file(self,file,prefix,connector):
56+
self._tree.append(f"{prefix}{connector}{file.name}")
57+
58+

0 commit comments

Comments
 (0)