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