From b91535bb146fc7dfe3d205a27bf2ff86ae46f55b Mon Sep 17 00:00:00 2001 From: KevinNitroG Date: Thu, 18 Jan 2024 19:22:11 +0700 Subject: [PATCH] =?UTF-8?q?=F0=9F=8E=A8=20Split=20setup=20dotenv=20&=20log?= =?UTF-8?q?ger=20in=20the=20logical=20way?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- VNULIB-Downloader.py | 2 +- src/CONSTANTS.py | 3 +++ src/utils/__init__.py | 55 +++++----------------------------------- src/utils/setupDotEnv.py | 26 +++++++++++++++++++ src/utils/setupLogger.py | 47 ++++++++++++++++++++++++++++++++++ src/utils/utils.py | 12 +++++++++ 6 files changed, 95 insertions(+), 50 deletions(-) create mode 100644 src/utils/setupDotEnv.py create mode 100644 src/utils/setupLogger.py diff --git a/VNULIB-Downloader.py b/VNULIB-Downloader.py index d50dbde..0ec4d52 100644 --- a/VNULIB-Downloader.py +++ b/VNULIB-Downloader.py @@ -1,6 +1,6 @@ """VNULIB Downloader""" -from src.utils import pause +from src.utils.utils import pause from src.utils.printIntro import printIntro diff --git a/src/CONSTANTS.py b/src/CONSTANTS.py index 7ffadbd..1895267 100644 --- a/src/CONSTANTS.py +++ b/src/CONSTANTS.py @@ -15,3 +15,6 @@ ██████╔╝╚██████╔╝╚███╔███╔╝██║ ╚████║███████╗╚██████╔╝██║ ██║██████╔╝███████╗██║ ██║ ╚═════╝ ╚═════╝ ╚══╝╚══╝ ╚═╝ ╚═══╝╚══════╝ ╚═════╝ ╚═╝ ╚═╝╚═════╝ ╚══════╝╚═╝ ╚═╝ """ +LOGGER_MODE: list[str] = ['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'] +DOTENV_TRUE_VALUES: list[str] = ['True', 'true', '1'] +DOTENV_FALSE_VALUES: list[str] = ['False', 'false', '0', '', ' '] diff --git a/src/utils/__init__.py b/src/utils/__init__.py index f37250c..e360495 100644 --- a/src/utils/__init__.py +++ b/src/utils/__init__.py @@ -1,56 +1,13 @@ -from os import get_terminal_size, getenv -from typing import Literal -from logging import basicConfig -from datetime import datetime +from os import get_terminal_size from dotenv import load_dotenv -from utils import createDirectory -from utils.printColor import printWarning, printInfo +from setupDotEnv import setupConfigEnv +from setupLogger import setupLogger -LOGGER_MODE = Literal['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'] -DOTENV_TRUE_VALUES: list[str] = ['True', 'true', '1'] -DOTENV_FALSE_VALUES: list[str] = ['False', 'false', '0', '', ' '] TERMINAL_SIZE_COLUMNS: int = get_terminal_size().columns -def pause() -> None: - """Pause the terminal until user hits Enter - - Params: - - None - - Returns: - - None - """ - _: str = input('Press Enter to continue . . .') - - -def setupLogger(level: str | None = 'INFO') -> None: - """Setup the logger - - Params: - - level (str | None): The level to log at. Only accept DEBUG, INFO, WARNING, ERROR, CRITICAL - - Returns: - - None - """ - createDirectory('logs') - file_name: str = datetime.now().strftime(format='%Y-%m-%d-%H-%M-%S') + '.log' - basicConfig( - filename=f'log/{file_name}', - format="%(asctime)s - %(levelname)s - %(message)s - %(filename)s:%(lineno)d", - level=level - ) - - -# SETUP LOGGER +setupConfigEnv() load_dotenv(dotenv_path='config.env') -if getenv(key='LOG') in DOTENV_TRUE_VALUES: - LOG_LEVEL: str | None = getenv(key='LOG_LEVEL') - if LOG_LEVEL is None: - printWarning( - message='LOG_LEVEL is not set in config.env. Defaulting to INFO') - setupLogger() - else: - printInfo(message=f'LOG_LEVEL is set to {LOG_LEVEL}') - setupLogger(level=LOG_LEVEL) + +setupLogger() diff --git a/src/utils/setupDotEnv.py b/src/utils/setupDotEnv.py new file mode 100644 index 0000000..cbd5edb --- /dev/null +++ b/src/utils/setupDotEnv.py @@ -0,0 +1,26 @@ +"""Setup .env file for the project.""" + + +from os import path +from requests import get +from printColor import printInfo + + +def setupConfigEnv(file_name: str = 'config.env') -> None: + """Setup the config.env file + + Params: + - file_name (str): The name of the config file (Default: config.env) + + Returns: + - None + """ + if not path.exists(path=file_name): + printInfo( + message=f'{file_name} does not exist. Fetch the config from repository') + with open(file=file_name, mode='w', encoding='utf-8') as file: + content = get( + url='https://raw.githubusercontent.com/KevinNitroG/VNULIB-Downloader/main/config-sample.env', + allow_redirects=True + ).content.decode(encoding='utf-8') + file.write(content) diff --git a/src/utils/setupLogger.py b/src/utils/setupLogger.py new file mode 100644 index 0000000..d8154f5 --- /dev/null +++ b/src/utils/setupLogger.py @@ -0,0 +1,47 @@ +"""Setup the logger""" + + +from os import getenv +from logging import basicConfig +from datetime import datetime +from utils import createDirectory +from utils.printColor import printWarning, printInfo +from ..CONSTANTS import DOTENV_TRUE_VALUES + + +def setupLoggerNow(level: str | None = 'INFO') -> None: + """Setup the logger + + Params: + - level (str | None): The level to log at. Only accept DEBUG, INFO, WARNING, ERROR, CRITICAL + + Returns: + - None + """ + createDirectory('logs') + file_name: str = datetime.now().strftime(format='%Y-%m-%d-%H-%M-%S') + '.log' + basicConfig( + filename=f'log/{file_name}', + format="%(asctime)s - %(levelname)s - %(message)s - %(filename)s:%(lineno)d", + level=level + ) + + +def setupLogger() -> None: + """Check to decide whether to setup the logger or not + + Params: + - None + + Returns: + - None + """ + if getenv(key='LOG') in DOTENV_TRUE_VALUES: + LOG_LEVEL: str | None = getenv(key='LOG_LEVEL') + if LOG_LEVEL is None: + printWarning( + message='LOG_LEVEL is not set in config.env. Defaulting to INFO') + setupLoggerNow() + else: + printInfo(message=f'LOG_LEVEL is set to {LOG_LEVEL}') + setupLoggerNow(level=LOG_LEVEL) diff --git a/src/utils/utils.py b/src/utils/utils.py index 6df0f6e..fe090ef 100644 --- a/src/utils/utils.py +++ b/src/utils/utils.py @@ -4,6 +4,18 @@ from os import makedirs, path, removedirs +def pause() -> None: + """Pause the terminal until user hits Enter + + Params: + - None + + Returns: + - None + """ + _: str = input('Press Enter to continue . . .') + + def createDirectory(*directories: str) -> None: """Create directories if they do not exist