Source code for sticky_pi_api.configuration

import os
import dotenv
import logging


[docs]class RequiredConfVar(object): pass
[docs]class BaseAPIConf(dict): _config_vars={ 'SECRET_API_KEY': RequiredConfVar(), 'MYSQL_HOST': None } def __init__(self, env_file: str = None, **kwargs): super().__init__() if env_file: if not os.path.isfile(env_file): raise FileExistsError("No such file: %s", env_file) dotenv.load_dotenv(env_file) for var_name, default_value in self._config_vars.items(): # keyword arguments > ENV > ENV FILE if var_name in kwargs.keys(): self[var_name] = kwargs[var_name] else: self[var_name] = os.getenv(var_name) if not self[var_name]: if isinstance(default_value, RequiredConfVar): raise ValueError("No value provided for MANDATORY environment variable `%s'" % var_name) else: logging.info("No value provided for OPTIONAL environment variable `%s'. " "Using internal default value" % var_name) self[var_name] = default_value def __getattr__(self, attr): return self[attr] def __setattr__(self, attr, value): self[attr] = value
[docs]class LocalAPIConf(BaseAPIConf): _config_vars = { 'SECRET_API_KEY': "endjlwenmfkwe", 'LOCAL_DIR': RequiredConfVar() }
[docs]class RemoteAPIConf(BaseAPIConf): _config_vars = { 'SECRET_API_KEY': RequiredConfVar(), 'S3_HOST': RequiredConfVar(), 'S3_ACCESS_KEY': RequiredConfVar(), 'S3_PRIVATE_KEY': RequiredConfVar(), 'S3_BUCKET_NAME': RequiredConfVar(), 'MYSQL_HOST': RequiredConfVar(), 'MYSQL_USER': RequiredConfVar(), 'MYSQL_PASSWORD': RequiredConfVar(), 'MYSQL_DATABASE': RequiredConfVar(), 'API_PROFILE': RequiredConfVar() }