ansys-saf-testing 0.11.dev0__tar.gz → 0.11.dev2__tar.gz

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.
Files changed (116) hide show
  1. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/PKG-INFO +3 -7
  2. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/pyproject.toml +8 -19
  3. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/_hps/hps_client.py +3 -8
  4. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/_pim/process/pim_process.py +1 -5
  5. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/_solution/solution.py +28 -40
  6. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/hps/__init__.py +1 -1
  7. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/solution/__init__.py +2 -0
  8. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/AUTHORS +0 -0
  9. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/LICENSE +0 -0
  10. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/README.rst +0 -0
  11. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/__init__.py +0 -0
  12. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/_common/__init__.py +0 -0
  13. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/_common/common.py +0 -0
  14. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/_common/directories.py +0 -0
  15. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/_common/grpc_certificates.py +0 -0
  16. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/_common/network.py +0 -0
  17. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/_common/py.typed +0 -0
  18. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/_database/__init__.py +0 -0
  19. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/_database/postgresql.py +0 -0
  20. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/_database/psql_container_manager.py +0 -0
  21. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/_database/py.typed +0 -0
  22. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/_database/sqlite.py +0 -0
  23. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/_docker/__init__.py +0 -0
  24. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/_docker/docker.py +0 -0
  25. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/_docker/py.typed +0 -0
  26. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/_frontend/__init__.py +0 -0
  27. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/_frontend/py.typed +0 -0
  28. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/_frontend/selenium.py +0 -0
  29. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/_hps/__init__.py +0 -0
  30. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/_hps/hps.py +0 -0
  31. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/_hps/process/__init__.py +0 -0
  32. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/_hps/process/hps_deployment_process.py +0 -0
  33. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/_hps/process/hps_scaler_process.py +0 -0
  34. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/_hps/process/py.typed +0 -0
  35. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/_hps/py.typed +0 -0
  36. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/_hps/scripts/__init__.py +0 -0
  37. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/_hps/scripts/hps_installer.py +0 -0
  38. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/_hps/scripts/keycloak/.env +0 -0
  39. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/_hps/scripts/keycloak/Dockerfile +0 -0
  40. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/_hps/scripts/keycloak/job-action-token-1.2.0.jar +0 -0
  41. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/_hps/scripts/keycloak/service.yaml +0 -0
  42. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/_hps/scripts/launch_hps_stack.py +0 -0
  43. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/_hps/scripts/py.typed +0 -0
  44. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/_pim/__init__.py +0 -0
  45. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/_pim/pim.py +0 -0
  46. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/_pim/process/__init__.py +0 -0
  47. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/_pim/process/py.typed +0 -0
  48. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/_pim/py.typed +0 -0
  49. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/_pim/scripts/__init__.py +0 -0
  50. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/_pim/scripts/launch_pim.py +0 -0
  51. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/_pim/scripts/py.typed +0 -0
  52. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/_pytest/__init__.py +0 -0
  53. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/_pytest/docstring_with_test_case.py +0 -0
  54. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/_pytest/mocking.py +0 -0
  55. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/_pytest/platform_specific.py +0 -0
  56. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/_pytest/py.typed +0 -0
  57. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/_pytest/pytest.py +0 -0
  58. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/_solution/__init__.py +0 -0
  59. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/_solution/common.py +0 -0
  60. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/_solution/const.py +0 -0
  61. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/_solution/end_to_end/__init__.py +0 -0
  62. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/_solution/end_to_end/container/Dockerfile +0 -0
  63. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/_solution/end_to_end/container/docker-compose.yaml +0 -0
  64. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/_solution/end_to_end/glow_client.py +0 -0
  65. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/_solution/end_to_end/glow_execution_configurations.py +0 -0
  66. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/_solution/end_to_end/glow_process.py +0 -0
  67. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/_solution/end_to_end/glow_server.py +0 -0
  68. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/_solution/end_to_end/log_manager.py +0 -0
  69. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/_solution/end_to_end/project_context.py +0 -0
  70. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/_solution/end_to_end/py.typed +0 -0
  71. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/_solution/py.typed +0 -0
  72. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/_system/__init__.py +0 -0
  73. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/_system/process.py +0 -0
  74. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/_system/py.typed +0 -0
  75. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/common/__init__.py +0 -0
  76. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/common/py.typed +0 -0
  77. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/database/__init__.py +0 -0
  78. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/database/py.typed +0 -0
  79. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/directories/__init__.py +0 -0
  80. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/directories/py.typed +0 -0
  81. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/docker/__init__.py +0 -0
  82. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/docker/py.typed +0 -0
  83. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/docstring_with_test_case/__init__.py +0 -0
  84. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/docstring_with_test_case/py.typed +0 -0
  85. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/hps/process/__init__.py +0 -0
  86. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/hps/process/py.typed +0 -0
  87. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/hps/py.typed +0 -0
  88. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/hps/scripts/__init__.py +0 -0
  89. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/hps/scripts/hps_installer.py +0 -0
  90. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/hps/scripts/launch_hps_stack.py +0 -0
  91. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/hps/scripts/py.typed +0 -0
  92. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/mocking/__init__.py +0 -0
  93. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/mocking/py.typed +0 -0
  94. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/network/__init__.py +0 -0
  95. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/network/py.typed +0 -0
  96. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/pim/__init__.py +0 -0
  97. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/pim/process/__init__.py +0 -0
  98. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/pim/process/py.typed +0 -0
  99. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/pim/py.typed +0 -0
  100. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/pim/scripts/__init__.py +0 -0
  101. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/pim/scripts/launch_pim.py +0 -0
  102. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/pim/scripts/py.typed +0 -0
  103. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/platform_specific/__init__.py +0 -0
  104. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/platform_specific/py.typed +0 -0
  105. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/process/__init__.py +0 -0
  106. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/process/py.typed +0 -0
  107. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/py.typed +0 -0
  108. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/pytest/__init__.py +0 -0
  109. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/pytest/py.typed +0 -0
  110. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/selenium/__init__.py +0 -0
  111. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/selenium/py.typed +0 -0
  112. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/solution/const/__init__.py +0 -0
  113. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/solution/const/py.typed +0 -0
  114. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/solution/end_to_end/__init__.py +0 -0
  115. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/solution/end_to_end/py.typed +0 -0
  116. {ansys_saf_testing-0.11.dev0 → ansys_saf_testing-0.11.dev2}/src/ansys/saf/testing/solution/py.typed +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ansys-saf-testing
