diff --git a/README.md b/README.md index cf2761b..bd9b1f9 100644 --- a/README.md +++ b/README.md @@ -18,10 +18,10 @@ The `znfields.field` supports all arguments from `dataclasses.field` with the ad import dataclasses import znfields -def example1_parameter_getter(self, name): +def parameter_getter(self, name): return f"{name}:{self.__dict__[name]}" @dataclasses.dataclass -class Example3(znfields.Base): - parameter: float = znfields.field(getter=example1_parameter_getter) +class ClassWithParameter(znfields.Base): + parameter: float = znfields.field(getter=parameter_getter) ``` diff --git a/tests/test_znfields.py b/tests/test_znfields.py index 9d26dd4..b10ca93 100644 --- a/tests/test_znfields.py +++ b/tests/test_znfields.py @@ -1,21 +1,43 @@ import dataclasses -import znfields + import pytest +import znfields + def example1_parameter_getter(self, name): return f"{name}:{self.__dict__[name]}" +def stringify_list(self, name): + content = self.__dict__[name] + self.__dict__[name] = [str(x) for x in content] + # Can not return a copy to append to, but must be the same object + return self.__dict__[name] + + @dataclasses.dataclass class Example1(znfields.Base): parameter: float = znfields.field(getter=example1_parameter_getter) +@dataclasses.dataclass +class Example1WithDefault(znfields.Base): + parameter: float = znfields.field(getter=example1_parameter_getter, default=1) + + +@dataclasses.dataclass +class Example1WithDefaultFactory(znfields.Base): + parameter: list = znfields.field(getter=stringify_list, default_factory=list) + + def test_example1(): example = Example1(parameter=1) assert example.parameter == "parameter:1" + exampe_w_default = Example1WithDefault() + assert exampe_w_default.parameter == "parameter:1" + def test_example1_with_update(): example = Example1(parameter=1) @@ -125,3 +147,10 @@ class MyDataClass(znfields.Base): def test_metadata_must_be_dict(): with pytest.raises(TypeError): znfields.field(metadata="not a dict", getter=lambda instance, name: None) + + +def test_default_factory(): + example = Example1WithDefaultFactory() + assert example.parameter == [] + example.parameter.append(1) + assert example.parameter == ["1"]