From 04dadfa8e4d8ad4055124a393c5ed6bfb245147c Mon Sep 17 00:00:00 2001
From: sigmasternchen <git@sigma-star.io>
Date: Mon, 6 Jan 2025 00:25:32 +0100
Subject: [PATCH] cleanup + better logging

---
 grimoire/__main__.py | 37 +++++++++++++++++++++++++++----------
 1 file changed, 27 insertions(+), 10 deletions(-)

diff --git a/grimoire/__main__.py b/grimoire/__main__.py
index 5da3211..b89a532 100644
--- a/grimoire/__main__.py
+++ b/grimoire/__main__.py
@@ -1,7 +1,6 @@
 import argparse
 import glob
 import os
-import sys
 
 import markdown
 import yaml
@@ -13,29 +12,41 @@ jinja_env = Environment(
 )
 
 
+def to_relative(path):
+    trimmed = path.removeprefix(os.getcwd())
+    if trimmed != path:
+        trimmed = "." + trimmed
+    return trimmed
+
+
 def compile_markdown(data):
     for entry in data:
         if "markdown" in entry:
-            print(f"Compiling markdown for {entry['filename']}...")
+            print(f"Compiling markdown for {entry['relative_filename']}...")
             entry["markdown_compiled"] = markdown.markdown(entry["markdown"])
 
 
 def render(data, tags, output_dir):
+    files_written = 0
+
     for entry in data:
         if "template" in entry:
             template_path = os.path.realpath(os.path.dirname(entry["filename"]) + "/" + entry["template"])
             template_dir = os.path.dirname(template_path)
-            print(f"Rendering template for {entry['filename']}...")
+            print(f"Rendering template for {entry['relative_filename']}...")
             template = jinja_env.get_template(template_path)
             entry["rendered"] = template.render(current=entry, all=data, tags=tags, template_dir=template_dir)
 
         if "rendered" in entry and "output" in entry:
+            files_written += 1
             filename = os.path.realpath(output_dir + "/" + entry["output"])
-            print(f"  ... writing to {filename}")
+            print(f"  ... writing to {to_relative(filename)}")
             os.makedirs(os.path.dirname(filename), exist_ok=True)
             with open(filename, "w") as file:
                 file.write(entry["rendered"])
 
+    return files_written
+
 
 def extract_tags(data):
     tags = {}
@@ -61,12 +72,13 @@ def handle_file_or_glob(globname):
 
 
 def handle_file(filename):
-    print(f"Reading {filename}...")
+    print(f"Reading {to_relative(filename)}...")
 
     with open(filename, "r") as file:
         data = yaml.load(file, Loader)
 
     data["filename"] = filename
+    data["relative_filename"] = to_relative(filename)
     results = [data]
 
     relative_dir = os.path.dirname(filename)
@@ -88,26 +100,31 @@ def parse_arguments():
 
 
 def main():
-    if len(sys.argv) < 2:
-        print("no files to work on")
-        exit(1)
-
     output_dir, filenames = parse_arguments()
 
     print(f"Output directory: {output_dir}")
     print(f"Initial filenames: {filenames}")
     print()
 
+    if len(filenames) == 0:
+        print("error: at least one filename needed")
+        exit(1)
+
     data = []
     for filename in filenames:
         data.extend(handle_file_or_glob(filename))
 
     print(f"Total number of entries: {len(data)}")
+    print()
 
     compile_markdown(data)
     tags = extract_tags(data)
+    files_written = render(data, tags, output_dir)
 
-    render(data, tags, output_dir)
+    print(f"Total files written: {files_written}")
+
+    print()
+    print("Done.")
 
 
 if __name__ == "__main__":