modular_api/services/environment_service.py (39 lines of code) (raw):
from typing import MutableMapping, Mapping
from modular_api.helpers.constants import Env, ServiceMode
class EnvironmentService:
__slots__ = '_source',
def __init__(self, source: MutableMapping):
self._source = source
def update_with(self, source: Mapping) -> None:
self._source.update(source)
def _ensure_env(self, name: Env) -> str:
"""
Raises runtime error if the given env is not set
:param name:
:return:
"""
if val := self._source.get(name.value):
return val
if name.default:
return name.default
raise RuntimeError(f'Env {name.value} is required')
def secret_key(self) -> str:
return self._ensure_env(Env.SECRET_KEY)
def mode(self) -> ServiceMode:
val = self._ensure_env(Env.MODE)
try:
return ServiceMode(val)
except ValueError:
return ServiceMode.SAAS
def api_calls_per_second_limit(self) -> int:
val = self._ensure_env(Env.API_CALLS_PER_SECOND_LIMIT)
# if TypeError it's server configuration error, don't think we
# should handle that case
return int(val)
def is_rate_limiting_enabled(self) -> bool:
return not Env.DISABLE_RATE_LIMITER.get()
def min_cli_version(self) -> str:
return self._ensure_env(Env.MIN_CLI_VERSION)
def is_private_mode_enabled(self) -> bool:
return self._ensure_env(Env.ENABLE_PRIVATE_MODE).lower() in (
'true', 'yes', 'y'
)
def mongo_uri(self) -> str:
return self._ensure_env(Env.MONGO_URI)
def mongo_database(self) -> str:
return self._ensure_env(Env.MONGO_DATABASE)
def mongo_rate_limits_database(self) -> str:
return self._ensure_env(Env.MONGO_RATE_LIMITS_DATABASE)