diff --git a/Makefile b/Makefile index e0156bb..14a7f63 100644 --- a/Makefile +++ b/Makefile @@ -18,6 +18,7 @@ endif venv3: ### Creates a virtual environment for this project test -d $(VENV) || python3.8 -m venv $(VENV) $(PIP) install --upgrade pip wheel setuptools twine + $(PIP) install -r requirements.txt $(PIP) install -r requirements-dev.txt clean: clean-build clean-pyc ### Cleans artifacts diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..f8e7061 --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +python-dotenv==1.0.0 diff --git a/src/core/ydata/core/common/environment.py b/src/core/ydata/core/common/environment.py new file mode 100644 index 0000000..3bfe25f --- /dev/null +++ b/src/core/ydata/core/common/environment.py @@ -0,0 +1,42 @@ +import os +from argparse import ArgumentParser +from enum import Enum + +from dotenv import load_dotenv + + +class Environment(Enum): + DEV = "development" + PROD = "production" + + @classmethod + def detect(cls, parser: ArgumentParser = ArgumentParser(description='parse environment')): + parser.add_argument('--env', type=str, required=False) + + args, _ = parser.parse_known_args() + env_string = args.env or 'prod' + + if env_string in ('dev', 'development'): + env_string = 'development' + elif env_string in ('prod', 'production'): + env_string = 'production' + else: + raise ValueError('missing environment') + + return cls(env_string) + + def load(self): + # load the file specific to the environment + load_dotenv(f'.env.{str(self.name).lower()}') + load_dotenv(f'.env.{self.value}') + + # Load the .env file if exists with default values + load_dotenv() + + @staticmethod + def get(key: str, default=None): + return os.getenv(key, default=default) + + @staticmethod + def set(key: str, value: str): + os.environ[key] = value diff --git a/src/core/ydata/core/common/logger.py b/src/core/ydata/core/common/logger.py new file mode 100644 index 0000000..7d5acac --- /dev/null +++ b/src/core/ydata/core/common/logger.py @@ -0,0 +1,15 @@ +import logging +from typing import TextIO +import sys + + +def create_logger(name, stream: TextIO = sys.stdout, level=logging.INFO): + handler = logging.StreamHandler(stream) + handler.setFormatter(logging.Formatter("%(asctime)s | %(levelname)s | %(module)s:%(lineno)d | %(message)s")) + + logger = logging.getLogger(name) + logger.setLevel(level) + logger.addHandler(handler) + logger.propagate = False + + return logger