def test_registration_with_default(expect): converters.register(datetime, DateTimeConverter) @datafile("../tmp/sample.yml") class Timestamp: dt: datetime = None ts = Timestamp(datetime(2019, 1, 29)) expect(ts.datafile.text) == "dt: '2019-01-29T00:00:00'\n" ts = Timestamp() expect(ts.dt) == datetime(2019, 1, 29) ts.datafile.text = "dt: '2019-01-22T00:00:00'\n" expect(ts.dt.day) == 22
return self.account_age.total_seconds() / 3600 @property def account_age_in_years(self) -> float: return self.account_age_in_hours / 24 / 365.25 @property def tweets_per_hour(self) -> float: return self.tweets / self.account_age_in_hours @datafile("../data/blocklist.json", defaults=True) class Blocklist: bots: List[Account] = field(default_factory=list) class DateTimeConverter(converters.Converter): # pylint: disable=arguments-differ,unused-argument @classmethod def to_preserialization_data(cls, python_value, **kwargs): if isinstance(python_value, datetime): return python_value.isoformat() return python_value @classmethod def to_python_value(cls, deserialized_data, **kwargs): return datetime.fromisoformat(deserialized_data) converters.register(datetime, DateTimeConverter)
def with_new_type(expect): converters.register(MyCustomString, converters.String) converter = converters.map_type(MyCustomString) expect(converter) == converters.String