Skip to content

Commit 55df201

Browse files
authored
Merge pull request #97 from Exabyte-io/feature/SOF-7766
SOF-7766: update: handle default data
2 parents c7e67b2 + 6615029 commit 55df201

File tree

2 files changed

+48
-19
lines changed

2 files changed

+48
-19
lines changed

src/py/mat3ra/ade/context/context_provider.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,11 @@ class ContextProvider(ContextProviderSchema, InMemoryEntitySnakeCase):
1818
context: Context object for the context provider
1919
"""
2020

21+
@property
22+
def default_data(self) -> Optional[Any]:
23+
"""Override in subclasses to provide default data."""
24+
return None
25+
2126
@property
2227
def name_str(self) -> str:
2328
return self.name.value if hasattr(self.name, 'value') else str(self.name)
@@ -55,7 +60,8 @@ def _get_data_from_context(self, context: Optional[Dict[str, Any]] = None) -> Di
5560

5661
def _get_effective_data(self, context: Optional[Dict[str, Any]] = None) -> Any:
5762
context_data = self._get_data_from_context(context or self.context)
58-
return context_data.get("data", self.data)
63+
effective_data = context_data.get("data", self.data)
64+
return effective_data if effective_data is not None else self.default_data
5965

6066
def _get_effective_is_edited(self, context: Optional[Dict[str, Any]] = None) -> bool:
6167
context_data = self._get_data_from_context(context or self.context)
@@ -96,3 +102,5 @@ def merge_context_data(self, result: Dict[str, Any], provider_context: Optional[
96102
else:
97103
result[key] = value
98104

105+
def get_data(self) -> Any:
106+
return self.data if self.data is not None else self.default_data

tests/py/test_context_provider.py

Lines changed: 39 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,6 @@
3939
"KPathFormDataManagerExtraData": {"extra_override": "data"},
4040
}
4141

42-
EXPECTED_YIELD_DATA_WITH_EXTERNAL = {
43-
"KPathFormDataManager": {"override": "value"},
44-
"isKPathFormDataManagerEdited": True,
45-
"KPathFormDataManagerExtraData": {"extra_override": "data"},
46-
}
47-
4842
CONTEXT_PROVIDER_WITH_STORED_CONTEXT = {
4943
"name": Name.KPathFormDataManager,
5044
"data": {"default": "value"},
@@ -106,8 +100,31 @@
106100
"isKGridFormDataManagerEdited": True,
107101
}
108102

103+
CONTEXT_PROVIDER_FOR_GET_DATA = {
104+
"name": Name.KPathFormDataManager,
105+
"data": {"default": "value"},
106+
"isEdited": False,
107+
"context": {
108+
"KPathFormDataManager": {"stored": "value"},
109+
"isKPathFormDataManagerEdited": True,
110+
"KPathFormDataManagerExtraData": {"extra_stored": "data"},
111+
},
112+
}
113+
114+
EXTERNAL_CONTEXT_FOR_GET_DATA = {
115+
"KPathFormDataManager": {"override": "value"},
116+
"isKPathFormDataManagerEdited": False,
117+
"KPathFormDataManagerExtraData": {"extra_override": "data"},
118+
}
109119

110-
def test_context_provider_creation():
120+
EXPECTED_DATA_FROM_GET_DATA = {
121+
"data": {"override": "value"},
122+
"is_edited": False,
123+
"extra_data": {"extra_override": "data"},
124+
}
125+
126+
127+
def test_creation():
111128
config = CONTEXT_PROVIDER_MINIMAL_CONFIG
112129
provider = ContextProvider(**config)
113130
expected = {
@@ -117,19 +134,19 @@ def test_context_provider_creation():
117134
assertion.assert_deep_almost_equal(expected, provider.to_dict())
118135

119136

120-
def test_context_provider_validation():
137+
def test_validation():
121138
with pytest.raises(Exception):
122139
ContextProvider()
123140

124141

125-
def test_context_provider_full_creation():
142+
def test_full_creation():
126143
config = CONTEXT_PROVIDER_FULL_CONFIG
127144
provider = ContextProvider(**config)
128145
expected = {**config}
129146
assertion.assert_deep_almost_equal(expected, provider.to_dict())
130147

131148

132-
def test_context_provider_default_values():
149+
def test_default_values():
133150
config = CONTEXT_PROVIDER_MINIMAL_CONFIG
134151
provider = ContextProvider(**config)
135152
expected = {
@@ -139,39 +156,38 @@ def test_context_provider_default_values():
139156
assertion.assert_deep_almost_equal(expected, provider.to_dict())
140157

141158

142-
def test_context_provider_extra_data_key():
159+
def test_extra_data_key():
143160
provider = ContextProvider(name=Name.KPathFormDataManager)
144161
assert provider.extra_data_key == "KPathFormDataManagerExtraData"
145162

146163

147-
def test_context_provider_is_edited_key():
164+
def test_is_edited_key():
148165
provider = ContextProvider(name=Name.KPathFormDataManager)
149166
assert provider.is_edited_key == "isKPathFormDataManagerEdited"
150167

151168

152-
def test_context_provider_is_unit_context_provider():
169+
def test_is_unit_context_provider():
153170
unit_provider = ContextProvider(name=Name.KGridFormDataManager, entityName="unit")
154171
assert unit_provider.is_unit_context_provider is True
155172
subworkflow_provider = ContextProvider(name=Name.KGridFormDataManager, entityName="subworkflow")
156173
assert subworkflow_provider.is_unit_context_provider is False
157174

158175

159-
def test_context_provider_is_subworkflow_context_provider():
176+
def test_is_subworkflow_context_provider():
160177
unit_provider = ContextProvider(name=Name.KGridFormDataManager, entityName="unit")
161178
assert unit_provider.is_subworkflow_context_provider is False
162179
subworkflow_provider = ContextProvider(name=Name.KGridFormDataManager, entityName="subworkflow")
163180
assert subworkflow_provider.is_subworkflow_context_provider is True
164181

165182

166-
def test_context_provider_yield_data_with_external_context():
183+
def test_yield_data_with_external_context():
167184
provider = ContextProvider(**CONTEXT_PROVIDER_WITH_DEFAULT_DATA)
168185
external_context = EXTERNAL_CONTEXT_OVERRIDE
169186
result = provider.yield_data_for_rendering(external_context)
170-
expected = EXPECTED_YIELD_DATA_WITH_EXTERNAL
171-
assertion.assert_deep_almost_equal(expected, result)
187+
assertion.assert_deep_almost_equal(external_context, result)
172188

173189

174-
def test_context_provider_yield_data_with_stored_context():
190+
def test_yield_data_with_stored_context():
175191
provider = ContextProvider(**CONTEXT_PROVIDER_WITH_STORED_CONTEXT)
176192
result = provider.yield_data_for_rendering()
177193
expected = EXPECTED_YIELD_DATA_WITH_STORED
@@ -206,3 +222,8 @@ def test_merge_context_data(provider, result_before, provider_context, expected_
206222
provider.merge_context_data(result, provider_context)
207223
assertion.assert_deep_almost_equal(expected_after, result)
208224

225+
226+
def test_get_data():
227+
provider = ContextProvider(**CONTEXT_PROVIDER_FOR_GET_DATA)
228+
data = provider._get_data_from_context(EXTERNAL_CONTEXT_FOR_GET_DATA)
229+
assertion.assert_deep_almost_equal(EXPECTED_DATA_FROM_GET_DATA, data)

0 commit comments

Comments
 (0)