From 9d80f41a0986e5e741245985534d44964e149464 Mon Sep 17 00:00:00 2001 From: Amy Gale Ruth Bowersox Date: Wed, 21 Feb 2024 23:04:29 -0700 Subject: [PATCH] started by generating a list of source nodes --- .idea/.gitignore | 3 + .idea/dbnavigator.xml | 405 +++++++++++++++++++++++++++++++++ .idea/markdown.xml | 10 + .idea/misc.xml | 9 + .idea/modules.xml | 8 + .idea/vcs.xml | 6 + dragonglass.iml | 9 + requirements.txt | 4 + src/dragonglass/dragonglass.py | 37 +++ src/dragonglass/tree.py | 37 +++ 10 files changed, 528 insertions(+) create mode 100644 .idea/.gitignore create mode 100644 .idea/dbnavigator.xml create mode 100644 .idea/markdown.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml create mode 100644 dragonglass.iml create mode 100644 requirements.txt create mode 100644 src/dragonglass/dragonglass.py create mode 100644 src/dragonglass/tree.py diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/dbnavigator.xml b/.idea/dbnavigator.xml new file mode 100644 index 0000000..257f3c7 --- /dev/null +++ b/.idea/dbnavigator.xml @@ -0,0 +1,405 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/markdown.xml b/.idea/markdown.xml new file mode 100644 index 0000000..5648d88 --- /dev/null +++ b/.idea/markdown.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..1d76137 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,9 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..6a38568 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/dragonglass.iml b/dragonglass.iml new file mode 100644 index 0000000..ad3c0a3 --- /dev/null +++ b/dragonglass.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..945a4c1 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,4 @@ +Jinja2==3.1.3 +Markdown==3.5.2 +MarkupSafe==2.1.5 +PyYAML==6.0.1 diff --git a/src/dragonglass/dragonglass.py b/src/dragonglass/dragonglass.py new file mode 100644 index 0000000..aeb2dd7 --- /dev/null +++ b/src/dragonglass/dragonglass.py @@ -0,0 +1,37 @@ +#!/usr/bin/env python3 + +import argparse +import sys +from pathlib import Path +from tree import SourceNode + +# The command line parser +parser = argparse.ArgumentParser(prog='dragonglass') +parser.add_argument('source_dir') +parser.add_argument('dest_dir') + + +def main(): + args = parser.parse_args() + + source_dir = Path(args.source_dir).resolve() + if not (source_dir.exists() and source_dir.is_dir()): + print(f"{source_dir} is not a valid directory") + return 1 + + dest_dir = Path(args.dest_dir).resolve() + if dest_dir.exists() and not dest_dir.is_dir(): + print(f"{dest_dir} exists but is not a valid directory") + return 1 + + nodes = SourceNode.generate_list(source_dir) + + # TEMP + for node in nodes: + print(node) + + return 0 + + +if __name__ == '__main__': + sys.exit(main()) diff --git a/src/dragonglass/tree.py b/src/dragonglass/tree.py new file mode 100644 index 0000000..34c064f --- /dev/null +++ b/src/dragonglass/tree.py @@ -0,0 +1,37 @@ +#!/usr/bin/env python + +# The paths that are always to be ignored. +STATIC_IGNORE = [ + '.obsidian' +] + +MARKDOWN_PAT = '*.md' + + +class SourceNode: + def __init__(self, path, is_dir): + self._path = path + self._is_dir = is_dir + self._is_md = path.match(MARKDOWN_PAT) + + def __str__(self): + return f"SourceNode({self._path}, {self._is_dir}) [is_md={self._is_md}]" + + @classmethod + def generate_list(cls, source_root): + nodes = [] + dirs = [source_root] + while len(dirs) > 0: + current_dir = dirs.pop(0) + for child in current_dir.iterdir(): + rchild = child.relative_to(source_root) + add_me = True + for pat in STATIC_IGNORE: + if rchild.match(pat): + add_me = False + break + if add_me: + nodes.append(SourceNode(rchild, child.is_dir())) + if child.is_dir(): + dirs.append(child) + return nodes