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.

Files changed (107) hide show
  1. ansys/fluent/core/__init__.py +1 -1
  2. ansys/fluent/core/_version.py +2 -2
  3. ansys/fluent/core/codegen/tuigen.py +1 -1
  4. ansys/fluent/core/codegen/walk_api.py +45 -18
  5. ansys/fluent/core/generated/api_tree/api_objects.json +1 -1
  6. ansys/fluent/core/generated/datamodel_252/meshing.py +1 -0
  7. ansys/fluent/core/generated/datamodel_252/preferences.py +7 -0
  8. ansys/fluent/core/generated/fluent_version_252.py +3 -3
  9. ansys/fluent/core/generated/meshing/tui_252.py +395 -390
  10. ansys/fluent/core/generated/solver/settings_252.py +782 -306
  11. ansys/fluent/core/generated/solver/settings_252.pyi +442 -133
  12. ansys/fluent/core/generated/solver/tui_252.py +4046 -3737
  13. ansys/fluent/core/launcher/container_launcher.py +4 -3
  14. ansys/fluent/core/launcher/fluent_container.py +22 -19
  15. ansys/fluent/core/launcher/launcher.py +2 -2
  16. ansys/fluent/core/launcher/pim_launcher.py +2 -2
  17. ansys/fluent/core/launcher/slurm_launcher.py +2 -2
  18. ansys/fluent/core/launcher/standalone_launcher.py +2 -2
  19. ansys/fluent/core/logging.py +2 -0
  20. ansys/fluent/core/logging_config.yaml +3 -0
  21. ansys/fluent/core/services/app_utilities.py +2 -1
  22. ansys/fluent/core/services/datamodel_se.py +141 -61
  23. ansys/fluent/core/services/field_data.py +252 -0
  24. ansys/fluent/core/services/interceptors.py +28 -2
  25. ansys/fluent/core/session.py +7 -2
  26. ansys/fluent/core/session_solver.py +21 -0
  27. ansys/fluent/core/streaming_services/datamodel_event_streaming.py +12 -12
  28. {ansys_fluent_core-0.29.dev0.dist-info → ansys_fluent_core-0.29.dev2.dist-info}/LICENSE +1 -1
  29. {ansys_fluent_core-0.29.dev0.dist-info → ansys_fluent_core-0.29.dev2.dist-info}/METADATA +53 -31
  30. {ansys_fluent_core-0.29.dev0.dist-info → ansys_fluent_core-0.29.dev2.dist-info}/RECORD +65 -141
  31. {ansys_fluent_core-0.29.dev0.dist-info → ansys_fluent_core-0.29.dev2.dist-info}/WHEEL +1 -1
  32. ansys/fluent/core/docs/README.rst +0 -155
  33. ansys/fluent/tests/conftest.py +0 -415
  34. ansys/fluent/tests/fluent_fixtures.py +0 -195
  35. ansys/fluent/tests/integration/test_optislang/test_optislang_integration.py +0 -263
  36. ansys/fluent/tests/parametric/test_local_parametric_run.py +0 -36
  37. ansys/fluent/tests/parametric/test_local_parametric_setup.py +0 -34
  38. ansys/fluent/tests/parametric/test_parametric_workflow.py +0 -279
  39. ansys/fluent/tests/test_aero_session.py +0 -88
  40. ansys/fluent/tests/test_batch_ops.py +0 -39
  41. ansys/fluent/tests/test_builtin_settings.py +0 -761
  42. ansys/fluent/tests/test_cad_to_post_ftm.py +0 -525
  43. ansys/fluent/tests/test_cad_to_post_wtm.py +0 -250
  44. ansys/fluent/tests/test_casereader.py +0 -324
  45. ansys/fluent/tests/test_codegen.py +0 -783
  46. ansys/fluent/tests/test_creatable.py +0 -31
  47. ansys/fluent/tests/test_data_model_cache.py +0 -434
  48. ansys/fluent/tests/test_datamodel_api.py +0 -449
  49. ansys/fluent/tests/test_datamodel_service.py +0 -814
  50. ansys/fluent/tests/test_datareader.py +0 -103
  51. ansys/fluent/tests/test_error_handling.py +0 -24
  52. ansys/fluent/tests/test_events_manager.py +0 -214
  53. ansys/fluent/tests/test_field_data.py +0 -466
  54. ansys/fluent/tests/test_file_session.py +0 -355
  55. ansys/fluent/tests/test_file_transfer_service.py +0 -165
  56. ansys/fluent/tests/test_fix_doc.py +0 -29
  57. ansys/fluent/tests/test_flobject.py +0 -1235
  58. ansys/fluent/tests/test_fluent_fixes.py +0 -106
  59. ansys/fluent/tests/test_fluent_session.py +0 -270
  60. ansys/fluent/tests/test_fluent_version.py +0 -66
  61. ansys/fluent/tests/test_fluent_version_marker.py +0 -65
  62. ansys/fluent/tests/test_icing_session.py +0 -9
  63. ansys/fluent/tests/test_launcher.py +0 -529
  64. ansys/fluent/tests/test_launcher_remote.py +0 -272
  65. ansys/fluent/tests/test_lispy.py +0 -40
  66. ansys/fluent/tests/test_logging.py +0 -16
  67. ansys/fluent/tests/test_mapped_api.py +0 -774
  68. ansys/fluent/tests/test_meshing_utilities.py +0 -2436
  69. ansys/fluent/tests/test_meshing_workflow.py +0 -421
  70. ansys/fluent/tests/test_meshingmode/test_meshing_launch.py +0 -168
  71. ansys/fluent/tests/test_new_meshing_workflow.py +0 -1801
  72. ansys/fluent/tests/test_preferences.py +0 -89
  73. ansys/fluent/tests/test_pure_mesh_vs_mesh_workflow.py +0 -101
  74. ansys/fluent/tests/test_reduction.py +0 -484
  75. ansys/fluent/tests/test_rp_vars.py +0 -77
  76. ansys/fluent/tests/test_scheduler.py +0 -471
  77. ansys/fluent/tests/test_scheme_eval_222.py +0 -338
  78. ansys/fluent/tests/test_scheme_eval_231.py +0 -243
  79. ansys/fluent/tests/test_search.py +0 -344
  80. ansys/fluent/tests/test_session.py +0 -594
  81. ansys/fluent/tests/test_settings_api.py +0 -606
  82. ansys/fluent/tests/test_settings_reader.py +0 -85
  83. ansys/fluent/tests/test_slurm_future.py +0 -67
  84. ansys/fluent/tests/test_solution_variables.py +0 -241
  85. ansys/fluent/tests/test_solver_monitors.py +0 -83
  86. ansys/fluent/tests/test_solvermode/boundaries_periodic_expDict +0 -1712
  87. ansys/fluent/tests/test_solvermode/test_boundaries.py +0 -127
  88. ansys/fluent/tests/test_solvermode/test_calculationactivities.py +0 -20
  89. ansys/fluent/tests/test_solvermode/test_controls.py +0 -131
  90. ansys/fluent/tests/test_solvermode/test_general.py +0 -109
  91. ansys/fluent/tests/test_solvermode/test_initialization.py +0 -83
  92. ansys/fluent/tests/test_solvermode/test_materials.py +0 -40
  93. ansys/fluent/tests/test_solvermode/test_methods.py +0 -65
  94. ansys/fluent/tests/test_solvermode/test_models.py +0 -99
  95. ansys/fluent/tests/test_solvermode/test_named_expressions.py +0 -35
  96. ansys/fluent/tests/test_solvermode/test_post_vector.py +0 -22
  97. ansys/fluent/tests/test_solvermode/test_species_model.py +0 -67
  98. ansys/fluent/tests/test_streaming_services.py +0 -52
  99. ansys/fluent/tests/test_systemcoupling.py +0 -44
  100. ansys/fluent/tests/test_topy.py +0 -179
  101. ansys/fluent/tests/test_tui_api.py +0 -70
  102. ansys/fluent/tests/test_type_stub.py +0 -37
  103. ansys/fluent/tests/test_utils.py +0 -82
  104. ansys/fluent/tests/util/__init__.py +0 -36
  105. ansys/fluent/tests/util/meshing_workflow.py +0 -33
  106. ansys/fluent/tests/util/solver.py +0 -72
  107. 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