3
- Version: 0.11.dev0
3
+ Version: 0.11.dev2
4
4
  Summary: Collection of test utilities for the Solution Application Framework.
5
5
  License: Apache-2.0
6
6
  License-File: AUTHORS
@@ -28,24 +28,20 @@ Provides-Extra: pim
28
28
  Provides-Extra: selenium
29
29
  Provides-Extra: solution
30
30
  Requires-Dist: ansys-hps-client (>=0.12,<1.0) ; extra == "hps" or extra == "all"
31
- Requires-Dist: ansys-saf-glow-engine[dash] (>=1.41.dev1,<2.0) ; extra == "solution" or extra == "all"
31
+ Requires-Dist: ansys-saf-glow-engine[dash] (>=2.0.dev1,<3.0) ; extra == "solution" or extra == "all"
32
32
  Requires-Dist: ansys-saf-product-configuration (>=0.20.dev0,<1.0) ; extra == "hps" or extra == "pim" or extra == "all"
33
33
  Requires-Dist: click (>=8.1.7,<9.0.0)
34
- Requires-Dist: cryptography (>=46.0.0,<47.0.0)
35
- Requires-Dist: dash (>=2.18.2,<3.4.0) ; extra == "solution" or extra == "all"
34
+ Requires-Dist: cryptography (>=49.0.0,<50.0.0)
36
35
  Requires-Dist: docker (>=7.1.0,<8.0.0) ; extra == "hps" or extra == "docker" or extra == "all"
