-
-
Notifications
You must be signed in to change notification settings - Fork 18
/
test_custom_converters.py
101 lines (66 loc) · 2.49 KB
/
test_custom_converters.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
# pylint: disable=arguments-differ
from datetime import datetime
import pytest
from datafiles import Missing, converters, datafile
class MyDateTime(converters.Converter, datetime):
"""A custom class modified to support serialization."""
@classmethod
def to_preserialization_data(cls, python_value, **_kwargs):
return python_value.isoformat()
@classmethod
def to_python_value(cls, deserialized_data, **_kwargs):
return MyDateTime.fromisoformat(deserialized_data)
class DateTimeConverter(converters.Converter):
"""A converter to serialize a custom class."""
@classmethod
def to_preserialization_data(cls, python_value, **_kwargs):
return python_value.isoformat()
@classmethod
def to_python_value(cls, deserialized_data, **_kwargs):
return datetime.fromisoformat(deserialized_data)
@pytest.mark.flaky
def test_extension(expect):
@datafile("../tmp/sample.yml")
class Timestamp:
dt: MyDateTime
ts = Timestamp(datetime(2019, 1, 29))
expect(ts.datafile.text) == "dt: '2019-01-29T00:00:00'\n"
ts = Timestamp(Missing)
expect(ts.dt) == datetime(2019, 1, 29)
ts.datafile.text = "dt: '2019-01-11T00:00:00'\n"
expect(ts.dt.day) == 11
@pytest.mark.flaky
def test_extension_with_default(expect):
@datafile("../tmp/sample.yml")
class Timestamp:
dt: MyDateTime = 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-11T00:00:00'\n"
expect(ts.dt.day) == 11
@pytest.mark.flaky
def test_registration(expect):
converters.register(datetime, DateTimeConverter)
@datafile("../tmp/sample.yml")
class Timestamp:
dt: datetime
ts = Timestamp(datetime(2019, 1, 29))
expect(ts.datafile.text) == "dt: '2019-01-29T00:00:00'\n"
ts = Timestamp(Missing)
expect(ts.dt) == datetime(2019, 1, 29)
ts.datafile.text = "dt: '2019-01-22T00:00:00'\n"
expect(ts.dt.day) == 22
@pytest.mark.flaky
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