class AppConfig(Config): app_host = field("APP_HOST", default="0.0.0.0") app_port = field("APP_PORT", default=9999) insta_cookie = field("INSTA_COOKIE") vk_token = field("VK_TOKEN")
class SettingsConfig(Config): api_token = field("api_token", provider=provider, default="demo") metrics = field("metrics", provider=provider) graphite_host = field("graphite", provider=provider, default="graphite") base_url = field("base_url", provider=provider, default="https://www.alphavantage.co/query?function" "=CURRENCY_EXCHANGE_RATE")
class TestConfig(Config): debug = field("DEBUG", default=False, caster=to_bool) class Sub1Config: class Sub2Config: config_1 = field(default="base.mail.com") config_2 = field(default="465") config_3 = field(default="test")
class BaseConfig(Config): debug = field(default=False, caster=to_bool) class Integration: class SMTP: server = field(default='smtp.gmail.com') port = field(default='465') login = field() password = field()
class Test(BaseConfig): _prefix_ = 'TEST' debug = field(default=True, caster=to_bool) class Integration(BaseConfig.Integration): class SMTP(BaseConfig.Integration.SMTP): login = field(default='*****@*****.**') password = field(default='123456')
class SMTP: server = field(default='smtp.gmail.com') port = field(default='465') login = field() password = field()
class Integration(BaseConfig.Integration): class SMTP(BaseConfig.Integration.SMTP): login = field(default='*****@*****.**') password = field(default='123456') class Test(BaseConfig): _prefix_ = 'TEST' debug = field(default=True, caster=to_bool) class Integration(BaseConfig.Integration): class SMTP(BaseConfig.Integration.SMTP): login = field(default='*****@*****.**') password = field(default='123456') class TypeConfig(ConstantCaster): ABLE_TO_CAST = {"test": Test, 'prod': Prod} if __name__ == "__main__": try: config: typing.Union[Test, Prod] = field('TYPE_CONFIG', caster=TypeConfig(), default=Test).value print(as_dict(config)) print(f'Mode debug: {config.debug}. SMTP login: {config.Integration.SMTP.login}') except VariableNotFoundError as ex: print(ex.message)
class ConfigWithMyProvider(Config): var1 = field("var_1", provider=provider)
class ConfigOverride(Config): var1 = field("var_1", default=1)
class ConfigDefault(Config): var1 = field("var_1", default="var_1 value") var2 = field("var_2", default=lambda: "callable var_2")
class Sub2Config(TestConfig.Sub1Config.Sub2Config): config_1 = field(default="prod.mail.com") config_2 = field(default="465")
class Sub2Config: config_1 = field(default="base.mail.com") config_2 = field(default="465") config_3 = field(default="test")
class BaseConfig(Config): config_1 = field()
class MyConfig(Config): text = field("text-with-dashes", caster=to_dot)
class MyConfig(Config): boolean = field("boolean", caster=to_bool) integer = field("integer", caster=to_int)
class AccountInfo(Config): username = field("ACCOUNT_USERNAME") password = field("ACCOUNT_PASSWORD") id = field("ACCOUNT_ID", caster=to_int)
class SMTP(BaseConfig.Integration.SMTP): login = field(default='*****@*****.**') password = field(default='123456')
class ConfigBad(Config): var1 = field(VAR_1)
def __init__(self, provider): self._email = field("email", provider=provider) self._password = field("password", provider=provider) self._notify_email = field("notification email", provider=provider)
class ConfigGood(Config): var1 = field(VAR_1)