37
- Requires-Dist: fastapi (>=0.115.2,<1.0) ; extra == "solution" or extra == "all"
38
36
  Requires-Dist: grpcio (>=1.47.0,<2.0.0) ; extra == "pim" or extra == "all"
39
37
  Requires-Dist: grpcio-health-checking (>=1.24.0,<2.0.0) ; extra == "pim" or extra == "all"
40
38
  Requires-Dist: httpx (>=0,<1)
41
- Requires-Dist: marshmallow (>=3.20.2,<4.0.0) ; extra == "hps" or extra == "all"
42
39
  Requires-Dist: psutil (>=6.0,<7.0)
43
40
  Requires-Dist: pydantic (>=2.7,<3.0)
44
41
  Requires-Dist: pytest (>=9.0.3,<10.0.0)
45
42
  Requires-Dist: pytest-mock (>=3.14.1,<4.0.0)
46
43
  Requires-Dist: pyyaml (>=6.0.0,<7.0.0)
47
44
  Requires-Dist: selenium (>=4.0,<5.0) ; extra == "selenium" or extra == "all"
48
- Requires-Dist: starlette (>=0.49.1,<0.50.0) ; extra == "solution" or extra == "all"
49
45
  Requires-Dist: tenacity (>=8.2.3,<9.0.0)
50
46
  Requires-Dist: typing-extensions (>=4.14.0,<5.0.0)
51
47
  Description-Content-Type: text/x-rst
@@ -7,7 +7,7 @@ build-system-version = "2.3.2"
7
7
 
8
8
  [tool.poetry]
9
9
  name = "ansys-saf-testing"
10
- version = "0.11.dev0"
10
+ version = "0.11.dev2"
11
11
  description = "Collection of test utilities for the Solution Application Framework."
12
12
  license = "Apache-2.0"
13
13
  authors = [ "ANSYS, Inc. <pyansys.core@ansys.com>" ]
@@ -38,7 +38,7 @@ priority = "primary"
38
38
  [tool.poetry.dependencies]
39
39
  python = ">=3.10,<4"
40
40
  click = "^8.1.7"
41
- cryptography = "^46.0.0"
41
+ cryptography = "^49.0.0"
42
42
  httpx = "^0"
43
43
  psutil = "^6.0"
44
44
  pydantic = "^2.7"
@@ -48,12 +48,8 @@ pyyaml = "^6.0.0"
48
48
  tenacity = "^8.2.3" # has to be <9.0.0 to be compatible with ansys-conceptev-core 0.9.4
49
49
  typing-extensions = "^4.14.0"
50
50
  selenium = { version = "^4.0", optional = true } # for testing web frontends
51
- ansys-saf-glow-engine = { version = "^1.41.dev1", allow-prereleases = true, optional = true, extras=["dash"] } # for testing Solution API
52
- dash = { version = ">=2.18.2, <3.4.0", optional = true} # for testing Dash callbacks. min version due to support for ctx.headers. max version due to incompatibility with dash-extensions < 2.0.5.
53
- fastapi = { version = ">=0.115.2, <1.0", optional = true } # for testing solutions
54
- starlette = { version = "^0.49.1", optional = true } # for testing solutions
51
+ ansys-saf-glow-engine = { version = "^2.0.dev1", allow-prereleases = true, optional = true, extras=["dash"] } # for testing Solution API and Dash-based UI
55
52
  docker = { version ="^7.1.0", optional = true }
56
- marshmallow = { version = "^3.20.2", optional = true } # for HPS
57
53
  ansys-hps-client = { version = ">=0.12, <1.0", optional = true }
58
54
  ansys-saf-product-configuration = { version = ">=0.20.dev0, <1.0", allow-prereleases = true, optional = true } # for HPS and PIM Light Server
59
55
  grpcio = { version = "^1.47.0", optional = true } # for PIM Light Server
@@ -62,19 +58,15 @@ grpcio-health-checking = { version = "^1.24.0", optional = true } # for PIM Lig
62
58
 
63
59
  [tool.poetry.extras]
