blitz_api/app/api/config.py

50 lines
1.4 KiB
Python
Raw Permalink Normal View History

import os
2025-03-25 09:48:40 +01:00
from typing import Any
from decouple import (
Config,
RepositoryEmpty,
RepositoryEnv,
Undefined,
UndefinedValueError,
)
from loguru import logger
_config: Config | None = None
def config(
option: str,
default: Any | Undefined = Undefined(),
cast: Any | Undefined = Undefined(),
) -> Any:
if _config is None:
_setup_config()
logger.trace("Configuration was not initialized => calling setup_config()")
try:
if _config is not None: # query again, to please the linter
return _config(option, default=default, cast=cast)
except UndefinedValueError as e:
logger.debug(f"Type of _config: {_config}")
raise e
def _setup_config():
global _config
file_path = os.environ.get("BAPI_ENV_PATH")
file_path = "" if file_path is None else os.path.abspath(file_path)
try:
if os.path.isfile(file_path):
logger.info(f"Using configuration from: {file_path}")
_config = Config(RepositoryEnv(file_path))
elif os.path.isfile(".env"):
logger.info("Using configuration from: .env")
_config = Config(RepositoryEnv(".env"))
else:
logger.info("No configuration file found, using empty repository")
_config = Config(RepositoryEmpty())
except Exception as e:
logger.error(f"Exception {e}, using empty repository")
_config = Config(RepositoryEmpty())