Added friendly config validation messages
authorAdam Dullage <redacted>
Thu, 6 Oct 2022 12:19:14 +0000 (13:19 +0100)
committerAdam Dullage <redacted>
Thu, 6 Oct 2022 12:19:14 +0000 (13:19 +0100)
flatnotes/config.py
flatnotes/flatnotes.py
flatnotes/logger.py [new file with mode: 0644]
flatnotes/main.py

index 5bec5b8c042f58387433890691a5d1c1b0ad7a49..1f94856294b3521aa9359d4b15c3a5c2c1ef1e5a 100644 (file)
@@ -1,30 +1,53 @@
 import os
 
+from logger import logger
+
 
 class Config:
     def __init__(self) -> None:
-        self.data_path = self.load_data_path()
-
-        self.username = self.load_username()
-        self.password = self.load_password()
-
-        self.session_key = self.load_session_key()
-        self.session_expiry_days = self.load_session_expiry_days()
-
-    def load_data_path(self):
-        return os.environ["FLATNOTES_PATH"]
-
-    def load_username(self):
-        return os.environ["FLATNOTES_USERNAME"]
-
-    def load_password(self):
-        return os.environ["FLATNOTES_PASSWORD"]
-
-    def load_session_key(self):
-        return os.environ["FLATNOTES_SECRET_KEY"]
-
-    def load_session_expiry_days(self):
-        return int(os.environ.get("FLATNOTES_SESSION_EXPIRY_DAYS", 30))
+        self.data_path = self.get_data_path()
+
+        self.username = self.get_username()
+        self.password = self.get_password()
+
+        self.session_key = self.get_session_key()
+        self.session_expiry_days = self.get_session_expiry_days()
+
+    @classmethod
+    def get_env(cls, key, mandatory=False, default=None, cast_int=False):
+        value = os.environ.get(key)
+        if mandatory and not value:
+            logger.error(f"Environment variable {key} must be set.")
+            exit(1)
+        if not mandatory and not value:
+            return default
+        if cast_int:
+            try:
+                value = int(value)
+            except (TypeError, ValueError):
+                logger.error(f"Invalid value '{value}' for {key}.")
+                exit(1)
+        return value
+
+    def get_data_path(self):
+        return self.get_env("FLATNOTES_PATH", mandatory=True)
+
+    def get_username(self):
+        return self.get_env("FLATNOTES_USERNAME", mandatory=True)
+
+    def get_password(self):
+        return self.get_env("FLATNOTES_PASSWORD", mandatory=True)
+
+    def get_session_key(self):
+        return self.get_env("FLATNOTES_SECRET_KEY", mandatory=True)
+
+    def get_session_expiry_days(self):
+        return self.get_env(
+            "FLATNOTES_SESSION_EXPIRY_DAYS",
+            mandatory=False,
+            default=30,
+            cast_int=True,
+        )
 
 
 config = Config()
index 7536eb5ede462c8711407de268bd5c55af63aa0a..e0d87c36a09445d62f6020b1e7523922d486d47e 100644 (file)
@@ -1,5 +1,4 @@
 import glob
-import logging
 import os
 import re
 from datetime import datetime
@@ -18,6 +17,7 @@ from whoosh.searching import Hit
 from whoosh.support.charset import accent_map
 
 from helpers import empty_dir, re_extract, strip_ext
+from logger import logger
 
 MARKDOWN_EXT = ".md"
 INDEX_SCHEMA_VERSION = "3"
@@ -183,17 +183,17 @@ class Flatnotes(object):
         if index_dir_exists and whoosh.index.exists_in(
             self.index_dir, indexname=INDEX_SCHEMA_VERSION
         ):
-            logging.info("Loading existing index")
+            logger.info("Loading existing index")
             return whoosh.index.open_dir(
                 self.index_dir, indexname=INDEX_SCHEMA_VERSION
             )
         else:
             if index_dir_exists:
-                logging.info("Deleting outdated index")
+                logger.info("Deleting outdated index")
                 empty_dir(self.index_dir)
             else:
                 os.mkdir(self.index_dir)
-            logging.info("Creating new index")
+            logger.info("Creating new index")
             return whoosh.index.create_in(
                 self.index_dir, IndexSchema, indexname=INDEX_SCHEMA_VERSION
             )
@@ -251,13 +251,13 @@ class Flatnotes(object):
                 # Delete missing
                 if not os.path.exists(idx_filepath):
                     writer.delete_by_term("filename", idx_filename)
-                    logging.info(f"'{idx_filename}' removed from index")
+                    logger.info(f"'{idx_filename}' removed from index")
                 # Update modified
                 elif (
                     datetime.fromtimestamp(os.path.getmtime(idx_filepath))
                     != idx_note["last_modified"]
                 ):
-                    logging.info(f"'{idx_filename}' updated")
+                    logger.info(f"'{idx_filename}' updated")
                     self._add_note_to_index(
                         writer, Note(self, strip_ext(idx_filename))
                     )
@@ -269,7 +269,7 @@ class Flatnotes(object):
         for note in self._get_notes():
             if note.filename not in indexed:
                 self._add_note_to_index(writer, note)
-                logging.info(f"'{note.filename}' added to index")
+                logger.info(f"'{note.filename}' added to index")
         writer.commit()
         self.last_index_update = datetime.now()
 
diff --git a/flatnotes/logger.py b/flatnotes/logger.py
new file mode 100644 (file)
index 0000000..7b89d95
--- /dev/null
@@ -0,0 +1,9 @@
+import logging
+import os
+
+logging.basicConfig(
+    format="%(asctime)s [%(levelname)s]: %(message)s",
+    datefmt="%Y-%m-%d %H:%M:%S",
+)
+logger = logging.getLogger()
+logger.setLevel(os.environ.get("LOGLEVEL", "INFO").upper())
index 96e1c736140c3e3bc36e880135352a57f2048219..63dbe1fe4a0ace9acdb754cccc7de7352b041b0f 100644 (file)
@@ -1,5 +1,3 @@
-import logging
-import os
 import secrets
 from typing import List, Literal
 
@@ -17,13 +15,6 @@ from error_responses import (
 from flatnotes import Flatnotes, InvalidTitleError, Note
 from models import LoginModel, NoteModel, NotePatchModel, SearchResultModel
 
-logging.basicConfig(
-    format="%(asctime)s [%(levelname)s]: %(message)s",
-    datefmt="%Y-%m-%d %H:%M:%S",
-)
-logger = logging.getLogger()
-logger.setLevel(os.environ.get("LOGLEVEL", "INFO").upper())
-
 app = FastAPI()
 flatnotes = Flatnotes(config.data_path)
 
git clone https://git.99rst.org/PROJECT