64
60
  selenium = ["selenium"]
65
- solution = ["ansys-saf-glow-engine", "dash", "fastapi", "starlette"]
66
- hps = ["ansys-hps-client", "marshmallow", "ansys-saf-product-configuration", "docker"]
61
+ solution = ["ansys-saf-glow-engine"]
62
+ hps = ["ansys-hps-client", "ansys-saf-product-configuration", "docker"]
67
63
  docker = ["docker"]
68
64
  pim = ["grpcio", "grpcio-health-checking", "ansys-saf-product-configuration"]
69
65
  # didn't find a way to dynamically include previous groups, so we need to copy all dependencies
70
66
  all = [
71
67
  "selenium",
72
68
  "ansys-saf-glow-engine",
73
- "dash",
74
- "fastapi",
75
- "starlette",
76
69
  "ansys-hps-client",
77
- "marshmallow",
78
70
  "ansys-saf-product-configuration",
79
71
  "docker",
80
72
  "grpcio",
@@ -92,15 +84,12 @@ ruff-lsp = "^0.0"
92
84
  pre-commit = "^4.2.0"
93
85
 
94
86
  [tool.poetry.group.tests.dependencies]
95
- dash = { version = ">=2.18.2, <3.4.0", extras = ["diskcache"]} # diskcache needed for background callbacks
96
- pytest-cov = "^6.1.1"
87
+ dash = { version = "^3.0.0, <3.4.0", extras = ["diskcache"]} # diskcache needed for background callbacks
88
+ pytest-cov = "^7.0.0"
97
89
  pytest-html = "^4.1.1"
98
90
  pytest-md = "^0.2.0"
99
91
  pytest-rerunfailures = "^16.1.0"
100
- pyaedt = { version = "^1.0.0" } # for testing product instances
101
- rpyc = { version = "^6.0" } # for using AEDT instance manager. missing subdependency in pyaedt 0.22.2. We could use [all] but that would install a lot more stuff. Hopefully, in the future, they will create a new optional group that includes it.
102
- ansys-mechanical-core = { version = ">=0.12.9, <1.0", python = ">=3.10, <3.15" } # for testing product instances
103
- ansys-platform-instancemanagement = { version = "^1.0.2" } # for testing product instances
92
+ ansys-saf-glow-engine = { version = "^2.0.dev1", allow-prereleases = true, optional = true, extras=["pim"] } # for testing product instances
104
93
 
105
94
  [tool.poetry.group.doc]
106
95
  optional = true
@@ -15,17 +15,12 @@
15
15
 
16
16
  from collections.abc import Callable
17
17
  from typing import Protocol
18
- import warnings
19
18
 
20
- import marshmallow.warnings
19
+ from ansys.hps.client import Client # pyright: ignore[reportMissingTypeStubs]
20
+ from ansys.hps.client.jms import JmsApi, ProjectApi # pyright: ignore[reportMissingTypeStubs]
21
+ from ansys.hps.client.rms import RmsApi # pyright: ignore[reportMissingTypeStubs]
21
22
  import pytest
22
23
 
23
- with warnings.catch_warnings():
24
- warnings.simplefilter("ignore", category=marshmallow.warnings.RemovedInMarshmallow4Warning)
25
- from ansys.hps.client import Client # type: ignore
26
- from ansys.hps.client.jms import JmsApi, ProjectApi # type: ignore
27
- from ansys.hps.client.rms import RmsApi # type: ignore
28
-
29
24
 
30
25
  class GetHpsJobIdsType(Protocol):
31
26
  """Interface for a function that retrieves HPS job IDs based on job name, status, and previous job IDs."""
@@ -22,7 +22,6 @@ from tempfile import mkdtemp
22
22
  from time import sleep
23
23
  import typing
24
24
  from unittest.mock import patch
25
- import warnings
26
25
 
27
26
  import psutil
28
27
 
@@ -154,10 +153,7 @@ class PimProcess(Process):
154
153
 
155
154
  instance_config_mgr = ProductInstanceConfigurationsManager()
156
155
  if self._product_configs_dir and self._product_configs_dir.is_dir():
157
- with warnings.catch_warnings():
158
- warnings.simplefilter("ignore", DeprecationWarning) # dir may contain deprecated product configs
159
- print(f"Loading custom product configurations from dir {self._product_configs_dir}.")
160
- instance_config_mgr.load_configurations(self._product_configs_dir)
156
+ instance_config_mgr.load_configurations(self._product_configs_dir)
161
157
  self._definitions_dir = Path(mkdtemp())
162
158
  configurations_dir = self._definitions_dir / "Configurations"
163
159
  configurations_dir.mkdir()
@@ -26,11 +26,9 @@ from ansys.saf.glow._config.settings import Settings
26
26
  from ansys.saf.glow._core.client_exceptions import raise_for_graphql_status
27
27
  from ansys.saf.glow._server.dependencies import get_graphql_client, get_http_client, get_settings
28
28
  from ansys.saf.glow._server.server import create_app
29
- from ansys.saf.glow.client import Client, DashClient, callback
29
+ from ansys.saf.glow.client import Client, callback
30
30
  from ansys.saf.glow.solution import Solution
31
31
  from ansys.saf.glow.solution.beta import ProductInstanceManager
32
- from dash._callback_context import context_value # pyright: ignore[reportUnknownVariableType, reportMissingTypeStubs]
33
- from dash._utils import AttributeDict # pyright: ignore[reportMissingTypeStubs]
34
32
  from fastapi.testclient import TestClient
35
33
  from httpx import Response
36
34
  import pytest
@@ -42,9 +40,6 @@ T = TypeVar("T", bound=Solution)
42
40
  is_within_dash_callback_context = contextvars.ContextVar("dash_callback_context", default=False)
43
41
  original_callback_call = callback.__call__
44
42
 
45
- is_within_dashclient_initialize_context = contextvars.ContextVar("dashclient_initialize_context", default=False)
46
- original_dashclient_initialize = DashClient.initialize
47
-
48
43
 
49
44
  class NotVersionArgFoundError(Exception): ...
50
45
 
@@ -52,17 +47,6 @@ class NotVersionArgFoundError(Exception): ...
52
47
  class NotServiceNameAttrFoundError(Exception): ...
53
48
 
54
49
 
55
- def patched_initialize(*args: Any, **kwargs: Any) -> None:
56
- token = is_within_dashclient_initialize_context.set(True)
57
- try:
58
- original_dashclient_initialize(*args, **kwargs)
59
- finally:
60
- is_within_dashclient_initialize_context.reset(token)
61
-
62
-
63
- DashClient.initialize = patched_initialize
64
-
65
-
66
50
  def patched_call(*args: Any, **kwargs: Any) -> Callable[..., Any]:
67
51
  decorated = original_callback_call(*args, **kwargs)
68
52
 
@@ -160,13 +144,19 @@ def _api_testclient(_solution_settings: Settings) -> Iterator[TestClient]: # py
160
144
  yield client
161
145
 
162
146
 
147
+ @pytest.fixture(scope="session")
148
+ def _created_method_clients() -> list[TestClient]: # pyright: ignore[reportUnusedFunction]
149
+ return []
150
+
151
+
163
152
  @pytest.fixture(scope="session")
164
153
  def _method_client_factory( # pyright: ignore[reportUnusedFunction]
165
154
  _solution_settings: Settings,
155
+ _created_method_clients: list[TestClient],
166
156
  ) -> Callable[[], TestClient]:
167
157
  def create_method_client() -> TestClient:
168
158
  client = TestClient(create_app(_solution_settings))
169
- client.headers = {"shared-volume": "true"}
159
+ _created_method_clients.append(client)
170
160
  return client
171
161
 
172
162
  return create_method_client
@@ -178,7 +168,7 @@ def _validate_product_manager_class(product_manager_class: type[ProductInstanceM
178
168
  internal_product_manager = product_manager_class._instance_manager_impl_type # type: ignore
179
169
 
180
170
  initialize_signature = inspect.signature(internal_product_manager.initialize) # type: ignore
181
- if "version" not in initialize_signature.parameters and "osl_version" not in initialize_signature.parameters:
171
+ if "version" not in initialize_signature.parameters:
182
172
  raise NotVersionArgFoundError("The 'version' argument is required in the product manager's initialize method.")
183
173
 
184
174
  service_name = getattr(internal_product_manager, "SERVICE_NAME", None)
@@ -192,7 +182,7 @@ def mock_product_instance(mocker: pytest_mock.MockerFixture, request: pytest.Fix
192
182
  raise ValueError("The 'mock_product_instance' fixture requires being parametrized.")
193
183
 
194
184
  def patched_initialize(self: Any, *args: Any, **kwargs: Any) -> None:
195
- self.initialize_service(self.SERVICE_NAME, kwargs.get("version") or kwargs.get("osl_version"))
185
+ self.initialize_service(self.SERVICE_NAME, kwargs.get("version"))
196
186
  self.recovery_state_info = self.recovery_state_info_type()
197
187
 
198
188
  for product_manager_class, product_client_class in request.param.items():
@@ -252,13 +242,20 @@ def _solution_api_client( # pyright: ignore[reportUnusedFunction]
252
242
  return _api_testclient
253
243
 
254
244
 
245
+ @pytest.fixture(scope="session")
246
+ def _created_dash_callback_clients() -> list[TestClient]: # pyright: ignore[reportUnusedFunction]
247
+ return []
248
+
249
+
255
250
  @pytest.fixture(scope="session")
256
251
  def _dash_callback_client_factory( # pyright: ignore[reportUnusedFunction]
257
252
  _solution_settings: Settings,
258
253
  _method_client_factory: Callable[[], TestClient],
254
+ _created_dash_callback_clients: list[TestClient],
259
255
  ) -> Callable[[], TestClient]:
260
256
  def create_callback_client() -> TestClient:
261
257
  client = TestClient(create_app(_solution_settings))
258
+ _created_dash_callback_clients.append(client)
262
259
  _apply_dependency_overrides(
263
260
  app=client.app,
264
261
  _solution_settings=_solution_settings,
@@ -270,13 +267,12 @@ def _dash_callback_client_factory( # pyright: ignore[reportUnusedFunction]
270
267
  return create_callback_client
271
268
 
272
269
 
273
- @pytest.fixture(scope="session")
270
+ @pytest.fixture
274
271
  def dash_http_client(
275
272
  _solution_settings: Settings,
276
273
  _method_client_factory: Callable[[], TestClient],
277
274
  ) -> Iterator[TestClient]:
278
275
  with TestClient(create_app(_solution_settings)) as client:
279
- client.event_hooks["request"] = DashClient._add_auth_from_headers # type: ignore
280
276
  _apply_dependency_overrides(
281
277
  app=client.app,
282
278
  _solution_settings=_solution_settings,
@@ -288,7 +284,6 @@ def dash_http_client(
288
284
  @pytest.fixture(scope="session")
289
285
  def _mock_glow_client_internal_clients( # pyright: ignore[reportUnusedFunction]
290
286
  _solution_api_client: TestClient,
291
- dash_http_client: TestClient,
292
287
  _dash_callback_client_factory: Callable[[], TestClient],
293
288
  session_mocker: pytest_mock.MockerFixture,
294
289
  ) -> None:
@@ -302,23 +297,9 @@ def _mock_glow_client_internal_clients( # pyright: ignore[reportUnusedFunction]
302
297
  # affects all Client instances in different contexts. In here we know in which
303
298
  # context is the Client being initialized, so we can use the right TestClient.
304
299
  is_from_dash_callback = is_within_dash_callback_context.get()
305
- is_from_dashclient_initialize = is_within_dashclient_initialize_context.get()
306
300
 
307
301
  client = None
308
- if is_from_dash_callback:
309
- client = _dash_callback_client_factory()
310
- elif is_from_dashclient_initialize:
311
- client = dash_http_client
312
- # On dashclient.py::_auth_header_from_ctx we access ctx.headers.
313
- # In a real scenario, that attribute dict is set automatically by Dash
314
- # to include the request headers, but not in this testing scenario.
315
- context_value.set( # pyright: ignore[reportUnknownMemberType]
316
- AttributeDict(
317
- {"headers": {}},
318
- ),
319
- )
320
- else:
321
- client = _solution_api_client
302
+ client = _dash_callback_client_factory() if is_from_dash_callback else _solution_api_client
322
303
 
323
304
  object.__setattr__(self, "_http_client", client)
324
305
  object.__setattr__(self, "_graphql_client", GraphQLClientMock(client=client))
@@ -331,13 +312,13 @@ def init_dashclient(
331
312
  monkeysession: pytest.MonkeyPatch,
332
313
  _solution_settings: Settings,
333
314
  _mock_glow_client_internal_clients: None,
315
+ session_mocker: pytest_mock.MockerFixture,
334
316
  ):
335
317
  monkeysession.setenv("GLOW_SOLUTION_DEFINITION", _solution_settings.glow_solution_definition)
336
318
  monkeysession.setenv("GLOW_API_URL", "http://testserver")
337
319
  monkeysession.setenv("GLOW_EXTERNAL_API_URL", "http://testserver")
338
320
  monkeysession.setenv("GLOW_WS_EVENTS_ADDR", "ws://testserver")
339
-
340
- DashClient.initialize()
321
+ session_mocker.patch("ansys.saf.glow._client.dashclient.DashClient._auth_header_from_ctx", return_value=None)
341
322
 
342
323
 
343
324
  @pytest.fixture(scope="session")
@@ -386,16 +367,23 @@ def solution_logs(tmp_path: Path, request: pytest.FixtureRequest) -> Iterator[Pa
386
367
 
387
368
  temp_log_path = tmp_path / "solution.log"
388
369
 
370
+ # To capture logs from solutions, which can be be in any namespace
371
+ root_logger = logging.getLogger()
372
+ # To capture logs from GLOW. By default, it configures two different loggers and logs from ansys
373
+ # are not propagated to root logger.
389
374
  ansys_logger = logging.getLogger("ansys")
375
+ root_logger.setLevel(logging_level)
390
376
  ansys_logger.setLevel(logging_level)
391
377
  file_handler = logging.FileHandler(temp_log_path)
392
378
  file_handler.setLevel(logging_level)
393
379
  formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(name)s - %(message)s")
394
380
  file_handler.setFormatter(formatter)
381
+ root_logger.addHandler(file_handler)
395
382
  ansys_logger.addHandler(file_handler)
396
383
 
397
384
  yield temp_log_path
398
385
 
386
+ root_logger.removeHandler(file_handler)
399
387
  ansys_logger.removeHandler(file_handler)
400
388
 
401
389
 
@@ -44,7 +44,7 @@ __all__ = [
44
44
  "restore_default_hps_deployment",
45
45
  ]
46
46
 
47
- if has_modules_installed(["ansys.hps.client", "marshmallow"]):
47
+ if has_modules_installed(["ansys.hps.client"]):
48
48
  from ansys.saf.testing._hps.hps_client import (
49
49
  GetHpsJobIdsType,
50
50
  get_available_application_on_hps,
@@ -22,6 +22,8 @@ if has_modules_installed(["dash", "ansys.saf.glow"]):
22
22
  from ansys.saf.testing._solution.solution import (
23
23
  # Import private fixtures so that pytest can discover them
24
24
  _api_testclient, # type: ignore # noqa: F401
25
+ _created_dash_callback_clients, # type: ignore # noqa: F401
26
+ _created_method_clients, # type: ignore # noqa: F401
25
27
  _dash_callback_client_factory, # type: ignore # noqa: F401
26
28
  _glow_client, # type: ignore # noqa: F401
27
29
  _method_client_factory, # type: ignore # noqa: F401