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