def test_missing_default(): @dataclass class Config: param: Optional[int] = field(default=_DEFAULT, ) cfg = Config() with pytest.raises(KeyError): _with_defaults(cfg, 'my-default')
def test_default_none(): @dataclass class Config: param: Optional[int] = field( default=_DEFAULT, metadata={ 'my-default': None, }, ) cfg = Config() assert cfg.param is _DEFAULT cfg_with_defaults = _with_defaults(cfg, 'my-default') assert cfg_with_defaults.param is None
def test_change_default(): # all params should be optional @dataclass class Config: foo: Optional[float] = field( default=cast(None, _DEFAULT), metadata={ 'validate': _optional(_chain(_of_type(int, float), _positive)), 'test-default': 1234, }, ) def __post_init__(self): _validate(self) assert _with_defaults(Config(foo=1), 'test-default').foo == 1
def test_configuration(): # all params should be optional config = Configuration() _with_defaults(config, 'client-default') _with_defaults(config, 'server-default')