ansys-fluent-core 0.28.2__py3-none-any.whl → 0.29.0__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 (221) hide show
  1. ansys/fluent/core/__init__.py +26 -1
  2. ansys/fluent/core/_stand_alone_datamodel_client/_datamodel_client.py +22 -0
  3. ansys/fluent/core/_version.py +24 -2
  4. ansys/fluent/core/codegen/__init__.py +22 -0
  5. ansys/fluent/core/codegen/allapigen.py +38 -5
  6. ansys/fluent/core/codegen/builtin_settingsgen.py +22 -0
  7. ansys/fluent/core/codegen/data/__init__.py +21 -0
  8. ansys/fluent/core/codegen/data/fluent_gui_help_patch.py +22 -0
  9. ansys/fluent/core/codegen/data/meshing_utilities_examples.py +22 -0
  10. ansys/fluent/core/codegen/datamodelgen.py +40 -4
  11. ansys/fluent/core/codegen/print_fluent_version.py +22 -0
  12. ansys/fluent/core/codegen/settingsgen.py +67 -4
  13. ansys/fluent/core/codegen/tuigen.py +44 -6
  14. ansys/fluent/core/codegen/walk_api.py +67 -18
  15. ansys/fluent/core/codegen/write_settings_yaml.py +22 -0
  16. ansys/fluent/core/data_model_cache.py +22 -0
  17. ansys/fluent/core/examples/__init__.py +22 -0
  18. ansys/fluent/core/examples/downloads.py +22 -0
  19. ansys/fluent/core/exceptions.py +22 -0
  20. ansys/fluent/core/file_session.py +22 -0
  21. ansys/fluent/core/filereader/__init__.py +21 -0
  22. ansys/fluent/core/filereader/case_file.py +22 -0
  23. ansys/fluent/core/filereader/casereader.py +22 -0
  24. ansys/fluent/core/filereader/data_file.py +22 -0
  25. ansys/fluent/core/filereader/lispy.py +22 -0
  26. ansys/fluent/core/fluent_connection.py +23 -1
  27. ansys/fluent/core/generated/api_tree/api_objects.json +1 -1
  28. ansys/fluent/core/generated/datamodel_252/meshing.py +32 -0
  29. ansys/fluent/core/generated/fluent_version_252.py +3 -3
  30. ansys/fluent/core/generated/solver/settings_222.py +0 -72
  31. ansys/fluent/core/generated/solver/settings_222.pyi +0 -307
  32. ansys/fluent/core/generated/solver/settings_231.py +0 -574
  33. ansys/fluent/core/generated/solver/settings_231.pyi +0 -561
  34. ansys/fluent/core/generated/solver/settings_232.py +0 -527
  35. ansys/fluent/core/generated/solver/settings_232.pyi +0 -2803
  36. ansys/fluent/core/generated/solver/settings_241.py +0 -478
  37. ansys/fluent/core/generated/solver/settings_241.pyi +0 -522
  38. ansys/fluent/core/generated/solver/settings_242.py +0 -361
  39. ansys/fluent/core/generated/solver/settings_242.pyi +0 -591
  40. ansys/fluent/core/generated/solver/settings_251.py +0 -399
  41. ansys/fluent/core/generated/solver/settings_251.pyi +0 -629
  42. ansys/fluent/core/generated/solver/settings_252.py +7794 -4185
  43. ansys/fluent/core/generated/solver/settings_252.pyi +6986 -3213
  44. ansys/fluent/core/generated/solver/tui_252.py +537 -181
  45. ansys/fluent/core/get_build_details.py +22 -0
  46. ansys/fluent/core/journaling.py +38 -0
  47. ansys/fluent/core/launcher/__init__.py +22 -0
  48. ansys/fluent/core/launcher/container_launcher.py +65 -56
  49. ansys/fluent/core/launcher/error_handler.py +30 -0
  50. ansys/fluent/core/launcher/fluent_container.py +45 -20
  51. ansys/fluent/core/launcher/launcher.py +53 -5
  52. ansys/fluent/core/launcher/launcher_utils.py +22 -0
  53. ansys/fluent/core/launcher/pim_launcher.py +120 -86
  54. ansys/fluent/core/launcher/process_launch_string.py +22 -0
  55. ansys/fluent/core/launcher/pyfluent_enums.py +22 -0
  56. ansys/fluent/core/launcher/server_info.py +45 -3
  57. ansys/fluent/core/launcher/slurm_launcher.py +25 -3
  58. ansys/fluent/core/launcher/standalone_launcher.py +68 -63
  59. ansys/fluent/core/launcher/watchdog.py +22 -0
  60. ansys/fluent/core/logging.py +24 -0
  61. ansys/fluent/core/logging_config.yaml +3 -0
  62. ansys/fluent/core/meshing/meshing_workflow.py +22 -0
  63. ansys/fluent/core/parametric.py +22 -0
  64. ansys/fluent/core/post_objects/__init__.py +21 -0
  65. ansys/fluent/core/post_objects/check_in_notebook.py +22 -0
  66. ansys/fluent/core/post_objects/meta.py +22 -0
  67. ansys/fluent/core/post_objects/post_helper.py +22 -0
  68. ansys/fluent/core/post_objects/post_object_definitions.py +22 -0
  69. ansys/fluent/core/post_objects/post_objects_container.py +22 -0
  70. ansys/fluent/core/post_objects/singleton_meta.py +22 -0
  71. ansys/fluent/core/post_objects/timing_decorator.py +22 -0
  72. ansys/fluent/core/report.py +77 -0
  73. ansys/fluent/core/rpvars.py +22 -0
  74. ansys/fluent/core/scheduler/__init__.py +22 -0
  75. ansys/fluent/core/scheduler/load_machines.py +22 -0
  76. ansys/fluent/core/scheduler/machine_list.py +22 -0
  77. ansys/fluent/core/search.py +22 -0
  78. ansys/fluent/core/services/__init__.py +22 -0
  79. ansys/fluent/core/services/api_upgrade.py +22 -0
  80. ansys/fluent/core/services/app_utilities.py +38 -0
  81. ansys/fluent/core/services/batch_ops.py +22 -0
  82. ansys/fluent/core/services/datamodel_se.py +26 -1
  83. ansys/fluent/core/services/datamodel_tui.py +22 -0
  84. ansys/fluent/core/services/deprecated_field_data.py +23 -1
  85. ansys/fluent/core/services/events.py +22 -0
  86. ansys/fluent/core/services/field_data.py +285 -2
  87. ansys/fluent/core/services/health_check.py +22 -0
  88. ansys/fluent/core/services/interceptors.py +50 -2
  89. ansys/fluent/core/services/monitor.py +22 -0
  90. ansys/fluent/core/services/reduction.py +22 -0
  91. ansys/fluent/core/services/scheme_eval.py +22 -0
  92. ansys/fluent/core/services/settings.py +22 -0
  93. ansys/fluent/core/services/solution_variables.py +22 -0
  94. ansys/fluent/core/services/streaming.py +22 -0
  95. ansys/fluent/core/services/transcript.py +22 -0
  96. ansys/fluent/core/session.py +39 -2
  97. ansys/fluent/core/session_base_meshing.py +22 -0
  98. ansys/fluent/core/session_meshing.py +22 -0
  99. ansys/fluent/core/session_meshing.pyi +22 -0
  100. ansys/fluent/core/session_pure_meshing.py +22 -0
  101. ansys/fluent/core/session_pure_meshing.pyi +22 -0
  102. ansys/fluent/core/session_shared.py +22 -0
  103. ansys/fluent/core/session_solver.py +43 -0
  104. ansys/fluent/core/session_solver.pyi +22 -0
  105. ansys/fluent/core/session_solver_aero.py +22 -0
  106. ansys/fluent/core/session_solver_icing.py +22 -0
  107. ansys/fluent/core/session_solver_lite.py +22 -0
  108. ansys/fluent/core/solver/__init__.py +22 -0
  109. ansys/fluent/core/solver/error_message.py +22 -0
  110. ansys/fluent/core/solver/flobject.py +22 -0
  111. ansys/fluent/core/solver/flunits.py +22 -0
  112. ansys/fluent/core/solver/function/__init__.py +22 -0
  113. ansys/fluent/core/solver/function/reduction.py +22 -0
  114. ansys/fluent/core/solver/settings_builtin_bases.py +22 -0
  115. ansys/fluent/core/solver/settings_builtin_data.py +22 -0
  116. ansys/fluent/core/solver/settings_external.py +22 -0
  117. ansys/fluent/core/streaming_services/__init__.py +21 -0
  118. ansys/fluent/core/streaming_services/datamodel_event_streaming.py +22 -0
  119. ansys/fluent/core/streaming_services/datamodel_streaming.py +22 -0
  120. ansys/fluent/core/streaming_services/events_streaming.py +22 -0
  121. ansys/fluent/core/streaming_services/field_data_streaming.py +22 -0
  122. ansys/fluent/core/streaming_services/monitor_streaming.py +23 -1
  123. ansys/fluent/core/streaming_services/streaming.py +22 -0
  124. ansys/fluent/core/streaming_services/transcript_streaming.py +22 -0
  125. ansys/fluent/core/systemcoupling.py +22 -0
  126. ansys/fluent/core/utils/__init__.py +22 -0
  127. ansys/fluent/core/utils/data_transfer.py +22 -0
  128. ansys/fluent/core/utils/deprecate.py +24 -1
  129. ansys/fluent/core/utils/dictionary_operations.py +22 -0
  130. ansys/fluent/core/utils/dump_session_data.py +22 -0
  131. ansys/fluent/core/utils/event_loop.py +22 -0
  132. ansys/fluent/core/utils/execution.py +22 -0
  133. ansys/fluent/core/utils/file_transfer_service.py +22 -0
  134. ansys/fluent/core/utils/fix_doc.py +22 -0
  135. ansys/fluent/core/utils/fldoc.py +22 -0
  136. ansys/fluent/core/utils/fluent_version.py +22 -0
  137. ansys/fluent/core/utils/networking.py +22 -0
  138. ansys/fluent/core/utils/setup_for_fluent.py +22 -0
  139. ansys/fluent/core/warnings.py +22 -0
  140. ansys/fluent/core/workflow.py +22 -0
  141. {ansys_fluent_core-0.28.2.dist-info → ansys_fluent_core-0.29.0.dist-info}/LICENSE +8 -8
  142. {ansys_fluent_core-0.28.2.dist-info → ansys_fluent_core-0.29.0.dist-info}/METADATA +56 -33
  143. ansys_fluent_core-0.29.0.dist-info/RECORD +219 -0
  144. {ansys_fluent_core-0.28.2.dist-info → ansys_fluent_core-0.29.0.dist-info}/WHEEL +1 -1
  145. ansys/fluent/core/docs/README.rst +0 -155
  146. ansys/fluent/tests/conftest.py +0 -415
  147. ansys/fluent/tests/fluent_fixtures.py +0 -195
  148. ansys/fluent/tests/integration/test_optislang/test_optislang_integration.py +0 -263
  149. ansys/fluent/tests/parametric/test_local_parametric_run.py +0 -36
  150. ansys/fluent/tests/parametric/test_local_parametric_setup.py +0 -34
  151. ansys/fluent/tests/parametric/test_parametric_workflow.py +0 -279
  152. ansys/fluent/tests/test_aero_session.py +0 -88
  153. ansys/fluent/tests/test_batch_ops.py +0 -39
  154. ansys/fluent/tests/test_builtin_settings.py +0 -761
  155. ansys/fluent/tests/test_cad_to_post_ftm.py +0 -525
  156. ansys/fluent/tests/test_cad_to_post_wtm.py +0 -250
  157. ansys/fluent/tests/test_casereader.py +0 -324
  158. ansys/fluent/tests/test_codegen.py +0 -783
  159. ansys/fluent/tests/test_creatable.py +0 -31
  160. ansys/fluent/tests/test_data_model_cache.py +0 -434
  161. ansys/fluent/tests/test_datamodel_api.py +0 -429
  162. ansys/fluent/tests/test_datamodel_service.py +0 -814
  163. ansys/fluent/tests/test_datareader.py +0 -103
  164. ansys/fluent/tests/test_error_handling.py +0 -24
  165. ansys/fluent/tests/test_events_manager.py +0 -214
  166. ansys/fluent/tests/test_field_data.py +0 -466
  167. ansys/fluent/tests/test_file_session.py +0 -355
  168. ansys/fluent/tests/test_file_transfer_service.py +0 -165
  169. ansys/fluent/tests/test_fix_doc.py +0 -29
  170. ansys/fluent/tests/test_flobject.py +0 -1235
  171. ansys/fluent/tests/test_fluent_fixes.py +0 -106
  172. ansys/fluent/tests/test_fluent_session.py +0 -270
  173. ansys/fluent/tests/test_fluent_version.py +0 -66
  174. ansys/fluent/tests/test_fluent_version_marker.py +0 -65
  175. ansys/fluent/tests/test_icing_session.py +0 -9
  176. ansys/fluent/tests/test_launcher.py +0 -529
  177. ansys/fluent/tests/test_launcher_remote.py +0 -272
  178. ansys/fluent/tests/test_lispy.py +0 -40
  179. ansys/fluent/tests/test_logging.py +0 -16
  180. ansys/fluent/tests/test_mapped_api.py +0 -766
  181. ansys/fluent/tests/test_meshing_utilities.py +0 -2436
  182. ansys/fluent/tests/test_meshing_workflow.py +0 -421
  183. ansys/fluent/tests/test_meshingmode/test_meshing_launch.py +0 -168
  184. ansys/fluent/tests/test_new_meshing_workflow.py +0 -1801
  185. ansys/fluent/tests/test_preferences.py +0 -89
  186. ansys/fluent/tests/test_pure_mesh_vs_mesh_workflow.py +0 -101
  187. ansys/fluent/tests/test_reduction.py +0 -484
  188. ansys/fluent/tests/test_rp_vars.py +0 -77
  189. ansys/fluent/tests/test_scheduler.py +0 -471
  190. ansys/fluent/tests/test_scheme_eval_222.py +0 -338
  191. ansys/fluent/tests/test_scheme_eval_231.py +0 -243
  192. ansys/fluent/tests/test_search.py +0 -344
  193. ansys/fluent/tests/test_session.py +0 -594
  194. ansys/fluent/tests/test_settings_api.py +0 -606
  195. ansys/fluent/tests/test_settings_reader.py +0 -85
  196. ansys/fluent/tests/test_slurm_future.py +0 -67
  197. ansys/fluent/tests/test_solution_variables.py +0 -241
  198. ansys/fluent/tests/test_solver_monitors.py +0 -83
  199. ansys/fluent/tests/test_solvermode/boundaries_periodic_expDict +0 -1712
  200. ansys/fluent/tests/test_solvermode/test_boundaries.py +0 -127
  201. ansys/fluent/tests/test_solvermode/test_calculationactivities.py +0 -20
  202. ansys/fluent/tests/test_solvermode/test_controls.py +0 -131
  203. ansys/fluent/tests/test_solvermode/test_general.py +0 -109
  204. ansys/fluent/tests/test_solvermode/test_initialization.py +0 -83
  205. ansys/fluent/tests/test_solvermode/test_materials.py +0 -40
  206. ansys/fluent/tests/test_solvermode/test_methods.py +0 -65
  207. ansys/fluent/tests/test_solvermode/test_models.py +0 -99
  208. ansys/fluent/tests/test_solvermode/test_named_expressions.py +0 -35
  209. ansys/fluent/tests/test_solvermode/test_post_vector.py +0 -22
  210. ansys/fluent/tests/test_solvermode/test_species_model.py +0 -67
  211. ansys/fluent/tests/test_streaming_services.py +0 -52
  212. ansys/fluent/tests/test_systemcoupling.py +0 -44
  213. ansys/fluent/tests/test_topy.py +0 -179
  214. ansys/fluent/tests/test_tui_api.py +0 -70
  215. ansys/fluent/tests/test_type_stub.py +0 -37
  216. ansys/fluent/tests/test_utils.py +0 -82
  217. ansys/fluent/tests/util/__init__.py +0 -36
  218. ansys/fluent/tests/util/meshing_workflow.py +0 -33
  219. ansys/fluent/tests/util/solver.py +0 -72
  220. ansys_fluent_core-0.28.2.dist-info/AUTHORS +0 -12
  221. ansys_fluent_core-0.28.2.dist-info/RECORD +0 -294
@@ -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