-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtest_case.tmpl
88 lines (73 loc) · 2.33 KB
/
test_case.tmpl
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
<tmpl name="private_fields">
_{{ py_name }}: Optional[{{ py_type }}] = None
</tmpl>
<tmpl name="property">
@property
def {{ py_name }}(self):
return _{{ py_name }}
@{{ py_name }}.setter
def {{ py_name }}(self, value: {{ py_type }}):
self.{{ py_name }} = value
if self.on_dirty_callback is None:
raise Exception("Orphan {{ py_class_name }}")
else:
self.on_dirty_callback(self)
</tmpl>
<select name="to_json_item_sel" var="is_struct">
<case test="True">
"{{ json_name }}": self._{{ py_name }}.to_json() if self._{{ py_name }} is not None else None
</case>
<case test="False">
"{{ json_name }}": self._{{ py_name }}
asdf
sdfg
edfgj
uior
</case>
</select>
<tmpl name="to_json_item">
{{ use(to_json_item_sel) }}
</tmpl>
<select name="from_json_item_normal_struct_sel" var="is_struct">
<case test="True">
self._{{ py_name }} = {{ name }}().from_json(json["{{ json_name }}"]) if "{{ json_name }}" in json and json["{{ json_name }}"] is not None else {{ name }}()
</case>
<case test="False">
self._{{ py_name }} = json["{{ json_name }}"] if "{{ json_name }}" in json else None
</case>
</select>
<select name="from_json_item_list_struct_sel" var="is_struct">
<case test="True">
self._{{ py_name }} = [{{ name }}().from_json(json[d]) for d in json["{{ json_name }}"]] if "{{ json_name }}" in json and json["{{ json_name }}"] is not None else {{ name }}()
</case>
<case test="True">
self._{{ py_name }} = json["{{ json_name }}"] if "{{ json_name }}" in json and json["{{ json_name }}"] is not None else None
</case>
</select>
<select name="from_json_item_sel" var="is_list">
<case test="True">
{{ use(from_json_item_list_struct_sel) }}
</case>
<case test="False">
{{ use(from_json_item_normal_struct_sel) }}
</case>
</select>
<tmpl name="from_json_item">
{{ use(from_json_item_sel) }}
</tmpl>
<tmpl name="$main$">
from dataclasses import dataclass
from typing import List, Optional, Callable
@dataclass
class {{ py_class_name }}:
{% private_fields <- fields %}
on_dirty_callback: Optional[Callable["{{ py_class_name }}", None]]
def to_json(self):
return {
{% to_json_item <- fields %}
}
def from_json(self, json: dict) -> "{{ py_class_name }}":
{% from_json_item <- fields %}
return self
{% property <- fields %}
</tmpl>