From f3f2889e44179110c883af5967e8576f23600afd Mon Sep 17 00:00:00 2001
From: sigmasternchen <git@sigma-star.io>
Date: Fri, 10 Jan 2025 18:53:57 +0100
Subject: [PATCH] feat: Switch to Python logging

---
 README.md                         |  3 ++-
 external_module_test/__init__.py  |  3 ++-
 grimoiressg/__main__.py           |  9 ++++++---
 grimoiressg/arguments.py          | 11 ++++++-----
 grimoiressg/config.py             | 18 ++++++++++--------
 grimoiressg/content_files.py      |  9 ++++-----
 grimoiressg/modules/markdown.py   |  4 +++-
 grimoiressg/modules/tags.py       |  8 +++++---
 grimoiressg/modules/templating.py | 10 +++++-----
 grimoiressg/utils/__init__.py     |  3 ++-
 grimoiressg/utils/logger.py       |  5 +++++
 11 files changed, 50 insertions(+), 33 deletions(-)
 create mode 100644 grimoiressg/utils/logger.py

diff --git a/README.md b/README.md
index d6e8c44..ed9eb2e 100644
--- a/README.md
+++ b/README.md
@@ -143,10 +143,11 @@ that modifies the list of available modules:
 
 ```Python
 from grimoiressg.modules import available_modules
+from grimoiressg.utils import logger
 
 
 def test(data, context):
-    print("This is test module.")
+    logger.info("This is test module.")
 
 
 available_modules["test"] = test
diff --git a/external_module_test/__init__.py b/external_module_test/__init__.py
index 39d0ccc..5a59c42 100644
--- a/external_module_test/__init__.py
+++ b/external_module_test/__init__.py
@@ -1,8 +1,9 @@
 from grimoiressg.modules import available_modules
+from grimoiressg.utils import logger
 
 
 def test(data, context):
-    print("This is test module.")
+    logger.info("This is test module.")
 
 
 available_modules["test"] = test
diff --git a/grimoiressg/__main__.py b/grimoiressg/__main__.py
index 0b4004e..b8b38cb 100644
--- a/grimoiressg/__main__.py
+++ b/grimoiressg/__main__.py
@@ -1,14 +1,16 @@
+import logging
+
 from grimoiressg.arguments import parse_arguments_to_initial_context
 from grimoiressg.config import read_config
 from grimoiressg.content_files import recursively_read_files
 from grimoiressg.modules import available_modules
+from grimoiressg.utils import logger
 
 
 def apply_modules(data, config, context):
     for module in config.get("enabled_modules", []):
-        print(f"Applying module {module}...")
+        logger.info("Applying module %s...", module)
         available_modules[module](data, context)
-        print("")
 
 
 def main():
@@ -18,7 +20,8 @@ def main():
     data = recursively_read_files(context)
     apply_modules(data, config, context)
 
-    print("Done.")
+    logger.info("Done.")
+    logging.shutdown()
 
 
 if __name__ == "__main__":
diff --git a/grimoiressg/arguments.py b/grimoiressg/arguments.py
index 86d74b7..a062299 100644
--- a/grimoiressg/arguments.py
+++ b/grimoiressg/arguments.py
@@ -1,5 +1,7 @@
 import argparse
 
+from grimoiressg.utils import logger
+
 
 def parse_arguments_to_initial_context():
     parser = argparse.ArgumentParser(
@@ -21,11 +23,10 @@ def parse_arguments_to_initial_context():
         "filenames": args.content_file
     }
 
-    print(f"Output directory: {context['output_dir']}")
-    print(f"Config file: {context['config_file']}")
-    print("Content files:")
+    logger.debug("Output directory: %s", context['output_dir'])
+    logger.debug("Config file: %s", context['config_file'])
+    logger.debug("Content files:")
     for filename in context["filenames"]:
-        print(f" - {filename}")
-    print()
+        logger.debug(" - %s", filename)
 
     return context
diff --git a/grimoiressg/config.py b/grimoiressg/config.py
index 512fade..ce4ebe4 100644
--- a/grimoiressg/config.py
+++ b/grimoiressg/config.py
@@ -1,7 +1,10 @@
+import logging
+
 import yaml
 from yaml import Loader
 
 from grimoiressg.modules import available_modules, load_external_module
+from grimoiressg.utils import logger
 
 
 def default_config():
@@ -18,24 +21,23 @@ def read_config(context):
     config_file = context.get("config_file", None)
 
     if not config_file:
-        print("No config file given; using default config")
+        logger.info("No config file given; using default config")
         config = default_config()
     else:
-        print("Loading config file...")
+        logger.info("Loading config file...")
         with open(config_file, "r") as file:
             config = yaml.load(file, Loader) or {}
 
     for module in config.get("load_modules", []):
-        print(f" Loading external module {module}")
+        logger.debug(" Loading external module %s", module)
         load_external_module(module)
-    print()
 
-    print("Enabled modules:")
+    logger.debug("Enabled modules:")
     for module in config.get("enabled_modules", []):
-        print(f" - {module}")
+        logger.debug(" - %s", module)
         if module not in available_modules:
-            print(f"    ERROR: Module does not exist")
+            logger.critical("Module does not exist: %s", module)
+            logging.shutdown()
             exit(1)
-    print()
 
     return config
diff --git a/grimoiressg/content_files.py b/grimoiressg/content_files.py
index 0c3f299..854d6af 100644
--- a/grimoiressg/content_files.py
+++ b/grimoiressg/content_files.py
@@ -3,11 +3,11 @@ import os
 import yaml
 from yaml import Loader
 
-from grimoiressg.utils.files import for_each_glob, to_relative
+from grimoiressg.utils import logger, for_each_glob, to_relative
 
 
 def handle_file(filename):
-    print(f" Reading {to_relative(filename)}...")
+    logger.debug(" Reading %s...", to_relative(filename))
 
     with open(filename, "r") as file:
         data = yaml.load(file, Loader)
@@ -28,12 +28,11 @@ def handle_file(filename):
 def recursively_read_files(context):
     data = []
 
-    print("Reading content files...")
+    logger.info("Reading content files...")
 
     for filename in context["filenames"]:
         data.extend(for_each_glob(filename, handle_file))
 
-    print(f"Read {len(data)} files in total.")
-    print()
+    logger.info(f"Read %d files in total.", len(data))
 
     return data
diff --git a/grimoiressg/modules/markdown.py b/grimoiressg/modules/markdown.py
index 8bbfca4..2202277 100644
--- a/grimoiressg/modules/markdown.py
+++ b/grimoiressg/modules/markdown.py
@@ -1,8 +1,10 @@
 import markdown
 
+from grimoiressg.utils import logger
+
 
 def compile_markdown(data, context):
     for entry in data:
         if "markdown" in entry:
-            print(f"Compiling markdown for {entry['relative_filename']}...")
+            logger.debug("Compiling markdown for %s...", entry['relative_filename'])
             entry["markdown_compiled"] = markdown.markdown(entry["markdown"])
diff --git a/grimoiressg/modules/tags.py b/grimoiressg/modules/tags.py
index 053f88c..1d63cf7 100644
--- a/grimoiressg/modules/tags.py
+++ b/grimoiressg/modules/tags.py
@@ -1,3 +1,5 @@
+from grimoiressg.utils import logger
+
 
 def extract_tags(data, context):
     tags = {}
@@ -9,10 +11,10 @@ def extract_tags(data, context):
             tags[tag] = entry_list
 
     if tags:
-        print("Found tags:")
+        logger.debug("Found tags:")
         for tag in tags.keys():
-            print(f" - {tag} ({len(tags[tag])} files)")
+            logger.debug(" - %s (%d files)", tag, len(tags[tag]))
     else:
-        print("No tags found.")
+        logger.debug("No tags found.")
 
     context["tags"] = tags
\ No newline at end of file
diff --git a/grimoiressg/modules/templating.py b/grimoiressg/modules/templating.py
index f7c875b..ef2e307 100644
--- a/grimoiressg/modules/templating.py
+++ b/grimoiressg/modules/templating.py
@@ -1,9 +1,9 @@
 import os
 
-from grimoiressg.utils import to_relative
-
 from jinja2 import Environment, FileSystemLoader
 
+from grimoiressg.utils import to_relative, logger
+
 jinja_env = Environment(
     loader=FileSystemLoader("/")
 )
@@ -16,7 +16,7 @@ def render_templates(data, context):
         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['relative_filename']}...")
+            logger.debug("Rendering template for %s...", entry['relative_filename'])
             template = jinja_env.get_template(template_path)
             entry["rendered"] = template.render(
                 **context,
@@ -28,9 +28,9 @@ def render_templates(data, context):
         if "rendered" in entry and "output" in entry:
             files_written += 1
             filename = os.path.realpath(context["output_dir"] + "/" + entry["output"])
-            print(f" writing to {to_relative(filename)}")
+            logger.debug(" writing to %s", to_relative(filename))
             os.makedirs(os.path.dirname(filename), exist_ok=True)
             with open(filename, "w") as file:
                 file.write(entry["rendered"])
 
-    print(f"{files_written} rendered")
+    logger.debug("%d rendered", files_written)
diff --git a/grimoiressg/utils/__init__.py b/grimoiressg/utils/__init__.py
index 96766ce..c90e260 100644
--- a/grimoiressg/utils/__init__.py
+++ b/grimoiressg/utils/__init__.py
@@ -1 +1,2 @@
-from .files import to_relative as to_relative
+from .files import to_relative as to_relative, for_each_glob as for_each_glob
+from .logger import logger as logger
diff --git a/grimoiressg/utils/logger.py b/grimoiressg/utils/logger.py
new file mode 100644
index 0000000..cae4f43
--- /dev/null
+++ b/grimoiressg/utils/logger.py
@@ -0,0 +1,5 @@
+import logging
+import sys
+
+logging.basicConfig(stream=sys.stdout, level=logging.INFO, format="%(asctime)s %(levelname)-9s: %(message)s")
+logger = logging.getLogger("grimoire")