From: Adam Dullage Date: Thu, 6 Oct 2022 12:19:14 +0000 (+0100) Subject: Added friendly config validation messages X-Git-Url: http://git.99rst.org/?a=commitdiff_plain;h=afa9e47555fa4d4069c2377beab0e11ce4b8c912;p=flatnotes.git Added friendly config validation messages --- diff --git a/flatnotes/config.py b/flatnotes/config.py index 5bec5b8..1f94856 100644 --- a/flatnotes/config.py +++ b/flatnotes/config.py @@ -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() diff --git a/flatnotes/flatnotes.py b/flatnotes/flatnotes.py index 7536eb5..e0d87c3 100644 --- a/flatnotes/flatnotes.py +++ b/flatnotes/flatnotes.py @@ -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 index 0000000..7b89d95 --- /dev/null +++ b/flatnotes/logger.py @@ -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()) diff --git a/flatnotes/main.py b/flatnotes/main.py index 96e1c73..63dbe1f 100644 --- a/flatnotes/main.py +++ b/flatnotes/main.py @@ -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)