from dataclasses import dataclass
from typing import Generic, TypeVar
from q2_sdk.hq.models.db_config.db_dynamic_config import DbDynamicConfig
T = TypeVar("T")
@dataclass
class EnvValue(Generic[T]):
prod: T
stg: T
dev: T
def resolve(self) -> T:
from q2_sdk.core.configuration import settings
match settings.DEPLOY_ENV: # noqa: E999
case "PROD":
return self.prod
case "STG":
return self.stg
case _:
return self.dev
[docs]
class DbEnvConfig(DbDynamicConfig[T]):
"""
Variant of DbConfig that dynamically updates the default value based on the environment currently deployed to (i.e. dev, production, or staging).
"""
def __init__(self, name, default: EnvValue[T], description=None, required=True):
"""
:param name: Key written to the database
:param default: An instance of EnvValue with default values for PROD, STG, and DEV
:param required: If True, will raise errors at runtime when unset. Consider using False
when DbConfigs are added to an already deployed extension
"""
super().__init__(name, default.resolve, description, required)