tiferet 1.0.0a8__py3-none-any.whl → 1.0.0a9__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- tiferet/clients/yaml.py +14 -5
- tiferet/contexts/__init__.py +0 -1
- tiferet/contexts/app.py +7 -7
- tiferet/contexts/container.py +8 -4
- tiferet/contexts/feature.py +16 -9
- tiferet/contexts/request.py +6 -4
- tiferet/data/__init__.py +2 -1
- tiferet/data/app.py +107 -80
- tiferet/data/container.py +61 -27
- tiferet/data/error.py +32 -12
- tiferet/data/feature.py +17 -41
- tiferet/domain/__init__.py +2 -2
- tiferet/domain/app.py +0 -58
- tiferet/domain/container.py +26 -26
- tiferet/domain/core.py +43 -5
- tiferet/domain/error.py +18 -0
- tiferet/domain/feature.py +11 -3
- tiferet/repos/__init__.py +7 -0
- tiferet/repos/app.py +8 -4
- tiferet/repos/container.py +5 -46
- tiferet/repos/error.py +8 -8
- tiferet/repos/feature.py +6 -42
- tiferet/services/__init__.py +5 -1
- tiferet/services/app.py +52 -0
- {tiferet-1.0.0a8.dist-info → tiferet-1.0.0a9.dist-info}/METADATA +4 -5
- tiferet-1.0.0a9.dist-info/RECORD +38 -0
- {tiferet-1.0.0a8.dist-info → tiferet-1.0.0a9.dist-info}/WHEEL +1 -1
- tiferet/configs/app.py +0 -16
- tiferet/contexts/env.py +0 -122
- tiferet-1.0.0a8.dist-info/RECORD +0 -39
- {tiferet-1.0.0a8.dist-info → tiferet-1.0.0a9.dist-info}/LICENSE +0 -0
- {tiferet-1.0.0a8.dist-info → tiferet-1.0.0a9.dist-info}/top_level.txt +0 -0
tiferet/clients/yaml.py
CHANGED
@@ -77,16 +77,25 @@ def save(yaml_file: str, data: dict, data_save_path: str = None):
|
|
77
77
|
|
78
78
|
# If the new yaml data does not exist, create it from the yaml data.
|
79
79
|
except TypeError:
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
80
|
+
try:
|
81
|
+
new_yaml_data = yaml_data[fragment]
|
82
|
+
continue
|
83
|
+
|
84
|
+
# If the fragment does not exist, create it.
|
85
|
+
except KeyError:
|
86
|
+
new_yaml_data = yaml_data[fragment] = {}
|
87
|
+
|
88
|
+
# If the fragment does not exist, create it.
|
84
89
|
except KeyError:
|
85
90
|
new_yaml_data[fragment] = {}
|
86
91
|
new_yaml_data = new_yaml_data[fragment]
|
87
92
|
|
88
93
|
# Update the yaml data.
|
89
|
-
|
94
|
+
try:
|
95
|
+
new_yaml_data[save_path_list[-1]] = data
|
96
|
+
# if there is a type error because the new yaml data is None, update the yaml data directly.
|
97
|
+
except TypeError:
|
98
|
+
yaml_data[save_path_list[-1]] = data
|
90
99
|
|
91
100
|
# Save the updated yaml data.
|
92
101
|
with open(yaml_file, 'w') as file:
|
tiferet/contexts/__init__.py
CHANGED
tiferet/contexts/app.py
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# *** imports
|
2
2
|
|
3
3
|
# ** core
|
4
|
-
from typing import Any
|
4
|
+
from typing import Any, Tuple
|
5
5
|
|
6
6
|
# ** app
|
7
7
|
from .request import RequestContext
|
@@ -70,13 +70,13 @@ class AppInterfaceContext(Model):
|
|
70
70
|
# Initialize the model.
|
71
71
|
super().__init__(dict(
|
72
72
|
interface_id=interface_id,
|
73
|
-
name=app_name
|
74
|
-
features=feature_context,
|
75
|
-
errors=error_context
|
73
|
+
name=app_name
|
76
74
|
))
|
75
|
+
self.features = feature_context
|
76
|
+
self.errors = error_context
|
77
77
|
|
78
78
|
# * method: parse_request
|
79
|
-
def parse_request(self, request: Any, **kwargs) -> RequestContext:
|
79
|
+
def parse_request(self, request: Any, **kwargs) -> Tuple[RequestContext, dict]:
|
80
80
|
'''
|
81
81
|
Parse the incoming request.
|
82
82
|
|
@@ -89,7 +89,7 @@ class AppInterfaceContext(Model):
|
|
89
89
|
'''
|
90
90
|
|
91
91
|
# Parse request.
|
92
|
-
return request
|
92
|
+
return request, kwargs
|
93
93
|
|
94
94
|
# * method: execute_feature
|
95
95
|
def execute_feature(self, request: RequestContext, **kwargs):
|
@@ -130,7 +130,7 @@ class AppInterfaceContext(Model):
|
|
130
130
|
'''
|
131
131
|
|
132
132
|
# Parse request.
|
133
|
-
request = self.parse_request(**kwargs)
|
133
|
+
request, kwargs = self.parse_request(**kwargs)
|
134
134
|
|
135
135
|
# Execute feature context and return session.
|
136
136
|
# Handle error and return response if triggered.
|
tiferet/contexts/container.py
CHANGED
@@ -86,17 +86,21 @@ class ContainerContext(Model):
|
|
86
86
|
|
87
87
|
# Add the attributes to the context.
|
88
88
|
for attr in attrs:
|
89
|
-
|
90
|
-
|
89
|
+
|
91
90
|
# If the attribute already exists, set the dependencies.
|
92
91
|
if attr.id in attributes:
|
93
92
|
for dep in attr.dependencies:
|
94
|
-
|
93
|
+
attr.set_dependency(dep)
|
95
94
|
continue
|
96
95
|
|
97
96
|
# Otherwise, add the attribute.
|
98
97
|
attributes[attr.id] = attr
|
99
98
|
|
99
|
+
# Add any parameters as constants.
|
100
|
+
for dep in attr.dependencies:
|
101
|
+
for key in dep.parameters:
|
102
|
+
consts[key] = dep.parameters[key]
|
103
|
+
|
100
104
|
# Add the constants and attributes to the context.
|
101
105
|
super().__init__(dict(
|
102
106
|
interface_id=interface_id,
|
@@ -145,7 +149,7 @@ class ContainerContext(Model):
|
|
145
149
|
dependencies[attribute_id] = self.import_dependency(attribute, flag_map[attribute.type])
|
146
150
|
|
147
151
|
# Create container.
|
148
|
-
return container_service.create_injector(
|
152
|
+
return container_service.create_injector(
|
149
153
|
self.interface_id,
|
150
154
|
**self.constants,
|
151
155
|
**dependencies,
|
tiferet/contexts/feature.py
CHANGED
@@ -45,10 +45,12 @@ class FeatureContext(Model):
|
|
45
45
|
features = {feature.id: feature for feature in feature_repo.list()}
|
46
46
|
|
47
47
|
# Set the features and container.
|
48
|
+
## NOTE: There is a bug in the schematics library that does not allow us to initialize
|
49
|
+
## the feature context with the container context directly.
|
48
50
|
super().__init__(dict(
|
49
51
|
features=features,
|
50
|
-
container=container_context,
|
51
52
|
))
|
53
|
+
self.container = container_context
|
52
54
|
|
53
55
|
# * method: execute
|
54
56
|
def execute(self, request: RequestContext, debug: bool = False, **kwargs):
|
@@ -75,16 +77,21 @@ class FeatureContext(Model):
|
|
75
77
|
result = handler.execute(
|
76
78
|
**request.data,
|
77
79
|
**command.params,
|
80
|
+
debug=debug,
|
78
81
|
**kwargs)
|
82
|
+
|
83
|
+
# Return the result to the session context if return to data is set.
|
84
|
+
if command.return_to_data:
|
85
|
+
request.data[command.data_key] = result
|
86
|
+
continue
|
87
|
+
|
88
|
+
# Set the result in the request context.
|
89
|
+
if result:
|
90
|
+
request.set_result(result)
|
91
|
+
|
92
|
+
# Handle assertion errors if pass on error is not set.
|
79
93
|
except AssertionError as e:
|
80
94
|
if not command.pass_on_error:
|
81
95
|
raise e
|
82
96
|
|
83
|
-
|
84
|
-
if command.return_to_data:
|
85
|
-
request.data[command.data_key] = result
|
86
|
-
continue
|
87
|
-
|
88
|
-
# Set the result in the request context.
|
89
|
-
if result:
|
90
|
-
request.set_result(result)
|
97
|
+
|
tiferet/contexts/request.py
CHANGED
@@ -62,9 +62,11 @@ class RequestContext(Model):
|
|
62
62
|
'''
|
63
63
|
|
64
64
|
# Set the context attributes.
|
65
|
-
|
66
|
-
|
67
|
-
|
65
|
+
super().__init__(dict(
|
66
|
+
feature_id=feature_id,
|
67
|
+
headers=headers,
|
68
|
+
data=data
|
69
|
+
))
|
68
70
|
|
69
71
|
# Validate the context.
|
70
72
|
self.validate()
|
@@ -92,7 +94,7 @@ class RequestContext(Model):
|
|
92
94
|
return
|
93
95
|
|
94
96
|
# If the result is not a list, it must be a dict, so serialize it and set it.
|
95
|
-
if type(
|
97
|
+
if type(result) != list:
|
96
98
|
self.result = json.dumps(result)
|
97
99
|
return
|
98
100
|
|
tiferet/data/__init__.py
CHANGED
tiferet/data/app.py
CHANGED
@@ -9,6 +9,50 @@ from ..domain import DataObject
|
|
9
9
|
from ..domain.app import AppDependency, AppInterface, AppRepositoryConfiguration
|
10
10
|
|
11
11
|
|
12
|
+
# *** constants
|
13
|
+
|
14
|
+
# ** constant: app_dependency_default
|
15
|
+
FEATURE_CONTEXT_DEFAULT = dict(
|
16
|
+
module_path='tiferet.contexts.feature',
|
17
|
+
class_name='FeatureContext',
|
18
|
+
)
|
19
|
+
|
20
|
+
# * constant: app_dependency_default
|
21
|
+
CONTAINER_CONTEXT_DEFAULT = dict(
|
22
|
+
module_path='tiferet.contexts.container',
|
23
|
+
class_name='ContainerContext',
|
24
|
+
)
|
25
|
+
|
26
|
+
ERROR_CONTEXT_DEFAULT = dict(
|
27
|
+
module_path='tiferet.contexts.error',
|
28
|
+
class_name='ErrorContext',
|
29
|
+
)
|
30
|
+
|
31
|
+
FEATURE_REPO_DEFAULT = dict(
|
32
|
+
module_path='tiferet.repos.feature',
|
33
|
+
class_name='YamlProxy',
|
34
|
+
)
|
35
|
+
|
36
|
+
CONTAINER_REPO_DEFAULT = dict(
|
37
|
+
module_path='tiferet.repos.container',
|
38
|
+
class_name='YamlProxy',
|
39
|
+
)
|
40
|
+
|
41
|
+
ERROR_REPO_DEFAULT = dict(
|
42
|
+
module_path='tiferet.repos.error',
|
43
|
+
class_name='YamlProxy',
|
44
|
+
)
|
45
|
+
|
46
|
+
# ** constant: context_list_default
|
47
|
+
CONTEXT_LIST_DEFAULT = {
|
48
|
+
'feature_context': FEATURE_CONTEXT_DEFAULT,
|
49
|
+
'container_context': CONTAINER_CONTEXT_DEFAULT,
|
50
|
+
'error_context': ERROR_CONTEXT_DEFAULT,
|
51
|
+
'feature_repo': FEATURE_REPO_DEFAULT,
|
52
|
+
'container_repo': CONTAINER_REPO_DEFAULT,
|
53
|
+
'error_repo': ERROR_REPO_DEFAULT,
|
54
|
+
}
|
55
|
+
|
12
56
|
# *** data
|
13
57
|
|
14
58
|
# ** data: app_dependency_yaml_data
|
@@ -34,9 +78,27 @@ class AppDependencyYamlData(AppDependency, DataObject):
|
|
34
78
|
'to_data.yaml': DataObject.deny('attribute_id')
|
35
79
|
}
|
36
80
|
|
81
|
+
# * method: from_data
|
82
|
+
@staticmethod
|
83
|
+
def from_data(**kwargs) -> 'AppDependencyYamlData':
|
84
|
+
'''
|
85
|
+
Initializes a new YAML representation of an AppDependency object.
|
86
|
+
|
87
|
+
:param kwargs: Additional keyword arguments.
|
88
|
+
:type kwargs: dict
|
89
|
+
:return: A new AppDependencyData object.
|
90
|
+
:rtype: AppDependencyData
|
91
|
+
'''
|
92
|
+
|
93
|
+
# Create a new AppDependencyData object.
|
94
|
+
return super(AppDependencyYamlData, AppDependencyYamlData).from_data(
|
95
|
+
AppDependencyYamlData,
|
96
|
+
**kwargs
|
97
|
+
)
|
98
|
+
|
37
99
|
# * method: new
|
38
100
|
@staticmethod
|
39
|
-
def
|
101
|
+
def from_data(**kwargs) -> 'AppDependencyYamlData':
|
40
102
|
'''
|
41
103
|
Initializes a new YAML representation of an AppDependency object.
|
42
104
|
|
@@ -47,11 +109,11 @@ class AppDependencyYamlData(AppDependency, DataObject):
|
|
47
109
|
'''
|
48
110
|
|
49
111
|
# Create a new AppDependencyData object.
|
50
|
-
return AppDependencyYamlData(
|
51
|
-
|
52
|
-
|
112
|
+
return super(AppDependencyYamlData, AppDependencyYamlData).from_data(
|
113
|
+
AppDependencyYamlData,
|
114
|
+
**kwargs
|
53
115
|
)
|
54
|
-
|
116
|
+
|
55
117
|
# * method: map
|
56
118
|
def map(self, **kwargs) -> AppDependency:
|
57
119
|
'''
|
@@ -67,7 +129,7 @@ class AppDependencyYamlData(AppDependency, DataObject):
|
|
67
129
|
|
68
130
|
# Map the app dependency data.
|
69
131
|
return super().map(AppDependency, **kwargs)
|
70
|
-
|
132
|
+
|
71
133
|
|
72
134
|
# ** data: app_interface_yaml_data
|
73
135
|
class AppInterfaceYamlData(AppInterface, DataObject):
|
@@ -82,7 +144,7 @@ class AppInterfaceYamlData(AppInterface, DataObject):
|
|
82
144
|
serialize_when_none = False
|
83
145
|
roles = {
|
84
146
|
'to_model': DataObject.deny('app_context', 'container_context', 'feature_context', 'error_context', 'feature_repo', 'container_repo', 'error_repo'),
|
85
|
-
'to_data
|
147
|
+
'to_data': DataObject.deny('id')
|
86
148
|
}
|
87
149
|
|
88
150
|
# attribute: app_context
|
@@ -98,11 +160,6 @@ class AppInterfaceYamlData(AppInterface, DataObject):
|
|
98
160
|
feature_context = ModelType(
|
99
161
|
AppDependencyYamlData,
|
100
162
|
required=True,
|
101
|
-
default=AppDependencyYamlData.new(
|
102
|
-
attribute_id='feature_context',
|
103
|
-
module_path='tiferet.contexts.feature',
|
104
|
-
class_name='FeatureContext',
|
105
|
-
),
|
106
163
|
metadata=dict(
|
107
164
|
description='The feature context dependency.'
|
108
165
|
),
|
@@ -112,11 +169,6 @@ class AppInterfaceYamlData(AppInterface, DataObject):
|
|
112
169
|
container_context = ModelType(
|
113
170
|
AppDependencyYamlData,
|
114
171
|
required=True,
|
115
|
-
default=AppDependencyYamlData.new(
|
116
|
-
attribute_id='container_context',
|
117
|
-
module_path='tiferet.contexts.container',
|
118
|
-
class_name='ContainerContext',
|
119
|
-
),
|
120
172
|
metadata=dict(
|
121
173
|
description='The container context dependency.'
|
122
174
|
),
|
@@ -126,11 +178,6 @@ class AppInterfaceYamlData(AppInterface, DataObject):
|
|
126
178
|
error_context = ModelType(
|
127
179
|
AppDependencyYamlData,
|
128
180
|
required=True,
|
129
|
-
default=AppDependencyYamlData.new(
|
130
|
-
attribute_id='error_context',
|
131
|
-
module_path='tiferet.contexts.error',
|
132
|
-
class_name='ErrorContext',
|
133
|
-
),
|
134
181
|
metadata=dict(
|
135
182
|
description='The error context dependency.'
|
136
183
|
),
|
@@ -140,11 +187,6 @@ class AppInterfaceYamlData(AppInterface, DataObject):
|
|
140
187
|
feature_repo = ModelType(
|
141
188
|
AppDependencyYamlData,
|
142
189
|
required=True,
|
143
|
-
default=AppDependencyYamlData.new(
|
144
|
-
attribute_id='feature_repo',
|
145
|
-
module_path='tiferet.repos.feature',
|
146
|
-
class_name='YamlProxy',
|
147
|
-
),
|
148
190
|
metadata=dict(
|
149
191
|
description='The feature repository dependency.'
|
150
192
|
),
|
@@ -154,11 +196,6 @@ class AppInterfaceYamlData(AppInterface, DataObject):
|
|
154
196
|
container_repo = ModelType(
|
155
197
|
AppDependencyYamlData,
|
156
198
|
required=True,
|
157
|
-
default=AppDependencyYamlData.new(
|
158
|
-
attribute_id='container_repo',
|
159
|
-
module_path='tiferet.repos.container',
|
160
|
-
class_name='YamlProxy',
|
161
|
-
),
|
162
199
|
metadata=dict(
|
163
200
|
description='The container repository dependency.'
|
164
201
|
),
|
@@ -168,11 +205,6 @@ class AppInterfaceYamlData(AppInterface, DataObject):
|
|
168
205
|
error_repo = ModelType(
|
169
206
|
AppDependencyYamlData,
|
170
207
|
required=True,
|
171
|
-
default=AppDependencyYamlData.new(
|
172
|
-
attribute_id='error_repo',
|
173
|
-
module_path='tiferet.repos.error',
|
174
|
-
class_name='YamlProxy',
|
175
|
-
),
|
176
208
|
metadata=dict(
|
177
209
|
description='The error repository dependency.'
|
178
210
|
),
|
@@ -180,14 +212,8 @@ class AppInterfaceYamlData(AppInterface, DataObject):
|
|
180
212
|
|
181
213
|
# * method: new
|
182
214
|
@staticmethod
|
183
|
-
def
|
184
|
-
|
185
|
-
feature_context: Dict[str, str] = None,
|
186
|
-
error_context: Dict[str, str] = None,
|
187
|
-
feature_repo: Dict[str, str] = None,
|
188
|
-
container_repo: Dict[str, str] = None,
|
189
|
-
error_repo: Dict[str, str] = None,
|
190
|
-
**kwargs) -> 'AppInterfaceYamlData':
|
215
|
+
def from_data(app_context: Dict[str, str],
|
216
|
+
**kwargs) -> 'AppInterfaceYamlData':
|
191
217
|
'''
|
192
218
|
Initializes a new YAML representation of an AppInterface object.
|
193
219
|
|
@@ -197,34 +223,36 @@ class AppInterfaceYamlData(AppInterface, DataObject):
|
|
197
223
|
:rtype: AppInterfaceData
|
198
224
|
'''
|
199
225
|
|
200
|
-
#
|
201
|
-
dependencies =
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
226
|
+
# Add the app context to the dependencies.
|
227
|
+
dependencies = dict(
|
228
|
+
app_context=AppDependencyYamlData.from_data(
|
229
|
+
attribute_id='app_context',
|
230
|
+
**app_context
|
231
|
+
)
|
232
|
+
)
|
233
|
+
|
234
|
+
# Going through the default dependencies...
|
235
|
+
for key, value in CONTEXT_LIST_DEFAULT.items():
|
236
|
+
|
237
|
+
# If the key is in the kwargs, add it and continue.
|
238
|
+
if key in kwargs:
|
239
|
+
dependencies[key] = AppDependencyYamlData.from_data(
|
240
|
+
attribute_id=key,
|
241
|
+
**kwargs.pop(key)) # Pop the key to avoid duplication.
|
242
|
+
continue
|
243
|
+
|
244
|
+
# Otherwise, add the default value.
|
245
|
+
dependencies[key] = AppDependencyYamlData.from_data(
|
246
|
+
attribute_id=key,
|
247
|
+
**value)
|
216
248
|
|
217
249
|
# Create a new AppInterfaceData object.
|
218
|
-
|
250
|
+
return super(AppInterfaceYamlData, AppInterfaceYamlData).from_data(
|
251
|
+
AppInterfaceYamlData,
|
219
252
|
**dependencies,
|
220
|
-
**kwargs
|
221
|
-
strict=False,
|
253
|
+
**kwargs
|
222
254
|
)
|
223
255
|
|
224
|
-
# Validate and return the new AppInterfaceData object.
|
225
|
-
data.validate()
|
226
|
-
return data
|
227
|
-
|
228
256
|
# * method: map
|
229
257
|
def map(self, **kwargs) -> AppInterface:
|
230
258
|
'''
|
@@ -250,15 +278,15 @@ class AppInterfaceYamlData(AppInterface, DataObject):
|
|
250
278
|
]
|
251
279
|
|
252
280
|
# Map the app interface data.
|
253
|
-
return super().map(AppInterface,
|
254
|
-
dependencies=dependencies,
|
255
|
-
**self.to_primitive('to_model'),
|
281
|
+
return super().map(AppInterface,
|
282
|
+
dependencies=dependencies,
|
283
|
+
**self.to_primitive('to_model'),
|
256
284
|
**kwargs
|
257
285
|
)
|
258
286
|
|
259
287
|
|
260
288
|
# ** data: app_repository_configuration_yaml_data
|
261
|
-
class AppRepositoryConfigurationYamlData(DataObject):
|
289
|
+
class AppRepositoryConfigurationYamlData(DataObject, AppRepositoryConfiguration):
|
262
290
|
'''
|
263
291
|
A YAML data representation of an app repository configuration object.
|
264
292
|
'''
|
@@ -270,12 +298,12 @@ class AppRepositoryConfigurationYamlData(DataObject):
|
|
270
298
|
serialize_when_none = False
|
271
299
|
roles = {
|
272
300
|
'to_model': DataObject.allow(),
|
273
|
-
'to_data
|
301
|
+
'to_data': DataObject.allow()
|
274
302
|
}
|
275
303
|
|
276
304
|
# * method: new
|
277
305
|
@staticmethod
|
278
|
-
def
|
306
|
+
def from_data(**kwargs) -> 'AppRepositoryConfigurationYamlData':
|
279
307
|
'''
|
280
308
|
Initializes a new YAML representation of an AppRepositoryConfiguration object.
|
281
309
|
|
@@ -286,12 +314,11 @@ class AppRepositoryConfigurationYamlData(DataObject):
|
|
286
314
|
'''
|
287
315
|
|
288
316
|
# Create a new AppRepositoryConfigurationData object.
|
289
|
-
return AppRepositoryConfigurationYamlData(
|
290
|
-
|
291
|
-
|
292
|
-
)
|
317
|
+
return super(AppRepositoryConfigurationYamlData, AppRepositoryConfigurationYamlData).from_data(
|
318
|
+
AppRepositoryConfigurationYamlData,
|
319
|
+
**kwargs
|
293
320
|
)
|
294
|
-
|
321
|
+
|
295
322
|
# * method: map
|
296
323
|
def map(self, **kwargs) -> AppRepositoryConfiguration:
|
297
324
|
'''
|
@@ -306,4 +333,4 @@ class AppRepositoryConfigurationYamlData(DataObject):
|
|
306
333
|
'''
|
307
334
|
|
308
335
|
# Map the app repository configuration data.
|
309
|
-
return super().map(AppRepositoryConfiguration, **kwargs)
|
336
|
+
return super().map(AppRepositoryConfiguration, **kwargs)
|
tiferet/data/container.py
CHANGED
@@ -1,5 +1,8 @@
|
|
1
1
|
# *** imports
|
2
2
|
|
3
|
+
# ** core
|
4
|
+
from typing import Any, Dict
|
5
|
+
|
3
6
|
# ** app
|
4
7
|
from ..configs import *
|
5
8
|
from ..domain import DataObject
|
@@ -21,8 +24,8 @@ class ContainerDependencyYamlData(ContainerDependency, DataObject):
|
|
21
24
|
|
22
25
|
serialize_when_none = False
|
23
26
|
roles = {
|
24
|
-
'to_model': DataObject.
|
25
|
-
'to_data
|
27
|
+
'to_model': DataObject.deny('params'),
|
28
|
+
'to_data': DataObject.deny('flag')
|
26
29
|
}
|
27
30
|
|
28
31
|
# * attribute: flag
|
@@ -54,11 +57,18 @@ class ContainerDependencyYamlData(ContainerDependency, DataObject):
|
|
54
57
|
'''
|
55
58
|
|
56
59
|
# Map to the container dependency object.
|
57
|
-
|
60
|
+
obj = super().map(ContainerDependency, **kwargs, validate=False)
|
61
|
+
|
62
|
+
# Set the parameters in due to the deserializer.
|
63
|
+
obj.parameters = self.parameters
|
64
|
+
|
65
|
+
# Validate and return the object.
|
66
|
+
obj.validate()
|
67
|
+
return obj
|
58
68
|
|
59
69
|
# * method: new
|
60
70
|
@staticmethod
|
61
|
-
def
|
71
|
+
def from_data(**kwargs) -> 'ContainerDependencyYamlData':
|
62
72
|
'''
|
63
73
|
Initializes a new ContainerDependencyData object from YAML data.
|
64
74
|
|
@@ -68,14 +78,14 @@ class ContainerDependencyYamlData(ContainerDependency, DataObject):
|
|
68
78
|
:rtype: ContainerDependencyYamlData
|
69
79
|
'''
|
70
80
|
|
71
|
-
# Create a new
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
81
|
+
# Create a new ContainerDependencyData object.
|
82
|
+
return super(
|
83
|
+
ContainerDependencyYamlData,
|
84
|
+
ContainerDependencyYamlData
|
85
|
+
).from_data(
|
86
|
+
ContainerDependencyYamlData,
|
87
|
+
**kwargs
|
88
|
+
)
|
79
89
|
|
80
90
|
# * method: from_model
|
81
91
|
@staticmethod
|
@@ -90,8 +100,9 @@ class ContainerDependencyYamlData(ContainerDependency, DataObject):
|
|
90
100
|
'''
|
91
101
|
|
92
102
|
# Create and return a new ContainerDependencyData object.
|
93
|
-
return ContainerDependencyYamlData.
|
94
|
-
|
103
|
+
return super(ContainerDependencyYamlData, ContainerDependencyYamlData).from_model(
|
104
|
+
ContainerDependencyYamlData,
|
105
|
+
model,
|
95
106
|
**kwargs,
|
96
107
|
)
|
97
108
|
|
@@ -110,7 +121,7 @@ class ContainerAttributeYamlData(ContainerAttribute, DataObject):
|
|
110
121
|
serialize_when_none = False
|
111
122
|
roles = {
|
112
123
|
'to_model': DataObject.allow(),
|
113
|
-
'to_data
|
124
|
+
'to_data': DataObject.deny('id')
|
114
125
|
}
|
115
126
|
|
116
127
|
# * attribute: dependencies
|
@@ -140,23 +151,33 @@ class ContainerAttributeYamlData(ContainerAttribute, DataObject):
|
|
140
151
|
|
141
152
|
# * method: new
|
142
153
|
@staticmethod
|
143
|
-
def
|
154
|
+
def from_data(**kwargs) -> 'ContainerAttributeYamlData':
|
144
155
|
'''
|
145
156
|
Initializes a new ContainerAttributeData object from YAML data.
|
146
157
|
|
158
|
+
:param deps: The dependencies data.
|
159
|
+
:type deps: dict
|
147
160
|
:param kwargs: Additional keyword arguments.
|
148
161
|
:type kwargs: dict
|
149
|
-
'''
|
162
|
+
'''
|
150
163
|
|
151
164
|
# Create a new ContainerAttributeData object.
|
152
|
-
|
153
|
-
|
154
|
-
|
165
|
+
obj = super(
|
166
|
+
ContainerAttributeYamlData,
|
167
|
+
ContainerAttributeYamlData
|
168
|
+
).from_data(
|
169
|
+
ContainerAttributeYamlData,
|
170
|
+
**kwargs,
|
171
|
+
validate=False
|
172
|
+
)
|
173
|
+
|
174
|
+
# Set the dependencies.
|
175
|
+
for flag, dep in obj.dependencies.items():
|
176
|
+
dep.flag = flag
|
155
177
|
|
156
|
-
|
157
178
|
# Validate and return the object.
|
158
|
-
|
159
|
-
return
|
179
|
+
obj.validate()
|
180
|
+
return obj
|
160
181
|
|
161
182
|
# * method: from_model
|
162
183
|
@staticmethod
|
@@ -170,10 +191,23 @@ class ContainerAttributeYamlData(ContainerAttribute, DataObject):
|
|
170
191
|
:type kwargs: dict
|
171
192
|
'''
|
172
193
|
|
194
|
+
# Create the dependency data.
|
195
|
+
dependencies = {dep.flag: dep.to_primitive() for dep in model.dependencies}
|
196
|
+
|
197
|
+
# Create a new model object without the dependencies.
|
198
|
+
data = model.to_primitive()
|
199
|
+
data['dependencies'] = dependencies
|
200
|
+
|
173
201
|
# Create a new ContainerAttributeData object.
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
202
|
+
obj = ContainerAttributeYamlData(
|
203
|
+
dict(
|
204
|
+
**data,
|
205
|
+
**kwargs
|
206
|
+
),
|
207
|
+
strict=False
|
178
208
|
)
|
209
|
+
|
210
|
+
# Validate and return the object.
|
211
|
+
obj.validate()
|
212
|
+
return obj
|
179
213
|
|