fix(shared): type is required for default config submodel (#1536)

We cannot load submodels values from environment variables without having the submodel type annotations.
This commit is contained in:
Jonas L 2022-01-24 14:24:16 +01:00 committed by GitHub
parent d93fb44356
commit 1924919e18
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 21 additions and 24 deletions

View File

@ -2,4 +2,4 @@ from libretime_shared.config import BaseConfig, RabbitMQConfig
class Config(BaseConfig): class Config(BaseConfig):
rabbitmq = RabbitMQConfig() rabbitmq: RabbitMQConfig = RabbitMQConfig()

View File

@ -23,5 +23,5 @@ class PlayoutConfig(BaseModel):
class Config(BaseConfig): class Config(BaseConfig):
rabbitmq = RabbitMQConfig() rabbitmq: RabbitMQConfig = RabbitMQConfig()
playout = PlayoutConfig() playout: PlayoutConfig = PlayoutConfig()

View File

@ -4,13 +4,14 @@ from unittest import mock
from pytest import mark, raises from pytest import mark, raises
from libretime_shared.config import BaseConfig, DatabaseConfig from libretime_shared.config import BaseConfig, DatabaseConfig, RabbitMQConfig
# pylint: disable=too-few-public-methods # pylint: disable=too-few-public-methods
class FixtureConfig(BaseConfig): class FixtureConfig(BaseConfig):
api_key: str api_key: str
database: DatabaseConfig database: DatabaseConfig
rabbitmq: RabbitMQConfig = RabbitMQConfig()
FIXTURE_CONFIG_RAW = """ FIXTURE_CONFIG_RAW = """
@ -19,7 +20,7 @@ api_key: "f3bf04fc"
# Comment ! # Comment !
database: database:
host: "localhost" host: "localhost"
port: 5672 port: 5432
ignored: "ignored" ignored: "ignored"
""" """
@ -35,6 +36,7 @@ def test_base_config(tmp_path: Path):
LIBRETIME_API="invalid", LIBRETIME_API="invalid",
LIBRETIME_DATABASE="invalid", LIBRETIME_DATABASE="invalid",
LIBRETIME_DATABASE_PORT="8888", LIBRETIME_DATABASE_PORT="8888",
LIBRETIME_RABBITMQ_HOST="changed",
WRONGPREFIX_API_KEY="invalid", WRONGPREFIX_API_KEY="invalid",
), ),
): ):
@ -43,6 +45,20 @@ def test_base_config(tmp_path: Path):
assert config.api_key == "f3bf04fc" assert config.api_key == "f3bf04fc"
assert config.database.host == "localhost" assert config.database.host == "localhost"
assert config.database.port == 8888 assert config.database.port == 8888
assert config.rabbitmq.host == "changed"
assert config.rabbitmq.port == 5672
# Optional model: loading default values (rabbitmq)
with mock.patch.dict(environ, dict()):
config = FixtureConfig(filepath=config_filepath)
assert config.rabbitmq.host == "localhost"
assert config.rabbitmq.port == 5672
# Optional model: overriding using environment (rabbitmq)
with mock.patch.dict(environ, dict(LIBRETIME_RABBITMQ_HOST="changed")):
config = FixtureConfig(filepath=config_filepath)
assert config.rabbitmq.host == "changed"
assert config.rabbitmq.port == 5672
FIXTURE_CONFIG_RAW_INI = """ FIXTURE_CONFIG_RAW_INI = """
@ -67,25 +83,6 @@ def test_base_config_ini(tmp_path: Path):
assert config.database.port == 6666 assert config.database.port == 6666
# pylint: disable=too-few-public-methods
class FixtureOptionalConfig(BaseConfig):
database = DatabaseConfig()
def test_base_config_optional():
with mock.patch.dict(environ, dict()):
config = FixtureOptionalConfig()
assert config.database.host == "localhost"
assert config.database.port == 5432
with mock.patch.dict(environ, dict(LIBRETIME_DATABASE_HOST="changed")):
config = FixtureOptionalConfig()
assert config.database.host == "changed"
assert config.database.port == 5432
FIXTURE_CONFIG_RAW_MISSING = """ FIXTURE_CONFIG_RAW_MISSING = """
database: database:
host: "localhost" host: "localhost"