ansys-fluent-core 0.29.dev0__py3-none-any.whl → 0.29.dev2__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.
Potentially problematic release.
This version of ansys-fluent-core might be problematic. Click here for more details.
- ansys/fluent/core/__init__.py +1 -1
- ansys/fluent/core/_version.py +2 -2
- ansys/fluent/core/codegen/tuigen.py +1 -1
- ansys/fluent/core/codegen/walk_api.py +45 -18
- ansys/fluent/core/generated/api_tree/api_objects.json +1 -1
- ansys/fluent/core/generated/datamodel_252/meshing.py +1 -0
- ansys/fluent/core/generated/datamodel_252/preferences.py +7 -0
- ansys/fluent/core/generated/fluent_version_252.py +3 -3
- ansys/fluent/core/generated/meshing/tui_252.py +395 -390
- ansys/fluent/core/generated/solver/settings_252.py +782 -306
- ansys/fluent/core/generated/solver/settings_252.pyi +442 -133
- ansys/fluent/core/generated/solver/tui_252.py +4046 -3737
- ansys/fluent/core/launcher/container_launcher.py +4 -3
- ansys/fluent/core/launcher/fluent_container.py +22 -19
- ansys/fluent/core/launcher/launcher.py +2 -2
- ansys/fluent/core/launcher/pim_launcher.py +2 -2
- ansys/fluent/core/launcher/slurm_launcher.py +2 -2
- ansys/fluent/core/launcher/standalone_launcher.py +2 -2
- ansys/fluent/core/logging.py +2 -0
- ansys/fluent/core/logging_config.yaml +3 -0
- ansys/fluent/core/services/app_utilities.py +2 -1
- ansys/fluent/core/services/datamodel_se.py +141 -61
- ansys/fluent/core/services/field_data.py +252 -0
- ansys/fluent/core/services/interceptors.py +28 -2
- ansys/fluent/core/session.py +7 -2
- ansys/fluent/core/session_solver.py +21 -0
- ansys/fluent/core/streaming_services/datamodel_event_streaming.py +12 -12
- {ansys_fluent_core-0.29.dev0.dist-info → ansys_fluent_core-0.29.dev2.dist-info}/LICENSE +1 -1
- {ansys_fluent_core-0.29.dev0.dist-info → ansys_fluent_core-0.29.dev2.dist-info}/METADATA +53 -31
- {ansys_fluent_core-0.29.dev0.dist-info → ansys_fluent_core-0.29.dev2.dist-info}/RECORD +65 -141
- {ansys_fluent_core-0.29.dev0.dist-info → ansys_fluent_core-0.29.dev2.dist-info}/WHEEL +1 -1
- ansys/fluent/core/docs/README.rst +0 -155
- ansys/fluent/tests/conftest.py +0 -415
- ansys/fluent/tests/fluent_fixtures.py +0 -195
- ansys/fluent/tests/integration/test_optislang/test_optislang_integration.py +0 -263
- ansys/fluent/tests/parametric/test_local_parametric_run.py +0 -36
- ansys/fluent/tests/parametric/test_local_parametric_setup.py +0 -34
- ansys/fluent/tests/parametric/test_parametric_workflow.py +0 -279
- ansys/fluent/tests/test_aero_session.py +0 -88
- ansys/fluent/tests/test_batch_ops.py +0 -39
- ansys/fluent/tests/test_builtin_settings.py +0 -761
- ansys/fluent/tests/test_cad_to_post_ftm.py +0 -525
- ansys/fluent/tests/test_cad_to_post_wtm.py +0 -250
- ansys/fluent/tests/test_casereader.py +0 -324
- ansys/fluent/tests/test_codegen.py +0 -783
- ansys/fluent/tests/test_creatable.py +0 -31
- ansys/fluent/tests/test_data_model_cache.py +0 -434
- ansys/fluent/tests/test_datamodel_api.py +0 -449
- ansys/fluent/tests/test_datamodel_service.py +0 -814
- ansys/fluent/tests/test_datareader.py +0 -103
- ansys/fluent/tests/test_error_handling.py +0 -24
- ansys/fluent/tests/test_events_manager.py +0 -214
- ansys/fluent/tests/test_field_data.py +0 -466
- ansys/fluent/tests/test_file_session.py +0 -355
- ansys/fluent/tests/test_file_transfer_service.py +0 -165
- ansys/fluent/tests/test_fix_doc.py +0 -29
- ansys/fluent/tests/test_flobject.py +0 -1235
- ansys/fluent/tests/test_fluent_fixes.py +0 -106
- ansys/fluent/tests/test_fluent_session.py +0 -270
- ansys/fluent/tests/test_fluent_version.py +0 -66
- ansys/fluent/tests/test_fluent_version_marker.py +0 -65
- ansys/fluent/tests/test_icing_session.py +0 -9
- ansys/fluent/tests/test_launcher.py +0 -529
- ansys/fluent/tests/test_launcher_remote.py +0 -272
- ansys/fluent/tests/test_lispy.py +0 -40
- ansys/fluent/tests/test_logging.py +0 -16
- ansys/fluent/tests/test_mapped_api.py +0 -774
- ansys/fluent/tests/test_meshing_utilities.py +0 -2436
- ansys/fluent/tests/test_meshing_workflow.py +0 -421
- ansys/fluent/tests/test_meshingmode/test_meshing_launch.py +0 -168
- ansys/fluent/tests/test_new_meshing_workflow.py +0 -1801
- ansys/fluent/tests/test_preferences.py +0 -89
- ansys/fluent/tests/test_pure_mesh_vs_mesh_workflow.py +0 -101
- ansys/fluent/tests/test_reduction.py +0 -484
- ansys/fluent/tests/test_rp_vars.py +0 -77
- ansys/fluent/tests/test_scheduler.py +0 -471
- ansys/fluent/tests/test_scheme_eval_222.py +0 -338
- ansys/fluent/tests/test_scheme_eval_231.py +0 -243
- ansys/fluent/tests/test_search.py +0 -344
- ansys/fluent/tests/test_session.py +0 -594
- ansys/fluent/tests/test_settings_api.py +0 -606
- ansys/fluent/tests/test_settings_reader.py +0 -85
- ansys/fluent/tests/test_slurm_future.py +0 -67
- ansys/fluent/tests/test_solution_variables.py +0 -241
- ansys/fluent/tests/test_solver_monitors.py +0 -83
- ansys/fluent/tests/test_solvermode/boundaries_periodic_expDict +0 -1712
- ansys/fluent/tests/test_solvermode/test_boundaries.py +0 -127
- ansys/fluent/tests/test_solvermode/test_calculationactivities.py +0 -20
- ansys/fluent/tests/test_solvermode/test_controls.py +0 -131
- ansys/fluent/tests/test_solvermode/test_general.py +0 -109
- ansys/fluent/tests/test_solvermode/test_initialization.py +0 -83
- ansys/fluent/tests/test_solvermode/test_materials.py +0 -40
- ansys/fluent/tests/test_solvermode/test_methods.py +0 -65
- ansys/fluent/tests/test_solvermode/test_models.py +0 -99
- ansys/fluent/tests/test_solvermode/test_named_expressions.py +0 -35
- ansys/fluent/tests/test_solvermode/test_post_vector.py +0 -22
- ansys/fluent/tests/test_solvermode/test_species_model.py +0 -67
- ansys/fluent/tests/test_streaming_services.py +0 -52
- ansys/fluent/tests/test_systemcoupling.py +0 -44
- ansys/fluent/tests/test_topy.py +0 -179
- ansys/fluent/tests/test_tui_api.py +0 -70
- ansys/fluent/tests/test_type_stub.py +0 -37
- ansys/fluent/tests/test_utils.py +0 -82
- ansys/fluent/tests/util/__init__.py +0 -36
- ansys/fluent/tests/util/meshing_workflow.py +0 -33
- ansys/fluent/tests/util/solver.py +0 -72
- ansys_fluent_core-0.29.dev0.dist-info/AUTHORS +0 -12
|
@@ -1,774 +0,0 @@
|
|
|
1
|
-
import time
|
|
2
|
-
|
|
3
|
-
import pytest
|
|
4
|
-
from util import create_datamodel_root_in_server, create_root_using_datamodelgen
|
|
5
|
-
|
|
6
|
-
from ansys.fluent.core.services.datamodel_se import convert_path_to_se_path
|
|
7
|
-
from ansys.fluent.core.utils.execution import timeout_loop
|
|
8
|
-
|
|
9
|
-
rules_str = (
|
|
10
|
-
"RULES:\n"
|
|
11
|
-
" STRING: X\n"
|
|
12
|
-
" allowedValues = yes, no\n"
|
|
13
|
-
" logicalMapping = True, False\n"
|
|
14
|
-
" END\n"
|
|
15
|
-
" STRING: Y\n"
|
|
16
|
-
' allowedValues = \\"1\\", \\"2\\", \\"3\\"\n'
|
|
17
|
-
' default = \\"2\\"\n'
|
|
18
|
-
" isNumerical = True\n"
|
|
19
|
-
" END\n"
|
|
20
|
-
" INTEGER: Z\n"
|
|
21
|
-
" END\n"
|
|
22
|
-
" SINGLETON: ROOT\n"
|
|
23
|
-
" members = A\n"
|
|
24
|
-
" commands = C, D\n"
|
|
25
|
-
" SINGLETON: A\n"
|
|
26
|
-
" members = X, Y, Z\n"
|
|
27
|
-
" END\n"
|
|
28
|
-
" COMMAND: C\n"
|
|
29
|
-
" arguments = X\n"
|
|
30
|
-
" functionName = CFunc\n"
|
|
31
|
-
" END\n"
|
|
32
|
-
" COMMAND: D\n"
|
|
33
|
-
" arguments = X\n"
|
|
34
|
-
" functionName = CFunc\n"
|
|
35
|
-
" APIName = dd\n"
|
|
36
|
-
" END\n"
|
|
37
|
-
" END\n"
|
|
38
|
-
"END\n"
|
|
39
|
-
)
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
rules_str_caps = (
|
|
43
|
-
"RULES:\n"
|
|
44
|
-
" STRING: X\n"
|
|
45
|
-
" allowedValues = Yes, No\n"
|
|
46
|
-
" default = No\n"
|
|
47
|
-
" logicalMapping = True, False\n"
|
|
48
|
-
" END\n"
|
|
49
|
-
" SINGLETON: ROOT\n"
|
|
50
|
-
" members = A\n"
|
|
51
|
-
" SINGLETON: A\n"
|
|
52
|
-
" members = X\n"
|
|
53
|
-
" END\n"
|
|
54
|
-
" END\n"
|
|
55
|
-
"END\n"
|
|
56
|
-
)
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
def get_static_info_value(static_info, type_path):
|
|
60
|
-
for p in type_path.removeprefix("/").split("/"):
|
|
61
|
-
static_info = static_info[p]
|
|
62
|
-
return static_info
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
def get_state_from_remote_app(session, app_name, type_path):
|
|
66
|
-
return session.scheme_eval.scheme_eval(
|
|
67
|
-
f'(state/object/get-state (state/object/find-child (state/find-root "{app_name}") "{type_path}"))'
|
|
68
|
-
)
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
def get_error_state_message_from_remote_app(session, app_name, type_path):
|
|
72
|
-
return session.scheme_eval.scheme_eval(
|
|
73
|
-
f'(state/object/get-error-state-message (state/object/find-child (state/find-root "{app_name}") "{type_path}"))'
|
|
74
|
-
)
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
@pytest.mark.fluent_version(">=25.2")
|
|
78
|
-
def test_datamodel_api_bool_for_str_has_correct_type(
|
|
79
|
-
datamodel_api_version_new, new_solver_session
|
|
80
|
-
):
|
|
81
|
-
solver = new_solver_session
|
|
82
|
-
app_name = "test"
|
|
83
|
-
create_datamodel_root_in_server(solver, rules_str, app_name)
|
|
84
|
-
service = solver._se_service
|
|
85
|
-
static_info = service.get_static_info("test")
|
|
86
|
-
assert (
|
|
87
|
-
get_static_info_value(static_info, "/singletons/A/parameters/X/type")
|
|
88
|
-
== "Logical"
|
|
89
|
-
)
|
|
90
|
-
cmd_args = get_static_info_value(static_info, "/commands/C/commandinfo/args")
|
|
91
|
-
arg0 = cmd_args[0]
|
|
92
|
-
assert arg0["type"] == "Logical"
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
@pytest.mark.fluent_version(">=25.2")
|
|
96
|
-
def test_datamodel_api_set_bool_for_str(datamodel_api_version_new, new_solver_session):
|
|
97
|
-
solver = new_solver_session
|
|
98
|
-
app_name = "test"
|
|
99
|
-
create_datamodel_root_in_server(solver, rules_str, app_name)
|
|
100
|
-
service = solver._se_service
|
|
101
|
-
service.set_state(app_name, "/A/X", "yes")
|
|
102
|
-
assert service.get_state(app_name, "/A/X") is True
|
|
103
|
-
assert get_state_from_remote_app(solver, app_name, "/A/X") == "yes"
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
@pytest.mark.fluent_version(">=25.2")
|
|
107
|
-
def test_datamodel_api_set_bool_nested_for_str(
|
|
108
|
-
datamodel_api_version_new, new_solver_session
|
|
109
|
-
):
|
|
110
|
-
solver = new_solver_session
|
|
111
|
-
app_name = "test"
|
|
112
|
-
create_datamodel_root_in_server(solver, rules_str, app_name)
|
|
113
|
-
service = solver._se_service
|
|
114
|
-
service.set_state(app_name, "/A", {"X": True})
|
|
115
|
-
assert service.get_state(app_name, "/A/X") is True
|
|
116
|
-
assert get_error_state_message_from_remote_app(solver, app_name, "/A/X") is None
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
@pytest.mark.fluent_version(">=25.2")
|
|
120
|
-
def test_datamodel_api_get_set_bool_for_str_with_flexible_strs_no_errors(
|
|
121
|
-
datamodel_api_version_new, new_solver_session
|
|
122
|
-
):
|
|
123
|
-
solver = new_solver_session
|
|
124
|
-
app_name = "test"
|
|
125
|
-
create_datamodel_root_in_server(solver, rules_str_caps, app_name)
|
|
126
|
-
service = solver._se_service
|
|
127
|
-
service.set_state(app_name, "/A/X", True)
|
|
128
|
-
assert service.get_state(app_name, "/A/X") is True
|
|
129
|
-
assert get_error_state_message_from_remote_app(solver, app_name, "/A/X") is None
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
@pytest.mark.fluent_version(">=25.2")
|
|
133
|
-
def test_datamodel_api_get_attrs_bool_for_str(
|
|
134
|
-
datamodel_api_version_new, new_solver_session
|
|
135
|
-
):
|
|
136
|
-
solver = new_solver_session
|
|
137
|
-
app_name = "test"
|
|
138
|
-
create_datamodel_root_in_server(solver, rules_str, app_name)
|
|
139
|
-
service = solver._se_service
|
|
140
|
-
assert service.get_attribute_value(app_name, "/A/Z", "allowedValues") is None
|
|
141
|
-
assert service.get_attribute_value(app_name, "/A/X", "allowedValues") is None
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
@pytest.mark.fluent_version(">=25.2")
|
|
145
|
-
def test_datamodel_api_get_and_set_int_for_str(
|
|
146
|
-
datamodel_api_version_new, new_solver_session
|
|
147
|
-
):
|
|
148
|
-
solver = new_solver_session
|
|
149
|
-
app_name = "test"
|
|
150
|
-
create_datamodel_root_in_server(solver, rules_str, app_name)
|
|
151
|
-
service = solver._se_service
|
|
152
|
-
service.set_state(app_name, "/A/Y", 1)
|
|
153
|
-
assert service.get_state(app_name, "/A/Y") == 1
|
|
154
|
-
assert get_error_state_message_from_remote_app(solver, app_name, "/A/Y") is None
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
# TODO: what are the equivalent of following tests in Python?
|
|
158
|
-
# testPopulateMappingAttrTablePaths
|
|
159
|
-
# testMapAPIStateToDM
|
|
160
|
-
# testMapDMStateToAPI
|
|
161
|
-
# testMapNestedAPIStateToDM
|
|
162
|
-
# testUpdateStateDictWithMapping
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
@pytest.mark.fluent_version(">=25.2")
|
|
166
|
-
def test_state_of_command_args_with_mapping(
|
|
167
|
-
datamodel_api_version_new, new_solver_session
|
|
168
|
-
):
|
|
169
|
-
solver = new_solver_session
|
|
170
|
-
app_name = "test"
|
|
171
|
-
create_datamodel_root_in_server(solver, rules_str, app_name)
|
|
172
|
-
service = solver._se_service
|
|
173
|
-
c_name = service.create_command_arguments(app_name, "/", "C")
|
|
174
|
-
with pytest.raises(RuntimeError):
|
|
175
|
-
service.set_state(app_name, f"/C:{c_name}/X", False)
|
|
176
|
-
assert service.get_state(app_name, f"/C:{c_name}") == {"X": None}
|
|
177
|
-
service.set_state(app_name, f"/C:{c_name}", {"X": False})
|
|
178
|
-
assert service.get_state(app_name, f"/C:{c_name}") == {"X": False}
|
|
179
|
-
service.set_state(app_name, f"/C:{c_name}", {"X": True})
|
|
180
|
-
assert service.get_state(app_name, f"/C:{c_name}") == {"X": True}
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
def register_external_function_in_remote_app(session, app_name, func_name):
|
|
184
|
-
session.scheme_eval.scheme_eval(
|
|
185
|
-
f'(state/register-external-fn "{app_name}" "{func_name}" (lambda (obj . args) (car args)) (cons "Variant" (list "ModelObject" "Variant")))'
|
|
186
|
-
)
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
@pytest.mark.fluent_version(">=25.2")
|
|
190
|
-
def test_execute_command_with_args_mapping(
|
|
191
|
-
datamodel_api_version_new, new_solver_session
|
|
192
|
-
):
|
|
193
|
-
solver = new_solver_session
|
|
194
|
-
app_name = "test"
|
|
195
|
-
create_datamodel_root_in_server(solver, rules_str, app_name)
|
|
196
|
-
service = solver._se_service
|
|
197
|
-
register_external_function_in_remote_app(solver, app_name, "CFunc")
|
|
198
|
-
result = service.execute_command(app_name, "/", "C", {"X": True})
|
|
199
|
-
assert result == "yes"
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
@pytest.mark.fluent_version(">=25.2")
|
|
203
|
-
def test_execute_command_with_args_and_path_mapping(
|
|
204
|
-
datamodel_api_version_new, new_solver_session
|
|
205
|
-
):
|
|
206
|
-
solver = new_solver_session
|
|
207
|
-
app_name = "test"
|
|
208
|
-
create_datamodel_root_in_server(solver, rules_str, app_name)
|
|
209
|
-
service = solver._se_service
|
|
210
|
-
register_external_function_in_remote_app(solver, app_name, "CFunc")
|
|
211
|
-
result = service.execute_command(app_name, "/", "dd", {"X": True})
|
|
212
|
-
assert result == "yes"
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
@pytest.mark.fluent_version(">=25.2")
|
|
216
|
-
def test_execute_query_with_args_mapping(datamodel_api_version_new, new_solver_session):
|
|
217
|
-
rules_str = (
|
|
218
|
-
"RULES:\n"
|
|
219
|
-
" STRING: X\n"
|
|
220
|
-
" allowedValues = yes, no\n"
|
|
221
|
-
" logicalMapping = True, False\n"
|
|
222
|
-
" END\n"
|
|
223
|
-
" SINGLETON: ROOT\n"
|
|
224
|
-
" queries = Q\n"
|
|
225
|
-
" QUERY: Q\n"
|
|
226
|
-
" arguments = X\n"
|
|
227
|
-
" functionName = QFunc\n"
|
|
228
|
-
" END\n"
|
|
229
|
-
" END\n"
|
|
230
|
-
"END\n"
|
|
231
|
-
)
|
|
232
|
-
solver = new_solver_session
|
|
233
|
-
app_name = "test"
|
|
234
|
-
create_datamodel_root_in_server(solver, rules_str, app_name)
|
|
235
|
-
service = solver._se_service
|
|
236
|
-
register_external_function_in_remote_app(solver, app_name, "QFunc")
|
|
237
|
-
result = service.execute_query(app_name, "/", "Q", {"X": True})
|
|
238
|
-
assert result == "yes"
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
@pytest.mark.fluent_version(">=25.2")
|
|
242
|
-
def test_get_mapped_attr(datamodel_api_version_new, new_solver_session):
|
|
243
|
-
solver = new_solver_session
|
|
244
|
-
app_name = "test"
|
|
245
|
-
create_datamodel_root_in_server(solver, rules_str, app_name)
|
|
246
|
-
service = solver._se_service
|
|
247
|
-
assert service.get_attribute_value(app_name, "/A/X", "allowedValues") is None
|
|
248
|
-
assert service.get_attribute_value(app_name, "/A/Y", "allowedValues") is None
|
|
249
|
-
assert service.get_attribute_value(app_name, "/A/Y", "min") == 1
|
|
250
|
-
assert service.get_attribute_value(app_name, "/A/Y", "max") == 3
|
|
251
|
-
assert service.get_attribute_value(app_name, "/A/Y", "default") == 2
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
@pytest.mark.fluent_version(">=25.2")
|
|
255
|
-
def test_get_mapped_attr_defaults(datamodel_api_version_new, new_solver_session):
|
|
256
|
-
rules_str = (
|
|
257
|
-
"RULES:\n"
|
|
258
|
-
" STRING: X\n"
|
|
259
|
-
" allowedValues = yes, no\n"
|
|
260
|
-
" default = no\n"
|
|
261
|
-
" logicalMapping = True, False\n"
|
|
262
|
-
" END\n"
|
|
263
|
-
" STRING: Y\n"
|
|
264
|
-
' allowedValues = \\"1\\", \\"2\\", \\"3\\"\n'
|
|
265
|
-
' default = \\"2\\"\n'
|
|
266
|
-
" isNumerical = True\n"
|
|
267
|
-
" END\n"
|
|
268
|
-
" INTEGER: Z\n"
|
|
269
|
-
" default = 42\n"
|
|
270
|
-
" END\n"
|
|
271
|
-
" SINGLETON: ROOT\n"
|
|
272
|
-
" members = A\n"
|
|
273
|
-
" SINGLETON: A\n"
|
|
274
|
-
" members = X, Y, Z\n"
|
|
275
|
-
" END\n"
|
|
276
|
-
" END\n"
|
|
277
|
-
"END\n"
|
|
278
|
-
)
|
|
279
|
-
solver = new_solver_session
|
|
280
|
-
app_name = "test"
|
|
281
|
-
create_datamodel_root_in_server(solver, rules_str, app_name)
|
|
282
|
-
service = solver._se_service
|
|
283
|
-
assert service.get_attribute_value(app_name, "/A/X", "default") is False
|
|
284
|
-
assert service.get_attribute_value(app_name, "/A/Y", "default") == 2
|
|
285
|
-
assert service.get_attribute_value(app_name, "/A/Z", "default") == 42
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
@pytest.mark.fluent_version(">=25.2")
|
|
289
|
-
def test_get_mapped_enum_attr(datamodel_api_version_new, new_solver_session):
|
|
290
|
-
rules_str = (
|
|
291
|
-
"RULES:\n"
|
|
292
|
-
" STRING: X\n"
|
|
293
|
-
" allowedValues = ijk, lmn\n"
|
|
294
|
-
" default = lmn\n"
|
|
295
|
-
" enum = green, yellow\n"
|
|
296
|
-
" END\n"
|
|
297
|
-
" SINGLETON: ROOT\n"
|
|
298
|
-
" members = A\n"
|
|
299
|
-
" SINGLETON: A\n"
|
|
300
|
-
" members = X\n"
|
|
301
|
-
" END\n"
|
|
302
|
-
" END\n"
|
|
303
|
-
"END\n"
|
|
304
|
-
)
|
|
305
|
-
solver = new_solver_session
|
|
306
|
-
app_name = "test"
|
|
307
|
-
create_datamodel_root_in_server(solver, rules_str, app_name)
|
|
308
|
-
service = solver._se_service
|
|
309
|
-
assert service.get_attribute_value(app_name, "/A/X", "allowedValues") == [
|
|
310
|
-
"green",
|
|
311
|
-
"yellow",
|
|
312
|
-
]
|
|
313
|
-
assert service.get_attribute_value(app_name, "/A/X", "default") == "yellow"
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
@pytest.mark.fluent_version(">=25.2")
|
|
317
|
-
def test_get_mapped_dynamic_enum_attr(datamodel_api_version_new, new_solver_session):
|
|
318
|
-
rules_str = (
|
|
319
|
-
"RULES:\n"
|
|
320
|
-
" LOGICAL: B\n"
|
|
321
|
-
" default = True\n"
|
|
322
|
-
" END\n"
|
|
323
|
-
" STRING: X\n"
|
|
324
|
-
' allowedValues = IF($../B, (\\"ijk\\", \\"lmn\\"), (\\"ijk\\", \\"lmn\\", \\"opq\\"))\n'
|
|
325
|
-
" default = lmn\n"
|
|
326
|
-
' enum = IF($../B, (\\"green\\", \\"yellow\\"), (\\"green\\", \\"yellow\\", \\"blue\\"))\n'
|
|
327
|
-
" END\n"
|
|
328
|
-
" SINGLETON: ROOT\n"
|
|
329
|
-
" members = A\n"
|
|
330
|
-
" SINGLETON: A\n"
|
|
331
|
-
" members = B, X\n"
|
|
332
|
-
" END\n"
|
|
333
|
-
" END\n"
|
|
334
|
-
"END\n"
|
|
335
|
-
)
|
|
336
|
-
solver = new_solver_session
|
|
337
|
-
app_name = "test"
|
|
338
|
-
create_datamodel_root_in_server(solver, rules_str, app_name)
|
|
339
|
-
service = solver._se_service
|
|
340
|
-
assert service.get_attribute_value(app_name, "/A/X", "allowedValues") == [
|
|
341
|
-
"green",
|
|
342
|
-
"yellow",
|
|
343
|
-
]
|
|
344
|
-
assert service.get_attribute_value(app_name, "/A/X", "default") == "yellow"
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
@pytest.mark.fluent_version(">=25.2")
|
|
348
|
-
def test_get_mapped_command_attr(datamodel_api_version_new, new_solver_session):
|
|
349
|
-
rules_str = (
|
|
350
|
-
"RULES:\n"
|
|
351
|
-
" STRING: X\n"
|
|
352
|
-
" allowedValues = yes, no\n"
|
|
353
|
-
" default = no\n"
|
|
354
|
-
" logicalMapping = True, False\n"
|
|
355
|
-
" END\n"
|
|
356
|
-
" STRING: Y\n"
|
|
357
|
-
' allowedValues = \\"1\\", \\"2\\", \\"3\\"\n'
|
|
358
|
-
' default = \\"2\\"\n'
|
|
359
|
-
" isNumerical = True\n"
|
|
360
|
-
" END\n"
|
|
361
|
-
" INTEGER: Z\n"
|
|
362
|
-
" default = 42\n"
|
|
363
|
-
" END\n"
|
|
364
|
-
" SINGLETON: ROOT\n"
|
|
365
|
-
" commands = C\n"
|
|
366
|
-
" COMMAND: C\n"
|
|
367
|
-
" arguments = X, Y, Z\n"
|
|
368
|
-
" END\n"
|
|
369
|
-
" END\n"
|
|
370
|
-
"END\n"
|
|
371
|
-
)
|
|
372
|
-
solver = new_solver_session
|
|
373
|
-
app_name = "test"
|
|
374
|
-
create_datamodel_root_in_server(solver, rules_str, app_name)
|
|
375
|
-
service = solver._se_service
|
|
376
|
-
c_name = service.create_command_arguments(app_name, "/", "C")
|
|
377
|
-
# TODO: Attribute query at command argument level is not working
|
|
378
|
-
assert (
|
|
379
|
-
service.get_attribute_value(app_name, f"/C:{c_name}", "X/allowedValues") is None
|
|
380
|
-
)
|
|
381
|
-
assert (
|
|
382
|
-
service.get_attribute_value(app_name, f"/C:{c_name}", "Y/allowedValues") is None
|
|
383
|
-
)
|
|
384
|
-
assert service.get_attribute_value(app_name, f"/C:{c_name}", "Y/min") == 1
|
|
385
|
-
assert service.get_attribute_value(app_name, f"/C:{c_name}", "Y/max") == 3
|
|
386
|
-
assert service.get_attribute_value(app_name, f"/C:{c_name}", "X/default") is False
|
|
387
|
-
assert service.get_attribute_value(app_name, f"/C:{c_name}", "Y/default") == 2
|
|
388
|
-
assert service.get_attribute_value(app_name, f"/C:{c_name}", "Z/default") == 42
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
@pytest.mark.fluent_version(">=25.2")
|
|
392
|
-
def test_on_changed_is_mapped(datamodel_api_version_new, new_solver_session):
|
|
393
|
-
solver = new_solver_session
|
|
394
|
-
app_name = "test"
|
|
395
|
-
create_datamodel_root_in_server(solver, rules_str, app_name)
|
|
396
|
-
service = solver._se_service
|
|
397
|
-
root = create_root_using_datamodelgen(service, app_name)
|
|
398
|
-
|
|
399
|
-
called = 0
|
|
400
|
-
state = None
|
|
401
|
-
called_obj = 0
|
|
402
|
-
state_obj = None
|
|
403
|
-
|
|
404
|
-
def on_changed(value):
|
|
405
|
-
nonlocal called
|
|
406
|
-
nonlocal state
|
|
407
|
-
state = value()
|
|
408
|
-
called += 1
|
|
409
|
-
|
|
410
|
-
def on_changed_obj(value):
|
|
411
|
-
nonlocal called_obj
|
|
412
|
-
nonlocal state_obj
|
|
413
|
-
state_obj = value()
|
|
414
|
-
called_obj += 1
|
|
415
|
-
|
|
416
|
-
subscription = service.add_on_changed(app_name, "/A/X", root.A.X, on_changed)
|
|
417
|
-
subscription_obj = service.add_on_changed(app_name, "/A", root.A, on_changed_obj)
|
|
418
|
-
|
|
419
|
-
assert called == 0
|
|
420
|
-
assert state is None
|
|
421
|
-
assert called_obj == 0
|
|
422
|
-
assert state_obj is None
|
|
423
|
-
|
|
424
|
-
service.set_state(app_name, "/A/X", True)
|
|
425
|
-
timeout_loop(lambda: called == 1, timeout=5)
|
|
426
|
-
assert called == 1
|
|
427
|
-
assert state is True
|
|
428
|
-
assert called_obj == 1
|
|
429
|
-
assert state_obj == {"X": True, "Y": 2, "Z": None}
|
|
430
|
-
|
|
431
|
-
service.set_state(app_name, "/A/X", False)
|
|
432
|
-
timeout_loop(lambda: called == 2, timeout=5)
|
|
433
|
-
assert called == 2
|
|
434
|
-
assert state is False
|
|
435
|
-
assert called_obj == 2
|
|
436
|
-
assert state_obj == {"X": False, "Y": 2, "Z": None}
|
|
437
|
-
|
|
438
|
-
subscription.unsubscribe()
|
|
439
|
-
subscription_obj.unsubscribe()
|
|
440
|
-
|
|
441
|
-
service.set_state(app_name, "/A/X", True)
|
|
442
|
-
time.sleep(5)
|
|
443
|
-
assert called == 2
|
|
444
|
-
assert state is False
|
|
445
|
-
assert called_obj == 2
|
|
446
|
-
assert state_obj == {"X": False, "Y": 2, "Z": None}
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
@pytest.mark.fluent_version(">=25.2")
|
|
450
|
-
def test_mapped_on_attribute_changed(datamodel_api_version_new, new_solver_session):
|
|
451
|
-
rules_str = (
|
|
452
|
-
"RULES:\n"
|
|
453
|
-
" STRING: X\n"
|
|
454
|
-
" allowedValues = yes, no\n"
|
|
455
|
-
" default = $../Y\n"
|
|
456
|
-
" logicalMapping = True, False\n"
|
|
457
|
-
" END\n"
|
|
458
|
-
" STRING: Y\n"
|
|
459
|
-
" END\n"
|
|
460
|
-
" SINGLETON: ROOT\n"
|
|
461
|
-
" members = A\n"
|
|
462
|
-
" commands = C\n"
|
|
463
|
-
" SINGLETON: A\n"
|
|
464
|
-
" members = X, Y\n"
|
|
465
|
-
" END\n"
|
|
466
|
-
" COMMAND: C\n"
|
|
467
|
-
" arguments = X, Y\n"
|
|
468
|
-
" END\n"
|
|
469
|
-
" END\n"
|
|
470
|
-
"END\n"
|
|
471
|
-
)
|
|
472
|
-
|
|
473
|
-
solver = new_solver_session
|
|
474
|
-
app_name = "test"
|
|
475
|
-
create_datamodel_root_in_server(solver, rules_str, app_name)
|
|
476
|
-
service = solver._se_service
|
|
477
|
-
root = create_root_using_datamodelgen(service, app_name)
|
|
478
|
-
called = 0
|
|
479
|
-
value = None
|
|
480
|
-
|
|
481
|
-
def cb(val):
|
|
482
|
-
nonlocal called
|
|
483
|
-
nonlocal value
|
|
484
|
-
value = val
|
|
485
|
-
called += 1
|
|
486
|
-
|
|
487
|
-
subscription = service.add_on_attribute_changed(
|
|
488
|
-
app_name, "/A/X", "default", root.A.X, cb
|
|
489
|
-
)
|
|
490
|
-
assert called == 0
|
|
491
|
-
assert value is None
|
|
492
|
-
|
|
493
|
-
service.set_state(app_name, "/A/Y", "no")
|
|
494
|
-
timeout_loop(lambda: called == 1, timeout=5)
|
|
495
|
-
assert called == 1
|
|
496
|
-
assert value is False
|
|
497
|
-
|
|
498
|
-
service.set_state(app_name, "/A/Y", "yes")
|
|
499
|
-
timeout_loop(lambda: called == 2, timeout=5)
|
|
500
|
-
assert called == 2
|
|
501
|
-
assert value is True
|
|
502
|
-
|
|
503
|
-
subscription.unsubscribe()
|
|
504
|
-
service.set_state(app_name, "/A/Y", "no")
|
|
505
|
-
time.sleep(5)
|
|
506
|
-
assert called == 2
|
|
507
|
-
assert value is True
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
@pytest.mark.fluent_version(">=25.2")
|
|
511
|
-
def test_datamodel_api_on_command_executed_mapped_args(
|
|
512
|
-
datamodel_api_version_new, new_solver_session
|
|
513
|
-
):
|
|
514
|
-
solver = new_solver_session
|
|
515
|
-
app_name = "test"
|
|
516
|
-
create_datamodel_root_in_server(solver, rules_str, app_name)
|
|
517
|
-
service = solver._se_service
|
|
518
|
-
root = create_root_using_datamodelgen(service, app_name)
|
|
519
|
-
register_external_function_in_remote_app(solver, app_name, "CFunc")
|
|
520
|
-
executed = False
|
|
521
|
-
command = None
|
|
522
|
-
arguments = None
|
|
523
|
-
|
|
524
|
-
def cb(obj, cmd, args):
|
|
525
|
-
nonlocal executed
|
|
526
|
-
nonlocal command
|
|
527
|
-
nonlocal arguments
|
|
528
|
-
command = cmd
|
|
529
|
-
arguments = args
|
|
530
|
-
executed = True
|
|
531
|
-
|
|
532
|
-
subscription = service.add_on_command_executed(app_name, "/", root, cb)
|
|
533
|
-
assert not executed
|
|
534
|
-
assert command is None
|
|
535
|
-
assert arguments is None
|
|
536
|
-
|
|
537
|
-
service.execute_command(app_name, "/", "C", {"X": True})
|
|
538
|
-
timeout_loop(lambda: executed, timeout=5)
|
|
539
|
-
assert executed
|
|
540
|
-
assert command == "C"
|
|
541
|
-
assert arguments == {"X": True}
|
|
542
|
-
|
|
543
|
-
executed = False
|
|
544
|
-
command = None
|
|
545
|
-
arguments = None
|
|
546
|
-
|
|
547
|
-
subscription.unsubscribe()
|
|
548
|
-
service.execute_command(app_name, "/", "C", {"X": False})
|
|
549
|
-
time.sleep(5)
|
|
550
|
-
assert not executed
|
|
551
|
-
assert command is None
|
|
552
|
-
assert arguments is None
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
api_name_rules_str = (
|
|
556
|
-
"RULES:\n"
|
|
557
|
-
" STRING: X__\n"
|
|
558
|
-
" allowedValues = yes, no\n"
|
|
559
|
-
" logicalMapping = True, False\n"
|
|
560
|
-
" attr1 = 42.0\n"
|
|
561
|
-
" APIName = xxx\n"
|
|
562
|
-
" END\n"
|
|
563
|
-
" STRING: Y__\n"
|
|
564
|
-
' allowedValues = \\"1\\", \\"2\\", \\"3\\"\n'
|
|
565
|
-
' default = \\"2\\"\n'
|
|
566
|
-
" isNumerical = True\n"
|
|
567
|
-
" APIName = yyy\n"
|
|
568
|
-
" END\n"
|
|
569
|
-
" INTEGER: Z\n"
|
|
570
|
-
" END\n"
|
|
571
|
-
" SINGLETON: ROOT\n"
|
|
572
|
-
" members = A__, B, E__\n"
|
|
573
|
-
" commands = C__, D\n"
|
|
574
|
-
" SINGLETON: A__\n"
|
|
575
|
-
" members = X__\n"
|
|
576
|
-
" APIName = aaa\n"
|
|
577
|
-
" END\n"
|
|
578
|
-
" OBJECT: B\n"
|
|
579
|
-
" members = Y__, Z\n"
|
|
580
|
-
" END\n"
|
|
581
|
-
" OBJECT: E__\n"
|
|
582
|
-
" members = Y__\n"
|
|
583
|
-
" APIName = eee\n"
|
|
584
|
-
" END\n"
|
|
585
|
-
" COMMAND: C__\n"
|
|
586
|
-
" arguments = X__\n"
|
|
587
|
-
" functionName = CFunc\n"
|
|
588
|
-
" APIName = ccc\n"
|
|
589
|
-
" END\n"
|
|
590
|
-
" COMMAND: D\n"
|
|
591
|
-
" arguments = X__\n"
|
|
592
|
-
" functionName = CFunc\n"
|
|
593
|
-
" END\n"
|
|
594
|
-
" END\n"
|
|
595
|
-
"END\n"
|
|
596
|
-
)
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
@pytest.mark.fluent_version(">=25.2")
|
|
600
|
-
def test_datamodel_api_with_mapped_names(datamodel_api_version_new, new_solver_session):
|
|
601
|
-
solver = new_solver_session
|
|
602
|
-
app_name = "test"
|
|
603
|
-
create_datamodel_root_in_server(solver, api_name_rules_str, app_name)
|
|
604
|
-
service = solver._se_service
|
|
605
|
-
static_info = service.get_static_info(app_name)
|
|
606
|
-
assert (
|
|
607
|
-
get_static_info_value(static_info, "/singletons/aaa/parameters/xxx/type")
|
|
608
|
-
== "Logical"
|
|
609
|
-
)
|
|
610
|
-
assert (
|
|
611
|
-
get_static_info_value(static_info, "/namedobjects/B/parameters/yyy/type")
|
|
612
|
-
== "Integer"
|
|
613
|
-
)
|
|
614
|
-
assert (
|
|
615
|
-
get_static_info_value(static_info, "/namedobjects/B/parameters/Z/type")
|
|
616
|
-
== "Integer"
|
|
617
|
-
)
|
|
618
|
-
|
|
619
|
-
command_args = [
|
|
620
|
-
{
|
|
621
|
-
"name": "xxx",
|
|
622
|
-
"type": "Logical",
|
|
623
|
-
}
|
|
624
|
-
]
|
|
625
|
-
command_args = [sorted(x.items()) for x in command_args]
|
|
626
|
-
ccc_args = get_static_info_value(static_info, "/commands/ccc/commandinfo/args")
|
|
627
|
-
assert command_args == [sorted(x.items()) for x in ccc_args]
|
|
628
|
-
d_args = get_static_info_value(static_info, "/commands/D/commandinfo/args")
|
|
629
|
-
assert command_args == [sorted(x.items()) for x in d_args]
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
# TODO: what are the equivalent of following tests in Python?
|
|
633
|
-
# testMapperMapDataModelPathToAPIPath
|
|
634
|
-
# testMapperMapAPIPathToDataModelPath
|
|
635
|
-
# testMapperMapDMValueToAPI
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
@pytest.mark.fluent_version(">=25.2")
|
|
639
|
-
def test_datamodel_api_root_get_and_set_state_with_mapped_names(
|
|
640
|
-
datamodel_api_version_new, new_solver_session
|
|
641
|
-
):
|
|
642
|
-
solver = new_solver_session
|
|
643
|
-
app_name = "test"
|
|
644
|
-
create_datamodel_root_in_server(solver, api_name_rules_str, app_name)
|
|
645
|
-
service = solver._se_service
|
|
646
|
-
assert service.get_state(app_name, "/") == {"aaa": {"xxx": None}}
|
|
647
|
-
service.set_state(app_name, "/A__/X__", "yes")
|
|
648
|
-
assert service.get_state(app_name, "/") == {"aaa": {"xxx": True}}
|
|
649
|
-
service.set_state(app_name, "/", {"aaa": {"xxx": False}})
|
|
650
|
-
assert service.get_state(app_name, "/") == {"aaa": {"xxx": False}}
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
@pytest.mark.fluent_version(">=25.2")
|
|
654
|
-
def test_datamodel_api_root_get_attrs_with_mapped_names(
|
|
655
|
-
datamodel_api_version_new, new_solver_session
|
|
656
|
-
):
|
|
657
|
-
solver = new_solver_session
|
|
658
|
-
app_name = "test"
|
|
659
|
-
create_datamodel_root_in_server(solver, api_name_rules_str, app_name)
|
|
660
|
-
service = solver._se_service
|
|
661
|
-
assert service.get_attribute_value(app_name, "/aaa/xxx", "attr1") == 42.0
|
|
662
|
-
service.set_state(app_name, "/", {"B:b": {}})
|
|
663
|
-
assert service.get_attribute_value(app_name, "/B:b/yyy", "default") == 2
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
@pytest.mark.fluent_version(">=25.2")
|
|
667
|
-
def test_datamodel_api_cmd_args_op_with_mapped_names(
|
|
668
|
-
datamodel_api_version_new, new_solver_session
|
|
669
|
-
):
|
|
670
|
-
solver = new_solver_session
|
|
671
|
-
app_name = "test"
|
|
672
|
-
create_datamodel_root_in_server(solver, api_name_rules_str, app_name)
|
|
673
|
-
service = solver._se_service
|
|
674
|
-
c_name = service.create_command_arguments(app_name, "/", "ccc")
|
|
675
|
-
x_path_str = f"/C__:{c_name}/xxx" # noqa: F841
|
|
676
|
-
# TODO: issue
|
|
677
|
-
# service.set_state(app_name, x_path_str, True)
|
|
678
|
-
service.set_state(app_name, f"/C__:{c_name}", {"xxx": True})
|
|
679
|
-
assert service.get_state(app_name, f"/C__:{c_name}") == {"xxx": True}
|
|
680
|
-
assert service.get_attribute_value(app_name, f"/C__:{c_name}", "xxx/attr1") == 42.0
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
@pytest.mark.fluent_version(">=25.2")
|
|
684
|
-
def test_datamodel_api_rename_with_mapped_names(
|
|
685
|
-
datamodel_api_version_new, new_solver_session
|
|
686
|
-
):
|
|
687
|
-
solver = new_solver_session
|
|
688
|
-
app_name = "test"
|
|
689
|
-
create_datamodel_root_in_server(solver, api_name_rules_str, app_name)
|
|
690
|
-
service = solver._se_service
|
|
691
|
-
service.set_state(app_name, "/", {"B:b": {}})
|
|
692
|
-
service.rename(app_name, "/B:b", "c")
|
|
693
|
-
service.set_state(app_name, "/", {"eee:e": {}})
|
|
694
|
-
assert service.get_state(app_name, "/B:c/yyy") == 2
|
|
695
|
-
service.rename(app_name, "/eee:e", "x")
|
|
696
|
-
assert service.get_state(app_name, "/eee:x/yyy") == 2
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
@pytest.mark.fluent_version(">=25.2")
|
|
700
|
-
def test_datamodel_api_delete_object_with_mapped_names(
|
|
701
|
-
datamodel_api_version_new, new_solver_session
|
|
702
|
-
):
|
|
703
|
-
solver = new_solver_session
|
|
704
|
-
app_name = "test"
|
|
705
|
-
create_datamodel_root_in_server(solver, api_name_rules_str, app_name)
|
|
706
|
-
service = solver._se_service
|
|
707
|
-
service.set_state(app_name, "/", {"B:b": {}})
|
|
708
|
-
service.delete_object(app_name, "/B:b")
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
@pytest.mark.fluent_version(">=25.2")
|
|
712
|
-
def test_datamodel_api_on_created_on_changed_on_deleted_with_mapped_names(
|
|
713
|
-
datamodel_api_version_new, new_solver_session
|
|
714
|
-
):
|
|
715
|
-
solver = new_solver_session
|
|
716
|
-
app_name = "test"
|
|
717
|
-
create_datamodel_root_in_server(solver, api_name_rules_str, app_name)
|
|
718
|
-
service = solver._se_service
|
|
719
|
-
root = create_root_using_datamodelgen(service, app_name)
|
|
720
|
-
called_paths = []
|
|
721
|
-
delete_count = 0
|
|
722
|
-
changes = []
|
|
723
|
-
|
|
724
|
-
def create_cb(obj):
|
|
725
|
-
called_paths.append(convert_path_to_se_path(obj.path))
|
|
726
|
-
|
|
727
|
-
def delete_cb():
|
|
728
|
-
nonlocal delete_count
|
|
729
|
-
delete_count += 1
|
|
730
|
-
|
|
731
|
-
def changed_cb(value):
|
|
732
|
-
changes.append(value())
|
|
733
|
-
|
|
734
|
-
service.add_on_child_created(app_name, "/", "eee", root, create_cb)
|
|
735
|
-
service.set_state(app_name, "/", {"eee:b": {}})
|
|
736
|
-
service.set_state(app_name, "/", {"eee:c": {}})
|
|
737
|
-
service.set_state(app_name, "/", {"B:d": {}})
|
|
738
|
-
service.add_on_deleted(app_name, "/eee:b", root, delete_cb)
|
|
739
|
-
service.add_on_deleted(app_name, "/eee:c", root, delete_cb)
|
|
740
|
-
service.add_on_changed(app_name, "/eee:b/yyy", root.eee["b"].yyy, changed_cb)
|
|
741
|
-
service.delete_object(app_name, "/eee:c")
|
|
742
|
-
service.set_state(app_name, "/", {"eee:b": {"yyy": 42}})
|
|
743
|
-
timeout_loop(lambda: len(changes) == 1, timeout=5)
|
|
744
|
-
assert called_paths == ["/eee:b", "/eee:c"]
|
|
745
|
-
assert delete_count == 1
|
|
746
|
-
assert changes == [42]
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
@pytest.mark.fluent_version(">=25.2")
|
|
750
|
-
def test_datamodel_api_on_changed_with_mapped_names(
|
|
751
|
-
datamodel_api_version_new, new_solver_session
|
|
752
|
-
):
|
|
753
|
-
solver = new_solver_session
|
|
754
|
-
app_name = "test"
|
|
755
|
-
create_datamodel_root_in_server(solver, api_name_rules_str, app_name)
|
|
756
|
-
service = solver._se_service
|
|
757
|
-
root = create_root_using_datamodelgen(service, app_name)
|
|
758
|
-
changes = []
|
|
759
|
-
|
|
760
|
-
def changed_cb(value):
|
|
761
|
-
changes.append(value())
|
|
762
|
-
|
|
763
|
-
service.set_state(app_name, "/", {"eee:b": {}})
|
|
764
|
-
service.add_on_changed(app_name, "/eee:b/yyy", root.eee["b"].yyy, changed_cb)
|
|
765
|
-
service.set_state(app_name, "/", {"eee:b": {"yyy": 42}})
|
|
766
|
-
timeout_loop(lambda: len(changes) == 1, timeout=5)
|
|
767
|
-
assert changes == [42]
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
# TODO: what are the equivalent of following tests in Python?
|
|
771
|
-
# testDataModelAPIWithNullCustomNameMapper
|
|
772
|
-
# testDataModelAPIWithAppendingCustomNameMapper
|
|
773
|
-
# testDataModelAPIWithSnakeyCustomNameMapper
|
|
774
|
-
# testDataModelAPIWithSnakeyCustomNameMapperAndMoreCamels
|