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,449 +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 (
7
- SubscribeEventError,
8
- convert_path_to_se_path,
9
- )
10
- from ansys.fluent.core.utils.execution import timeout_loop
11
-
12
- rule_str = (
13
- "RULES:\n"
14
- " STRING: X\n"
15
- " default = ijk\n"
16
- " END\n"
17
- " SINGLETON: ROOT\n"
18
- " members = A, B, D, G\n"
19
- " commands= C\n"
20
- " SINGLETON: A\n"
21
- " members = X\n"
22
- " x = $./X\n"
23
- " END\n"
24
- " OBJECT: B\n"
25
- " members = X\n"
26
- " END\n"
27
- " SINGLETON: D\n"
28
- " members = E, F, X\n"
29
- " SINGLETON: E\n"
30
- " members = X\n"
31
- " END\n"
32
- " SINGLETON: F\n"
33
- " members = X\n"
34
- " END\n"
35
- " END\n"
36
- " SINGLETON: G\n"
37
- " members = H\n"
38
- " DICT: H\n"
39
- " END\n"
40
- " END\n"
41
- " COMMAND: C\n"
42
- " arguments = X\n"
43
- " x = $/A/X\n"
44
- " END\n"
45
- " END\n"
46
- "END\n"
47
- )
48
-
49
-
50
- @pytest.mark.fluent_version(">=25.2")
51
- def test_env_var_setting(datamodel_api_version_all, request, new_solver_session):
52
- solver = new_solver_session
53
- test_name = request.node.name
54
- for var in ["REMOTING_NEW_DM_API", "REMOTING_MAPPED_NEW_DM_API"]:
55
- # TODO: It might be possible to check the param value in the fixture
56
- # instead of checking the test name here.
57
- if test_name.endswith("[old]"):
58
- assert solver.scheme_eval.scheme_eval(f'(getenv "{var}")') is None
59
- elif test_name.endswith("[new]"):
60
- assert solver.scheme_eval.scheme_eval(f'(getenv "{var}")') == "1"
61
-
62
-
63
- @pytest.mark.fluent_version(">=25.2")
64
- def test_datamodel_api_on_child_created(datamodel_api_version_all, new_solver_session):
65
- solver = new_solver_session
66
- app_name = "test"
67
- create_datamodel_root_in_server(solver, rule_str, app_name)
68
- service = solver._se_service
69
- root = create_root_using_datamodelgen(service, app_name)
70
-
71
- called = 0
72
- created = []
73
-
74
- def cb(obj):
75
- nonlocal called
76
- nonlocal created
77
- called += 1
78
- created.append(convert_path_to_se_path(obj.path))
79
-
80
- subscription = service.add_on_child_created(app_name, "/", "B", root, cb)
81
- assert called == 0
82
- assert created == []
83
- service.set_state(app_name, "/", {"B:b": {"_name_": "b"}})
84
- timeout_loop(lambda: called == 1, timeout=5)
85
- assert called == 1
86
- assert created == ["/B:b"]
87
- subscription.unsubscribe()
88
-
89
-
90
- @pytest.mark.fluent_version(">=25.2")
91
- def test_datamodel_api_on_changed(datamodel_api_version_all, new_solver_session):
92
- solver = new_solver_session
93
- app_name = "test"
94
- create_datamodel_root_in_server(solver, rule_str, app_name)
95
- service = solver._se_service
96
- root = create_root_using_datamodelgen(service, app_name)
97
- called = 0
98
- state = None
99
- called_obj = 0
100
- state_obj = None
101
-
102
- def cb(obj):
103
- nonlocal called
104
- nonlocal state
105
- state = obj()
106
- called += 1
107
-
108
- def cb_obj(obj):
109
- nonlocal called_obj
110
- nonlocal state_obj
111
- state_obj = obj()
112
- called_obj += 1
113
-
114
- subscription = service.add_on_changed(app_name, "/A/X", root.A.X, cb)
115
- subscription_obj = service.add_on_changed(app_name, "/A", root.A, cb_obj)
116
- assert called == 0
117
- assert state is None
118
- assert called_obj == 0
119
- assert state_obj is None
120
- service.set_state(app_name, "/A/X", "lmn")
121
- timeout_loop(lambda: called == 1, timeout=5)
122
- assert called == 1
123
- assert state == "lmn"
124
- assert called_obj == 1
125
- assert state_obj == {"X": "lmn"}
126
- service.set_state(app_name, "/A/X", "abc")
127
- timeout_loop(lambda: called == 2, timeout=5)
128
- assert called == 2
129
- assert state == "abc"
130
- assert called_obj == 2
131
- assert state_obj == {"X": "abc"}
132
- subscription.unsubscribe()
133
- subscription_obj.unsubscribe()
134
- service.set_state(app_name, "/A/X", "xyz")
135
- time.sleep(5)
136
- assert called == 2
137
- assert state == "abc"
138
- assert called_obj == 2
139
- assert state_obj == {"X": "abc"}
140
-
141
-
142
- @pytest.mark.fluent_version(">=25.2")
143
- def test_datamodel_api_on_affected(datamodel_api_version_all, new_solver_session):
144
- solver = new_solver_session
145
- app_name = "test"
146
- create_datamodel_root_in_server(solver, rule_str, app_name)
147
- service = solver._se_service
148
- root = create_root_using_datamodelgen(service, app_name)
149
- called = 0
150
-
151
- def cb(obj):
152
- nonlocal called
153
- called += 1
154
-
155
- subscription = service.add_on_affected(app_name, "/D", root.D, cb)
156
- assert called == 0
157
- service.set_state(app_name, "/D/X", "lmn")
158
- timeout_loop(lambda: called == 1, timeout=5)
159
- assert called == 1
160
- service.set_state(app_name, "/D/E/X", "lmn")
161
- timeout_loop(lambda: called == 2, timeout=5)
162
- assert called == 2
163
- service.set_state(app_name, "/A/X", "lmn")
164
- time.sleep(5)
165
- assert called == 2
166
- subscription.unsubscribe()
167
- service.set_state(app_name, "/D/E/X", "pqr")
168
- time.sleep(5)
169
- assert called == 2
170
-
171
-
172
- @pytest.mark.fluent_version(">=25.2")
173
- def test_datamodel_api_on_affected_at_type_path(
174
- datamodel_api_version_all, new_solver_session
175
- ):
176
- solver = new_solver_session
177
- app_name = "test"
178
- create_datamodel_root_in_server(solver, rule_str, app_name)
179
- service = solver._se_service
180
- root = create_root_using_datamodelgen(service, app_name)
181
- called = 0
182
-
183
- def cb(obj):
184
- nonlocal called
185
- called += 1
186
-
187
- subscription = service.add_on_affected_at_type_path(
188
- app_name, "/D", "E", root.D.E, cb
189
- )
190
- assert called == 0
191
- service.set_state(app_name, "/D/X", "lmn")
192
- time.sleep(5)
193
- assert called == 0
194
- service.set_state(app_name, "/D/E/X", "lmn")
195
- timeout_loop(lambda: called == 1, timeout=5)
196
- assert called == 1
197
- service.set_state(app_name, "/D/F/X", "lmn")
198
- time.sleep(5)
199
- assert called == 1
200
- subscription.unsubscribe()
201
- service.set_state(app_name, "/D/E/X", "pqr")
202
- time.sleep(5)
203
- assert called == 1
204
-
205
-
206
- @pytest.mark.fluent_version(">=25.2")
207
- def test_datamodel_api_on_deleted(
208
- datamodel_api_version_all, request, new_solver_session
209
- ):
210
- solver = new_solver_session
211
- app_name = "test"
212
- create_datamodel_root_in_server(solver, rule_str, app_name)
213
- service = solver._se_service
214
- root = create_root_using_datamodelgen(service, app_name)
215
- called = False
216
- called_obj = False
217
-
218
- def cb():
219
- nonlocal called
220
- called = True
221
-
222
- def cb_obj():
223
- nonlocal called_obj
224
- called_obj = True
225
-
226
- service.set_state(app_name, "/", {"B:b": {"_name_": "b"}})
227
- subscription = service.add_on_deleted(app_name, "/B:b/X", root.B["b"].X, cb)
228
- subscription_obj = service.add_on_deleted(app_name, "/B:b", root.B["b"], cb_obj)
229
- assert not called
230
- assert not called_obj
231
- service.delete_object(app_name, "/B:b")
232
- time.sleep(5)
233
- test_name = request.node.name
234
- # TODO: Note comment in StateEngine test testDataModelAPIOnDeleted
235
- if test_name.endswith("[old]"):
236
- assert called
237
- elif test_name.endswith("[new]"):
238
- assert not called
239
- assert called_obj
240
- subscription.unsubscribe()
241
- subscription_obj.unsubscribe()
242
-
243
-
244
- @pytest.mark.fluent_version(">=25.2")
245
- def test_datamodel_api_on_attribute_changed(
246
- datamodel_api_version_all, new_solver_session
247
- ):
248
- solver = new_solver_session
249
- app_name = "test"
250
- create_datamodel_root_in_server(solver, rule_str, app_name)
251
- service = solver._se_service
252
- root = create_root_using_datamodelgen(service, app_name)
253
- called = 0
254
- value = None
255
-
256
- def cb(val):
257
- nonlocal called
258
- nonlocal value
259
- value = val
260
- called += 1
261
-
262
- subscription = service.add_on_attribute_changed(app_name, "/A", "x", root.A, cb)
263
- assert called == 0
264
- assert value is None
265
- service.set_state(app_name, "/A/X", "cde")
266
- timeout_loop(lambda: called == 1, timeout=5)
267
- assert called == 1
268
- assert value == "cde"
269
- service.set_state(app_name, "/A/X", "xyz")
270
- timeout_loop(lambda: called == 2, timeout=5)
271
- assert called == 2
272
- assert value == "xyz"
273
- subscription.unsubscribe()
274
- service.set_state(app_name, "/A/X", "abc")
275
- time.sleep(5)
276
- assert called == 2
277
- assert value == "xyz"
278
-
279
-
280
- @pytest.mark.fluent_version(">=25.2")
281
- def test_datamodel_api_on_command_attribute_changed(
282
- datamodel_api_version_all, new_solver_session
283
- ):
284
- solver = new_solver_session
285
- app_name = "test"
286
- create_datamodel_root_in_server(solver, rule_str, app_name)
287
- service = solver._se_service
288
- root = create_root_using_datamodelgen(service, app_name)
289
- called = 0
290
- value = None
291
-
292
- def cb(val):
293
- nonlocal called
294
- nonlocal value
295
- value = val
296
- called += 1
297
-
298
- subscription = service.add_on_command_attribute_changed(
299
- app_name, "/", "C", "x", root.C, cb
300
- )
301
- assert called == 0
302
- assert value is None
303
- service.set_state(app_name, "/A/X", "cde")
304
- timeout_loop(lambda: called == 1, timeout=5)
305
- assert called == 1
306
- assert value == "cde"
307
- service.set_state(app_name, "/A/X", "xyz")
308
- timeout_loop(lambda: called == 2, timeout=5)
309
- assert called == 2
310
- # TODO: value is still "cde" in both old and new API
311
- # assert value == "xyz"
312
- subscription.unsubscribe()
313
- service.set_state(app_name, "/A/X", "abc")
314
- time.sleep(5)
315
- assert called == 2
316
- # Commented out because of the issue above
317
- # assert value == "xyz"
318
-
319
-
320
- @pytest.mark.fluent_version(">=25.2")
321
- def test_datamodel_api_on_command_executed(
322
- datamodel_api_version_all, new_solver_session
323
- ):
324
- solver = new_solver_session
325
- app_name = "test"
326
- create_datamodel_root_in_server(solver, rule_str, app_name)
327
- service = solver._se_service
328
- root = create_root_using_datamodelgen(service, app_name)
329
- executed = 0
330
- command = None
331
- arguments = None
332
-
333
- def cb(obj, cmd, args):
334
- nonlocal executed
335
- nonlocal command
336
- nonlocal arguments
337
- command = cmd
338
- arguments = args
339
- executed += 1
340
-
341
- # TODO: In C++ API, we don't need to pass the command name
342
- subscription = service.add_on_command_executed(app_name, "/", root, cb)
343
- assert executed == 0
344
- assert command is None
345
- assert arguments is None
346
- service.execute_command(app_name, "/", "C", dict(X="abc"))
347
- timeout_loop(lambda: executed == 1, timeout=5)
348
- assert executed == 1
349
- assert command == "C"
350
- assert arguments == {"X": "abc"}
351
- subscription.unsubscribe()
352
- service.execute_command(app_name, "/", "C", dict(X="uvw"))
353
- time.sleep(5)
354
- assert executed == 1
355
- assert command == "C"
356
- assert arguments == {"X": "abc"}
357
-
358
-
359
- @pytest.mark.fluent_version(">=25.2")
360
- def test_datamodel_api_get_state(datamodel_api_version_all, new_solver_session):
361
- solver = new_solver_session
362
- app_name = "test"
363
- create_datamodel_root_in_server(solver, rule_str, app_name)
364
- service = solver._se_service
365
- assert service.get_state(app_name, "/A/X") == "ijk"
366
-
367
-
368
- @pytest.mark.fluent_version(">=25.2")
369
- def test_datamodel_api_set_state(datamodel_api_version_all, new_solver_session):
370
- solver = new_solver_session
371
- app_name = "test"
372
- create_datamodel_root_in_server(solver, rule_str, app_name)
373
- service = solver._se_service
374
- service.set_state(app_name, "/A/X", "new_val")
375
- assert service.get_state(app_name, "/A/X") == "new_val"
376
-
377
-
378
- @pytest.mark.fluent_version(">=25.2")
379
- def test_datamodel_api_update_dict(datamodel_api_version_all, new_solver_session):
380
- solver = new_solver_session
381
- app_name = "test"
382
- create_datamodel_root_in_server(solver, rule_str, app_name)
383
- service = solver._se_service
384
- service.update_dict(app_name, "/G/H", {"X": "abc"})
385
- assert service.get_state(app_name, "/G/H") == {"X": "abc"}
386
-
387
-
388
- @pytest.mark.fluent_version(">=25.2")
389
- def test_datamodel_api_on_bad_input(
390
- datamodel_api_version_all, request, new_solver_session
391
- ):
392
- solver = new_solver_session
393
- app_name = "test"
394
- create_datamodel_root_in_server(solver, rule_str, app_name)
395
- service = solver._se_service
396
- root = create_root_using_datamodelgen(service, app_name)
397
- test_name = request.node.name
398
- new_api = test_name.endswith("[new]")
399
- with pytest.raises(SubscribeEventError):
400
- service.add_on_child_created(app_name, "", "", root, lambda _: None)
401
- with pytest.raises(RuntimeError if new_api else SubscribeEventError): # TODO: issue
402
- service.add_on_child_created(app_name, "/BB", "B", root, lambda _: None)
403
- with pytest.raises(SubscribeEventError):
404
- service.add_on_child_created(app_name, "/", "A", root, lambda _: None)
405
- with pytest.raises(SubscribeEventError):
406
- service.add_on_child_created(app_name, "/", "BB", root, lambda _: None)
407
- with pytest.raises(RuntimeError if new_api else SubscribeEventError): # TODO: issue
408
- service.add_on_changed(app_name, "/BB", root, lambda _: None)
409
- with pytest.raises(RuntimeError if new_api else SubscribeEventError): # TODO: issue
410
- service.add_on_deleted(app_name, "/BB", root, lambda: None)
411
- with pytest.raises(RuntimeError if new_api else SubscribeEventError): # TODO: issue
412
- service.add_on_affected(app_name, "/BB", root, lambda _: None)
413
- with pytest.raises(RuntimeError if new_api else SubscribeEventError): # TODO: issue
414
- service.add_on_affected_at_type_path(app_name, "/BB", "B", root, lambda: None)
415
- # TODO: not raised in the old API - issue
416
- if new_api:
417
- with pytest.raises(SubscribeEventError):
418
- service.add_on_affected_at_type_path(
419
- app_name, "/", "BB", root, lambda: None
420
- )
421
- with pytest.raises(RuntimeError if new_api else SubscribeEventError): # TODO: issue
422
- service.add_on_attribute_changed(
423
- app_name, "/BB", "isActive", root, lambda _: None
424
- )
425
- with pytest.raises(SubscribeEventError):
426
- service.add_on_attribute_changed(app_name, "/A", "", root, lambda _: None)
427
- with pytest.raises(RuntimeError if new_api else SubscribeEventError): # TODO: issue
428
- service.add_on_command_attribute_changed(
429
- app_name, "/BB", "C", "isActive", root, lambda _: None
430
- )
431
- with pytest.raises(SubscribeEventError):
432
- service.add_on_command_attribute_changed(
433
- app_name, "/A", "CC", "", root, lambda _: None
434
- )
435
- with pytest.raises(SubscribeEventError):
436
- service.add_on_command_attribute_changed(
437
- app_name, "/", "CC", "isActive", root, lambda _: None
438
- )
439
- with pytest.raises(RuntimeError if new_api else SubscribeEventError): # TODO: issue
440
- service.add_on_command_executed(app_name, "/BB", root, lambda _: None)
441
-
442
-
443
- @pytest.mark.fluent_version(">=25.2")
444
- def test_datamodel_api_static_info(datamodel_api_version_all, new_solver_session):
445
- solver = new_solver_session
446
- app_name = "test"
447
- create_datamodel_root_in_server(solver, rule_str, app_name)
448
- service = solver._se_service
449
- assert service.get_static_info(app_name)