From 296b108f11fc34e3d4bbbf0cec8900d4001597b5 Mon Sep 17 00:00:00 2001
From: goto <goto@cccfr.de>
Date: Sat, 4 Jan 2025 22:11:30 +0100
Subject: [PATCH] Introduced dataclass containing error handling behaviour of
 load_yaml method.

---
 load_yaml_errorhandling_parameters.py | 21 +++++++++++++++++++++
 page.py                               |  6 +++++-
 page_processor.py                     |  7 +++++--
 utilities.py                          | 11 +++++------
 4 files changed, 36 insertions(+), 9 deletions(-)
 create mode 100644 load_yaml_errorhandling_parameters.py

diff --git a/load_yaml_errorhandling_parameters.py b/load_yaml_errorhandling_parameters.py
new file mode 100644
index 0000000..4e06582
--- /dev/null
+++ b/load_yaml_errorhandling_parameters.py
@@ -0,0 +1,21 @@
+"""
+Contains the dataclass holding the error handling parameters for the load_yaml method.
+"""
+
+# python standard
+from dataclasses import dataclass
+
+# external dependencies
+
+# staysail modules
+
+
+@dataclass
+class LoadYAMLErrorHandlingParameters:
+    """
+    Contains the parameters controlling the error handling in the load_yaml method.
+    """
+
+    error_message: str = None
+    exit_on_error: bool = False
+    error_on_absent_file: bool = True
diff --git a/page.py b/page.py
index ee5f3dc..e5a033e 100644
--- a/page.py
+++ b/page.py
@@ -14,6 +14,7 @@ from slugify import slugify
 from utilities import Util
 from input_validator import InputValidator
 from page_type import PageType
+from load_yaml_errorhandling_parameters import LoadYAMLErrorHandlingParameters
 
 
 class Page:
@@ -71,7 +72,10 @@ class Page:
             if item.replace(".yaml", "") == page_name:
                 logging.debug("Found page description: %s", item)
                 error_message = "Could not load page definition: %s", item
-                data = Util.load_yaml(item_path, error_message=error_message)
+                error_handling_parameters = LoadYAMLErrorHandlingParameters(
+                    error_message=error_message
+                )
+                data = Util.load_yaml(item_path, error_handling_parameters)
 
         # ensure that all subpages have a unique name
         subpage_title_set = set()
diff --git a/page_processor.py b/page_processor.py
index 6e2c0b7..838af74 100644
--- a/page_processor.py
+++ b/page_processor.py
@@ -20,6 +20,7 @@ from PIL import Image, ImageOps
 from utilities import Util
 from page import StandardPage, BlogPage, BlogEntry, ArticlePage, GalleryPage
 from input_validator import ImageDescriptionValidator
+from load_yaml_errorhandling_parameters import LoadYAMLErrorHandlingParameters
 
 
 class PageProcessor:
@@ -100,10 +101,12 @@ class PageProcessor:
                 Path(image_directory_path).joinpath(gallery_file).with_suffix(".yaml")
             )
             error_message = "Could not load image definition: %s", description_file
+            error_handling_parameters = LoadYAMLErrorHandlingParameters(
+                error_message=error_message, error_on_absent_file=False
+            )
             page.image_descriptions[gallery_file] = Util.load_yaml(
                 description_file,
-                error_message,
-                error_on_absent_file=False,
+                error_handling_parameters,
                 validator=ImageDescriptionValidator(),
             )
 
diff --git a/utilities.py b/utilities.py
index e0d4131..c179d57 100644
--- a/utilities.py
+++ b/utilities.py
@@ -13,6 +13,7 @@ import yaml
 
 # staysail modules
 from input_validator import InputValidator
+from load_yaml_errorhandling_parameters import LoadYAMLErrorHandlingParameters
 
 
 class Util:
@@ -45,9 +46,7 @@ class Util:
     def load_yaml(
         cls,
         file,
-        error_message=None,
-        exit_on_error=False,
-        error_on_absent_file=True,
+        error_handling_parameters: LoadYAMLErrorHandlingParameters,
         validator=False,
     ):
         """
@@ -62,14 +61,14 @@ class Util:
                 try:
                     yaml_data = yaml.safe_load(file_stream)
                 except yaml.YAMLError as load_error:
-                    logging.error(error_message)
+                    logging.error(error_handling_parameters.error_message)
                     logging.error(load_error)
         else:
-            if error_on_absent_file:
+            if error_handling_parameters.error_on_absent_file:
                 logging.error("File not found!: %s", file)
             else:
                 logging.debug("File not found!: %s", file)
-            if exit_on_error:
+            if error_handling_parameters.exit_on_error:
                 sys.exit(1)
 
         if isinstance(validator, InputValidator):
-- 
GitLab