ansys-saf-cli 4.1.dev0__tar.gz → 4.3.0__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 (151) hide show
  1. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/PKG-INFO +5 -7
  2. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/pyproject.toml +19 -25
  3. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/solution/cookiecutter.json +1 -1
  4. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/.devcontainer/devcontainer.json +2 -2
  5. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/.github/workflows/build-release.yml +1 -13
  6. ansys_saf_cli-4.3.0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/.github/workflows/label.yml +89 -0
  7. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/.pre-commit-config.yaml +9 -16
  8. ansys_saf_cli-4.3.0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/AGENTS.md +165 -0
  9. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/README.md +1 -1
  10. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/deployments/Dockerfile +0 -2
  11. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/deployments/distributed-deployment-template/.env +31 -17
  12. ansys_saf_cli-4.3.0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/deployments/distributed-deployment-template/compose.yaml +112 -0
  13. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/deployments/standalone/.env +2 -0
  14. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/deployments/standalone/compose.yaml +26 -19
  15. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/deployments/standalone-with-hps/.env +2 -0
  16. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/deployments/standalone-with-hps/compose.yaml +44 -33
  17. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/doc/.vale.ini +0 -3
  18. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/doc/make.bat +16 -0
  19. ansys_saf_cli-4.3.0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/doc/source/_static/css/custom.css +25 -0
  20. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/doc/source/conf.py +16 -9
  21. ansys_saf_cli-4.3.0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/doc/source/index.rst +3 -0
  22. {ansys_saf_cli-4.1.dev0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/lock_files/no_ui → ansys_saf_cli-4.3.0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/lock_files/dash}/poetry.lock +1026 -1369
  23. {ansys_saf_cli-4.1.dev0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/lock_files/dash → ansys_saf_cli-4.3.0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/lock_files/no_ui}/poetry.lock +692 -2108
  24. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/pyproject.toml +8 -17
  25. ansys_saf_cli-4.3.0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/__init__.py +17 -0
  26. ansys_saf_cli-4.3.0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/main.py +33 -0
  27. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/solution/definition.py +15 -1
  28. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/solution/first_step.py +15 -1
  29. ansys_saf_cli-4.3.0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/solution/second_step.py +26 -0
  30. ansys_saf_cli-4.3.0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/ui/app.py +38 -0
  31. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/ui/assets/css/all.css +17 -4
  32. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/ui/assets/css/bootstrap.min.css +19 -1
  33. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/ui/assets/css/style.css +17 -2
  34. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/ui/pages/about_page.py +15 -1
  35. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/ui/pages/first_page.py +15 -1
  36. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/ui/pages/page.py +21 -4
  37. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/ui/pages/second_page.py +15 -1
  38. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/tests/conftest.py +15 -3
  39. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/tests/unit/test_solution_api.py +15 -1
  40. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/tests/unit/test_solution_ui.py +15 -1
  41. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_utilities/backup.py +2 -1
  42. ansys_saf_cli-4.1.dev0/AUTHORS +0 -12
  43. ansys_saf_cli-4.1.dev0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/.github/workflows/label.yml +0 -89
  44. ansys_saf_cli-4.1.dev0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/.release-please-manifest.json +0 -3
  45. ansys_saf_cli-4.1.dev0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/.reuse/templates/copyright.jinja2 +0 -1
  46. ansys_saf_cli-4.1.dev0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/AUTHORS +0 -12
  47. ansys_saf_cli-4.1.dev0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/CODEOWNERS +0 -3
  48. ansys_saf_cli-4.1.dev0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/CODE_OF_CONDUCT.md +0 -65
  49. ansys_saf_cli-4.1.dev0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/CONTRIBUTING.md +0 -2
  50. ansys_saf_cli-4.1.dev0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/CONTRIBUTORS.md +0 -9
  51. ansys_saf_cli-4.1.dev0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/LICENSE.rst +0 -41
  52. ansys_saf_cli-4.1.dev0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/deployments/distributed-deployment-template/compose.yaml +0 -132
  53. ansys_saf_cli-4.1.dev0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/deployments/standalone-with-minerva/.env +0 -25
  54. ansys_saf_cli-4.1.dev0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/deployments/standalone-with-minerva/compose.yaml +0 -122
  55. ansys_saf_cli-4.1.dev0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/doc/changelog.d/changelog_template.jinja +0 -17
  56. ansys_saf_cli-4.1.dev0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/doc/source/_static/css/custom.css +0 -8
  57. ansys_saf_cli-4.1.dev0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/doc/source/_static/images/repository-banner.png +0 -0
  58. ansys_saf_cli-4.1.dev0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/doc/source/_templates/README.md +0 -1
  59. ansys_saf_cli-4.1.dev0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/doc/source/changelog.rst +0 -12
  60. ansys_saf_cli-4.1.dev0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/doc/source/examples.rst +0 -8
  61. ansys_saf_cli-4.1.dev0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/doc/source/getting_started/desktop_installation.rst +0 -165
  62. ansys_saf_cli-4.1.dev0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/doc/source/getting_started/docker_installation.rst +0 -68
  63. ansys_saf_cli-4.1.dev0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/doc/source/index.rst +0 -51
  64. ansys_saf_cli-4.1.dev0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/doc/source/user_guide/index.rst +0 -6
  65. ansys_saf_cli-4.1.dev0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/doc/styles/config/vocabularies/ANSYS/accept.txt +0 -5
  66. ansys_saf_cli-4.1.dev0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/doc/styles/config/vocabularies/ANSYS/reject.txt +0 -0
  67. ansys_saf_cli-4.1.dev0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/examples/README.md +0 -1
  68. ansys_saf_cli-4.1.dev0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/minerva/cli/README.md +0 -3
  69. ansys_saf_cli-4.1.dev0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/minerva/oauth/App_Data/Certificates/README.md +0 -3
  70. ansys_saf_cli-4.1.dev0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/minerva/oauth/oauth.config +0 -9
  71. ansys_saf_cli-4.1.dev0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/release-please-config.json +0 -9
  72. ansys_saf_cli-4.1.dev0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/sonar-project.properties +0 -12
  73. ansys_saf_cli-4.1.dev0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/__init__.py +0 -3
  74. ansys_saf_cli-4.1.dev0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/main.py +0 -19
  75. ansys_saf_cli-4.1.dev0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/solution/second_step.py +0 -12
  76. ansys_saf_cli-4.1.dev0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/ui/app.py +0 -30
  77. ansys_saf_cli-4.1.dev0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/ui/components/README.md +0 -1
  78. ansys_saf_cli-4.1.dev0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/tests/common_test_files/README.md +0 -1
  79. ansys_saf_cli-4.1.dev0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/tox.ini +0 -56
  80. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/LICENSE +0 -0
  81. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/README.rst +0 -0
  82. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/__init__.py +0 -0
  83. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_cli/__init__.py +0 -0
  84. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_cli/main.py +0 -0
  85. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_cli/py.typed +0 -0
  86. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_config/__init__.py +0 -0
  87. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_config/const.py +0 -0
  88. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_config/py.typed +0 -0
  89. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_database/__init__.py +0 -0
  90. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_database/manager.py +0 -0
  91. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_database/models.py +0 -0
  92. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_database/py.typed +0 -0
  93. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/__init__.py +0 -0
  94. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/add_step.py +0 -0
  95. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/dependencies.py +0 -0
  96. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/environment.py +0 -0
  97. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/plugins.py +0 -0
  98. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/py.typed +0 -0
  99. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/scaffolding.py +0 -0
  100. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/__init__.py +0 -0
  101. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/py.typed +0 -0
  102. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/solution/hooks/post_gen_project.py +0 -0
  103. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/.codespell.ignore +0 -0
  104. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/.env +0 -0
  105. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/.flake8 +0 -0
  106. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/.github/labeler.yml +0 -0
  107. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/.github/labels.yml +0 -0
  108. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/.gitignore +0 -0
  109. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/.vscode/extensions.json +0 -0
  110. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/.vscode/launch.json +0 -0
  111. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/CHANGELOG.md +0 -0
  112. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/deployments/README.md +0 -0
  113. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/doc/Makefile +0 -0
  114. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/portal_assets/application.svg +0 -0
  115. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/portal_assets/description.json +0 -0
  116. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/portal_assets/project.svg +0 -0
  117. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/solution/method_assets/README.md +0 -0
  118. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/solution/scripts/README.md +0 -0
  119. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/solution/scripts/assets/README.md +0 -0
  120. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/ui/assets/icons/dark/carbon--ibm-engineering-workflow-mgmt.svg +0 -0
  121. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/ui/assets/icons/dark/carbon--return.svg +0 -0
  122. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/ui/assets/icons/dark/game-icons--crossed-air-flows.svg +0 -0
  123. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/ui/assets/icons/dark/material-symbols--home.svg +0 -0
  124. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/ui/assets/icons/dark/radix-icons--moon.svg +0 -0
  125. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/ui/assets/icons/dark/radix-icons--sun.svg +0 -0
  126. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/ui/assets/icons/dark/streamline--startup-solid.svg +0 -0
  127. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/ui/assets/icons/dark/teenyicons--doc-solid.svg +0 -0
  128. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/ui/assets/icons/light/carbon--ibm-engineering-workflow-mgmt.svg +0 -0
  129. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/ui/assets/icons/light/carbon--return.svg +0 -0
  130. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/ui/assets/icons/light/game-icons--crossed-air-flows.svg +0 -0
  131. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/ui/assets/icons/light/material-symbols--home.svg +0 -0
  132. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/ui/assets/icons/light/radix-icons--moon.svg +0 -0
  133. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/ui/assets/icons/light/radix-icons--sun.svg +0 -0
  134. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/ui/assets/icons/light/streamline--startup-solid.svg +0 -0
  135. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/ui/assets/icons/light/teenyicons--doc-solid.svg +0 -0
  136. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/ui/assets/images/README.md +0 -0
  137. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/ui/assets/images/workflow-placeholder.png +0 -0
  138. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/ui/assets/installer/README.md +0 -0
  139. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/ui/assets/logos/dark/placeholder_logo.png +0 -0
  140. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/ui/assets/logos/light/placeholder_logo.png +0 -0
  141. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/ui/assets/orchestrator/README.md +0 -0
  142. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/ui/assets/pywebview/README.md +0 -0
  143. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/ui/assets/scripts/README.md +0 -0
  144. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_utilities/__init__.py +0 -0
  145. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_utilities/archiver.py +0 -0
  146. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_utilities/conversion.py +0 -0
  147. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_utilities/platform.py +0 -0
  148. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_utilities/py.typed +0 -0
  149. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_utilities/solution_modules.py +0 -0
  150. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/integrations/solutions_manager.py +0 -0
  151. {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/py.typed +0 -0
@@ -1,28 +1,26 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ansys-saf-cli
3
- Version: 4.1.dev0
3
+ Version: 4.3.0
4
4
  Summary: Command line interface for developing SAF solutions from scaffolding to packaging.
5
5
  License: Apache-2.0
6
- License-File: AUTHORS
7
6
  License-File: LICENSE
8
7
  Keywords: solution application framework,python,saf,solution
9
8
  Author: ANSYS, Inc.
10
- Author-email: pyansys.core@ansys.com
9
+ Author-email: pyansys-core@synopsys.com
11
10
  Maintainer: ANSYS, Inc.
12
- Maintainer-email: pyansys.core@ansys.com
13
- Requires-Python: >=3.10,<4
11
+ Maintainer-email: pyansys-core@synopsys.com
12
+ Requires-Python: >=3.11,<4
14
13
  Classifier: Development Status :: 4 - Beta
15
14
  Classifier: Intended Audience :: Other Audience
16
15
  Classifier: License :: OSI Approved :: Apache Software License
17
16
  Classifier: Natural Language :: English
18
17
  Classifier: Programming Language :: Python :: 3
19
- Classifier: Programming Language :: Python :: 3.10
20
18
  Classifier: Programming Language :: Python :: 3.11
21
19
  Classifier: Programming Language :: Python :: 3.12
22
20
  Classifier: Programming Language :: Python :: 3.13
23
21
  Classifier: Programming Language :: Python :: 3.14
24
22
  Classifier: Topic :: Scientific/Engineering
25
- Requires-Dist: ansys-saf-templates (>=0.2.dev2,<1.0.0)
23
+ Requires-Dist: ansys-saf-templates (>=0.2.0,<1.0.0)
26
24
  Requires-Dist: chardet (>=5.2.0,<7)
27
25
  Requires-Dist: click (>=8.1.7,<9.0.0)
28
26
  Requires-Dist: cookiecutter (>=2.6.0,<3.0.0)
@@ -4,11 +4,11 @@ requires = [ "poetry-core>=2.0.0", "setuptools>=67.0" ]
4
4
 
5
5
  [tool.poetry]
6
6
  name = "ansys-saf-cli"
7
- version = "4.1.dev0"
7
+ version = "4.3.0"
8
8
  description = "Command line interface for developing SAF solutions from scaffolding to packaging."
9
9
  license = "Apache-2.0"
10
- authors = [ "ANSYS, Inc. <pyansys.core@ansys.com>" ]
11
- maintainers = [ "ANSYS, Inc. <pyansys.core@ansys.com>" ]
10
+ authors = [ "ANSYS, Inc. <pyansys-core@synopsys.com>" ]
11
+ maintainers = [ "ANSYS, Inc. <pyansys-core@synopsys.com>" ]
12
12
  readme = "README.rst"
13
13
  keywords = [
14
14
  "solution application framework",
@@ -22,7 +22,6 @@ classifiers = [
22
22
  "License :: OSI Approved :: Apache Software License",
23
23
  "Natural Language :: English",
24
24
  "Programming Language :: Python :: 3",
25
- "Programming Language :: Python :: 3.10",
26
25
  "Programming Language :: Python :: 3.11",
27
26
  "Programming Language :: Python :: 3.12",
28
27
  "Programming Language :: Python :: 3.13",
@@ -42,15 +41,15 @@ name = "PyPI"
42
41
  priority = "primary"
43
42
 
44
43
  [tool.poetry.dependencies]
45
- python = ">=3.10,<4"
44
+ python = ">=3.11,<4"
46
45
  python-dotenv = "^1.0.0"
47
46
  click = "^8.1.7"
48
47
  pydantic = "^2.7"
49
- chardet = ">=5.2.0,<7" # chardet 7.0 breaks binaryornot used by cookiecutter
48
+ chardet = ">=5.2.0,<7" # chardet 7.0 breaks binaryornot used by cookiecutter
50
49
  cookiecutter = "^2.6.0"
51
50
  packaging = "^24.2"
52
51
  tomlkit = ">=0.14.0,<1.0.0"
53
- ansys-saf-templates = { version = ">=0.2.dev2, <1.0.0", allow-prereleases = true }
52
+ ansys-saf-templates = { version = ">=0.2.0, <1.0.0", allow-prereleases = true }
54
53
 
55
54
  [tool.poetry.group.doc]
56
55
  optional = true
@@ -61,7 +60,6 @@ numpydoc = "^1.6.0"
61
60
  sphinx = "^8.0"
62
61
  sphinx-code-tabs = "^0.5.5"
63
62
  sphinx-design = "^0.6.1"
64
- sphinx_mdinclude = "^0.5.3"
65
63
  sphinx-autobuild = "^2021.3.14"
66
64
  sphinx-autodoc-typehints = "^2.5.0"
67
65
  sphinxcontrib-websupport = "^1.2.4"
@@ -75,9 +73,9 @@ sphinx-tabs = ">=1.2.1,<3.5.0"
75
73
  optional = true
76
74
  [tool.poetry.group.tests.dependencies]
77
75
  coverage = "^7.0.0"
78
- httpx = "^0.27.0"
76
+ httpx2 = "^2.5.0"
79
77
  mock = "^4.0.3"
80
- psutil = "^6.0"
78
+ psutil = "^7.0"
81
79
  pytest = "^9.0.0"
82
80
  pytest-cov = "^7.0.0"
83
81
  pytest-html = "^4.1.0"
@@ -88,24 +86,18 @@ pytest-rerunfailures = "^15.0.0"
88
86
  pytest-timeout = "^2.3.1"
89
87
  pytest-xdist = "^3.6.1"
90
88
  tenacity = "^8.2.3"
91
- ansys-saf-testing = { version = ">=0.11.dev0, <1.0.0", allow-prereleases = true, extras = [
89
+ ansys-saf-testing = { version = ">=0.13.0, <1.0.0", allow-prereleases = true, extras = [
92
90
  "selenium",
93
- "solution",
94
91
  "hps",
95
92
  ] }
96
- pywinpty = { version = "^3.0.5", platform = "win32" }
97
-
98
- [tool.poetry.group.style]
99
- optional = true
100
- [tool.poetry.group.style.dependencies]
101
93
  # The following packages are included for the linting of the solutions in tests/
102
- ansys-saf-glow-engine = { version = "^1.41.dev2", allow-prereleases = true, extras = [
94
+ ansys-saf-glow-engine = { version = "^2.1", allow-prereleases = true, extras = [
103
95
  "dash",
104
96
  ] }
105
- ansys-solutions-dash-super-components = { version = ">=0.2.dev7, <1.0.0", allow-prereleases = true }
97
+ ansys-solutions-dash-super-components = "^1.0.0"
106
98
  dash_bootstrap_components = "^1.2"
107
99
  dash-mantine-components = "^2.6.0"
108
- dash-uploader = "^0.6"
100
+ pywinpty = { version = "^3.0.5", platform = "win32" }
109
101
 
110
102
  [tool.poetry.group.dev]
111
103
  optional = true
@@ -120,7 +112,7 @@ line-length = 120
120
112
  extend-exclude = "({{.*?}})" # Ignore files containing cookiecutter syntax
121
113
 
122
114
  [tool.ruff]
123
- target-version = "py310"
115
+ target-version = "py311"
124
116
  line-length = 120
125
117
  extend-exclude = [
126
118
  "**/_solutions/templates/**", # Ignore files containing cookiecutter syntax
@@ -151,7 +143,7 @@ lint.select = [
151
143
  "UP", # pyupgrade
152
144
  "W", # pycodestyle - warning
153
145
  ]
154
- lint.ignore = [ "PTH207" ]
146
+ lint.ignore = [ "COM812", "PTH207" ]
155
147
  lint.flake8-pytest-style.mark-parentheses = false
156
148
  lint.isort.force-sort-within-sections = true
157
149
  lint.isort.known-first-party = [ "src", "doc", "tests", "scripts" ]
@@ -179,7 +171,6 @@ source = [ "ansys.saf.cli" ]
179
171
  [tool.coverage.report]
180
172
  show_missing = true
181
173
  omit = [
182
- "setup_environment.py",
183
174
  "*/pytest-of-*/pytest-*/popen-*/*",
184
175
  "/tmp/*",
185
176
  "*/_solutions/templates/*",
@@ -193,18 +184,21 @@ exclude = [
193
184
  ".venv",
194
185
  ".poetry",
195
186
  ".git",
196
- "setup_environment.py",
197
187
  "**/_solutions/templates/", # Ignore files containing cookiecutter syntax
198
188
  "tests/mocks/plugin/", # Ignore files containing cookiecutter syntax
199
189
  "tests/mocks/pages/first_page_with_minerva.py",
200
190
  "tests/mocks/pages/first_page_with_hps.py",
201
- "tests/mocks/steps/first_step_with_hps.py",
202
191
  "tests/mocks/pages/first_page_with_file_output.py",
192
+ "tests/mocks/steps/first_step_with_hps.py",
203
193
  "tests/mocks/steps/first_step_with_file_output.py",
194
+ "tests/mocks/steps/first_step_with_minerva.py",
195
+ "tests/unit/mocks/solutions/",
196
+ "doc/source/_static/examples/",
204
197
  ]
205
198
  strict = [ "src/ansys/saf/cli", "tests", "scripts" ]
206
199
  venvPath = "."
207
200
  venv = ".venv"
201
+ pythonVersion = "3.11"
208
202
 
209
203
  [tool.bandit]
210
204
  exclude_dirs = [ "tests", "setup_environment.py" ]
@@ -13,6 +13,6 @@
13
13
  "__pkg_namespace": "saf.solutions.my_solution",
14
14
  "__repository_url": "",
15
15
  "__appdata_directory": "",
16
- "__python_version": "3.10",
16
+ "__python_version": "3.11",
17
17
  "__saf_cli_version": ""
18
18
  }
@@ -1,8 +1,8 @@
1
1
  {
2
- "image": "mcr.microsoft.com/devcontainers/python:3.10",
2
+ "image": "mcr.microsoft.com/devcontainers/python:3.11",
3
3
  "features": {
4
4
  },
5
- "onCreateCommand": "pip install packaging toml && python setup_environment.py -d all -f",
5
+ "onCreateCommand": "pip install ansys-saf-cli && saf install -d all -f",
6
6
  "postCreateCommand": "chmod +x /workspaces/{{ cookiecutter.__solution_name }}/.venv/bin/activate && sed -i '$a source /workspaces/{{ cookiecutter.__solution_name }}/.venv/bin/activate' ~/.bashrc && sed -i '$a source /workspaces/{{ cookiecutter.__solution_name }}/.venv/bin/activate' ~/.zshrc",
7
7
  "postAttachCommand": "tox -e style",
8
8
  "customizations": {
@@ -67,7 +67,7 @@ jobs:
67
67
  timeout-minutes: 20
68
68
  strategy:
69
69
  matrix:
70
- python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
70
+ python-version: ["3.11", "3.12", "3.13", "3.14"]
71
71
  fail-fast: false
72
72
  env:
73
73
  # Workaround for Python toolset mismatch on windows-2025:
@@ -118,21 +118,9 @@ jobs:
118
118
  activate-venv: "source {{ "${{ steps.python-setup.outputs.venv-exe-location }}" }}/activate"
119
119
  use-uv: false
120
120
 
121
- check-doc-style:
122
- name: Check documentation style
123
- runs-on: ubuntu-latest
124
- timeout-minutes: 10
125
- steps:
126
- - name: Check documentation style
127
- uses: ansys/actions/doc-style@v10
128
- with:
129
- token: {{ "${{ github.token }}" }}
130
- files: "doc"
131
-
132
121
  build-doc:
133
122
  name: Build documentation
134
123
  runs-on: ubuntu-latest
135
- needs: check-doc-style
136
124
  timeout-minutes: 10
137
125
  steps:
138
126
  - name: Build documentation
@@ -0,0 +1,89 @@
1
+ name: Labeler
2
+ on:
3
+ pull_request:
4
+ # opened, reopened, and synchronize are default for pull_request
5
+ # edited - when PR title or body is changed
6
+ # labeled - when labels are added to PR
7
+ types: [opened, reopened, synchronize, edited, labeled]
8
+ push:
9
+ branches: [main]
10
+ paths:
11
+ - '.github/labels.yml'
12
+
13
+ concurrency:
14
+ group: {{ "${{ github.workflow }}-${{ github.ref }}-label" }}
15
+ cancel-in-progress: true
16
+
17
+ jobs:
18
+
19
+ label-syncer:
20
+ name: Syncer
21
+ runs-on: ubuntu-latest
22
+ steps:
23
+ - uses: actions/checkout@v4
24
+ - uses: micnncim/action-label-syncer@v1
25
+ env:
26
+ GITHUB_TOKEN: {{ "${{ secrets.GITHUB_TOKEN }}" }}
27
+
28
+ labeler:
29
+ name: Set labels
30
+ needs: [label-syncer]
31
+ permissions:
32
+ contents: read
33
+ pull-requests: write
34
+ runs-on: ubuntu-latest
35
+ steps:
36
+
37
+ # Label based on modified files
38
+ - name: Label based on changed files
39
+ uses: actions/labeler@v5
40
+ with:
41
+ repo-token: {{ "${{ secrets.GITHUB_TOKEN }}" }}
42
+ sync-labels: true
43
+
44
+ # Label based on branch name
45
+ - uses: actions-ecosystem/action-add-labels@v1
46
+ if: |
47
+ startsWith(github.event.pull_request.head.ref, 'doc') ||
48
+ startsWith(github.event.pull_request.head.ref, 'docs')
49
+ with:
50
+ labels: documentation
51
+
52
+ - uses: actions-ecosystem/action-add-labels@v1
53
+ if: |
54
+ startsWith(github.event.pull_request.head.ref, 'maint') ||
55
+ startsWith(github.event.pull_request.head.ref, 'no-ci') ||
56
+ startsWith(github.event.pull_request.head.ref, 'ci')
57
+ with:
58
+ labels: maintenance
59
+
60
+ - uses: actions-ecosystem/action-add-labels@v1
61
+ if: startsWith(github.event.pull_request.head.ref, 'feat')
62
+ with:
63
+ labels: |
64
+ enhancement
65
+
66
+ - uses: actions-ecosystem/action-add-labels@v1
67
+ if: |
68
+ startsWith(github.event.pull_request.head.ref, 'fix') ||
69
+ startsWith(github.event.pull_request.head.ref, 'patch')
70
+ with:
71
+ labels: bug
72
+
73
+ commenter:
74
+ runs-on: ubuntu-latest
75
+ steps:
76
+ - name: Suggest to add labels
77
+ uses: peter-evans/create-or-update-comment@v2
78
+ # Execute only when no labels have been applied to the pull request
79
+ if: toJSON(github.event.pull_request.labels.*.name) == '{}'
80
+ with:
81
+ issue-number: {{ "${{ github.event.pull_request.number }}" }}
82
+ body: |
83
+ Please add one of the following labels to add this contribution to the Release Notes :point_down:
84
+ - [bug]({{ cookiecutter.__repository_url }}/pulls?q=label%3Abug+)
85
+ - [documentation]({{ cookiecutter.__repository_url }}/pulls?q=label%3Adocumentation+)
86
+ - [enhancement]({{ cookiecutter.__repository_url }}/pulls?q=label%3Aenhancement+)
87
+ - [good first issue]({{ cookiecutter.__repository_url }}/pulls?q=label%3Agood+first+issue)
88
+ - [maintenance]({{ cookiecutter.__repository_url }}/pulls?q=label%3Amaintenance+)
89
+ - [release]({{ cookiecutter.__repository_url }}/pulls?q=label%3Arelease+)
@@ -3,38 +3,31 @@ repos:
3
3
  - repo: https://github.com/psf/black
4
4
  rev: 24.4.2
5
5
  hooks:
6
- - id: black
6
+ - id: black
7
7
 
8
8
  - repo: https://github.com/pycqa/isort
9
9
  rev: 5.13.2
10
10
  hooks:
11
- - id: isort
11
+ - id: isort
12
12
 
13
13
  - repo: https://github.com/PyCQA/flake8
14
14
  rev: 7.0.0
15
15
  hooks:
16
- - id: flake8
16
+ - id: flake8
17
17
 
18
18
  - repo: https://github.com/codespell-project/codespell
19
19
  rev: v2.3.0
20
20
  hooks:
21
- - id: codespell
22
- args: [--skip, "doc/styles/*,doc/_build/*,*.js,*.tmp", --ignore-words, ".codespell.ignore", --exclude, "pyproject.toml,poetry.lock"]
21
+ - id: codespell
22
+ args: [--skip, "doc/styles/*,doc/_build/*,*.js,*.tmp", --ignore-words, ".codespell.ignore",
23
+ --exclude, "pyproject.toml,poetry.lock"]
23
24
 
24
25
  - repo: https://github.com/pycqa/pydocstyle
25
26
  rev: 6.3.0
26
27
  hooks:
27
- - id: pydocstyle
28
- additional_dependencies: [toml]
29
- exclude: "tests/"
30
-
31
- - repo: https://github.com/ansys/pre-commit-hooks
32
- rev: fd1d6b0b4baeb08e32d4de0909999576695c0433 # v0.5.2
33
- hooks:
34
- - id: add-license-headers
35
- args:
36
- - --start_year=2023
37
- - --custom_template=copyright.jinja2
28
+ - id: pydocstyle
29
+ additional_dependencies: [toml]
30
+ exclude: "tests/"
38
31
 
39
32
  - repo: https://github.com/dotenv-linter/dotenv-linter
40
33
  rev: f9076b02daed89f54ed0bd23951a4cfa5ccceac4 # v4.0.0
@@ -0,0 +1,165 @@
1
+ # AGENTS guidelines for this repository
2
+
3
+ ## Project overview
4
+
5
+ This repository contains **{{ cookiecutter.__solution_display_name }}**, a Solution Application Framework (SAF) *solution*.
6
+
7
+ A SAF solution is a simulation-driven application built on top of the Solution Application Framework. It couples a
8
+ Python backend (built with the **GLOW** engine) that defines the solution's data model, transaction methods, and
9
+ step orchestration, with an optional frontend that renders the solution's graphical user interface.
10
+ {%- if cookiecutter.__ui_framework == "dash" %}
11
+ The user interface of this solution is implemented with **Dash** and served by the Solution UI server, letting the UI
12
+ be authored in Python.
13
+ {%- else %}
14
+ This solution was generated without a bundled UI framework (`--ui-framework none`). Only the backend
15
+ (the GLOW API server and its transaction methods) is provided; any UI is expected to be integrated separately or the
16
+ solution is intended to be consumed exclusively through its REST API.
17
+ {%- endif %}
18
+
19
+ A solution is composed of:
20
+
21
+ - A **solution definition** (the top-level `{{ cookiecutter.__solution_definition_class_name }}` class, a subclass of
22
+ `ansys.saf.glow.solution.Solution`) that declares the projects, steps, and shared data model.
23
+ - One or more **steps**, each with its own data model and transaction methods.
24
+ {%- if cookiecutter.__ui_framework == "dash" %}
25
+ - **UI code** that consumes the GLOW REST API exposed by the solution.
26
+ {%- endif %}
27
+
28
+ This solution is managed with **SAF CLI** (`saf`). SAF CLI automatically activates the solution's virtual environment
29
+ and sets the solution root as the working directory when it runs commands. You typically don't need to activate the
30
+ virtual environment manually or invoke Python/Poetry directly — prefer running tasks via `saf`.
31
+
32
+ ## Folder structure
33
+
34
+ - `src/{{ cookiecutter.__solution_namespace_path }}/{{ cookiecutter.__solution_module_name }}/`: Solution source code
35
+ (solution definition, steps, and, when applicable, UI code).
36
+ - `tests/`: pytest tests.
37
+ - `doc/`: Sphinx documentation sources.
38
+ - `examples/`: Example scripts and usage snippets.
39
+ - `deployments/`: Deployment recipes (Docker Compose files for standalone, HPS, Minerva, and distributed setups).
40
+ - `pyproject.toml`, `poetry.lock`: Dependency and build configuration (Poetry). Never edit `poetry.lock` by hand;
41
+ regenerate it via `saf execute {{ cookiecutter.__solution_name }} "poetry lock"`.
42
+ - `.pre-commit-config.yaml`, `tox.ini`, `.flake8`: Code quality configuration.
43
+
44
+ ## Key technologies and tools
45
+
46
+ - **Python {{ cookiecutter.__python_version }}**, **Poetry** for dependencies.
47
+ - **GLOW** (`ansys-saf-glow-engine`): backend engine that powers the solution.
48
+ {%- if cookiecutter.__ui_framework == "dash" %}
49
+ - **Dash**: Python UI framework used by this solution.
50
+ {%- endif %}
51
+ - **pytest** for tests, **Sphinx** for docs.
52
+ - **tox**, **pre-commit**, **black**, **isort**, **flake8**, **pydocstyle**, **codespell** for style and quality.
53
+
54
+ ## Working with SAF CLI
55
+
56
+ Target this solution by its name (`{{ cookiecutter.__solution_name }}`), or omit the name when the current working
57
+ directory is the solution root. For any command, `saf <command> --help` lists the supported options.
58
+
59
+ ### Install / reinstall the solution environment
60
+
61
+ ```bash
62
+ saf install {{ cookiecutter.__solution_name }} -d all # install with all dependency groups
63
+ saf install {{ cookiecutter.__solution_name }} -d <group> # single group: doc, build, tests, style
64
+ saf install {{ cookiecutter.__solution_name }} -d all -f # force a clean reinstall
65
+ ```
66
+
67
+ ### Run commands in the solution environment
68
+
69
+ Any command that must run inside the solution's virtual environment (poetry, pytest, sphinx-build, tox, ...) **must**
70
+ be wrapped with `saf execute`:
71
+
72
+ ```bash
73
+ saf execute {{ cookiecutter.__solution_name }} "<command>"
74
+ ```
75
+
76
+ Common tasks:
77
+
78
+ ```bash
79
+ saf execute {{ cookiecutter.__solution_name }} "pytest tests"
80
+ saf execute {{ cookiecutter.__solution_name }} "sphinx-build doc/source doc/build/html --color -vW -bhtml"
81
+ saf execute {{ cookiecutter.__solution_name }} "tox -e style"
82
+ saf execute {{ cookiecutter.__solution_name }} "poetry add <package>"
83
+ saf execute {{ cookiecutter.__solution_name }} "poetry add <package> --group <group>"
84
+ saf execute {{ cookiecutter.__solution_name }} "poetry add <package> --source <source>"
85
+ saf execute {{ cookiecutter.__solution_name }} "poetry lock"
86
+ ```
87
+
88
+ ### Run the solution
89
+
90
+ ```bash
91
+ saf run {{ cookiecutter.__solution_name }} # default run
92
+ saf run {{ cookiecutter.__solution_name }} --debug # debug mode
93
+ saf run {{ cookiecutter.__solution_name }} --no-ui # backend only (useful for API-level checks)
94
+ ```
95
+
96
+ Additional flags (`--portal`, `--browser`, `--project`, `--env-file`) exist for interactive use; see
97
+ `saf run --help`.
98
+
99
+ ### Adding a step
100
+
101
+ Steps are scaffolded from templates managed by the SAF Templates package (built-in templates plus any installed
102
+ plugins). List every template available in the current environment with:
103
+
104
+ ```bash
105
+ saf templates
106
+ ```
107
+
108
+ {%- if cookiecutter.__ui_framework == "dash" %}
109
+ The step's `--ui-framework` must match this solution's (`dash`), or be `none`. Pass `--template <template-name>` to
110
+ pick a specific template (from `saf templates`); omit it to be prompted interactively:
111
+
112
+ ```bash
113
+ saf add-step {{ cookiecutter.__solution_name }} --step-name <step-name> --ui-framework dash --template <template-name>
114
+ saf add-step {{ cookiecutter.__solution_name }} --step-name <step-name> --ui-framework none --template <template-name>
115
+ ```
116
+ {%- else %}
117
+ This solution was created with `--ui-framework none`, so all steps must use the same value. Pass
118
+ `--template <template-name>` to pick a specific template (from `saf templates`); omit it to be prompted interactively:
119
+
120
+ ```bash
121
+ saf add-step {{ cookiecutter.__solution_name }} --step-name <step-name> --ui-framework none --template <template-name>
122
+ ```
123
+ {%- endif %}
124
+
125
+ ### Build / archive
126
+
127
+ Producing installers (`saf build`, with `--offline-package`, `--python-version`, `--encrypt`) and archives
128
+ (`saf archive`) is typically part of a release workflow. See `saf build --help` and `saf archive --help`.
129
+
130
+ ## Coding standards
131
+
132
+ - Follow **PEP 8**. Line length is **120** characters; use the full width when it improves readability.
133
+ - Use **type hints** on all public functions, methods, and class attributes.
134
+ - Write docstrings in **numpydoc** format for all public APIs.
135
+ - Add or update **pytest tests** together with any code change that affects behavior. If tests are not added,
136
+ proactively list the use cases (inputs, expected outcomes, edge cases) that should be covered — not the test
137
+ implementation — so the user can decide what to test next.
138
+ - Never bypass pre-commit hooks (do not use `--no-verify`). Fix the underlying issue instead.
139
+
140
+ ## Adding dependencies
141
+
142
+ When introducing a new dependency:
143
+
144
+ - **Never edit `pyproject.toml` directly** to add, remove, or change a dependency, its version, or its group. Do not
145
+ edit `poetry.lock` by hand either.
146
+ - Always add, remove, or update dependencies through `saf execute {{ cookiecutter.__solution_name }} "poetry <cmd> ..."`
147
+ (for example `poetry add`, `poetry remove`, `poetry lock`) so `pyproject.toml` and `poetry.lock` stay consistent.
148
+
149
+ When there are several candidates that solve the same problem, flag maintenance status (recent releases, active issue
150
+ tracker) and known security advisories (PyPI / OSV) to the user so they can pick informed. Do not silently reject a
151
+ package on these grounds.
152
+
153
+ ## Git and contribution workflow
154
+
155
+ - Branch naming: `feature/`, `bugfix/`, `hotfix/`, `refactor/`.
156
+ - Commit messages: conventional commits (`feat:`, `fix:`, `docs:`, `chore:`, `refactor:`, `test:`).
157
+ - Pull requests: focused, reasonably sized, with descriptive titles and links to related issues.
158
+ - All code must pass pre-commit hooks and CI before merging.
159
+
160
+ ## Troubleshooting
161
+
162
+ - Inspect any command's options with `saf <command> --help`.
163
+ - If the environment appears broken, force a clean reinstall:
164
+ `saf install {{ cookiecutter.__solution_name }} -d all -f`.
165
+ - For private PyPI access issues, verify Poetry's credentials configuration for the relevant private source.
@@ -24,7 +24,7 @@
24
24
  |--------------|-------------|
25
25
  | Operating system | Windows 10 or Ubuntu |
26
26
  | Python distribution | Python {{ cookiecutter.__python_version }} |
27
- | Supported Python distributions | Python 3.10, 3.11, 3.12, 3.13 and 3.14 |
27
+ | Supported Python distributions | Python 3.11, 3.12, 3.13 and 3.14 |
28
28
  | IDE | [Visual Studio Code](https://code.visualstudio.com/download#) |
29
29
  | SAF CLI | Install [latest SAF CLI](https://dev-docs.external.solutions.ansys.com/version/stable/getting_started/prerequisites/saf_cli.html) |
30
30
 
@@ -15,8 +15,6 @@ RUN touch /app/src/{{ cookiecutter.__solution_namespace_path }}/{{ cookiecutter.
15
15
 
16
16
  RUN poetry install
17
17
 
18
- COPY ../../minerva /usr/local/share/minerva
19
-
20
18
  RUN rm -rf /root/.cache/pip/* /dist /var/lib/apt/lists/*
21
19
 
22
20
  # === API Stage ===================================================================================
@@ -1,27 +1,41 @@
1
- ACCESS_URL=solutions.${DOMAIN_NAME}
2
- APP_IMAGE_VERSION=main
3
- DATABASE_LOCATION={{ cookiecutter.__appdata_directory }}/Ansys/portal/{{ cookiecutter.__solution_name }}
4
- DOMAIN_NAME=
1
+ # dotenv-linter:off UnorderedKey
2
+ DOMAIN_NAME=${DOMAIN_NAME}
3
+ TRAEFIK_PORT=${TRAEFIK_PORT}
5
4
  EXT_NETWORK_NAME=platform_default
6
- GLOW_API_CONTAINER_PORT=8000
5
+ APP_IMAGE_VERSION=main
6
+ GLOW_DEPLOYMENT=DockerCompose
7
+ GLOW_SOLUTION_DEFINITION={{ cookiecutter.__solution_namespace }}.{{ cookiecutter.__solution_module_name }}.solution.definition
8
+ GLOW_UI_MODULE={{ cookiecutter.__solution_namespace }}.{{ cookiecutter.__solution_module_name }}.ui.app
9
+
10
+ # Solution Docker name
11
+ APP_NAME={{ cookiecutter.__docker_name }}
12
+
13
+ # Routing config
14
+ ACCESS_URL=solutions.${DOMAIN_NAME}
7
15
  GLOW_API_PATH_PREFIX=/
16
+ GLOW_UI_PATH_PREFIX=/{{ cookiecutter.__docker_name }}/
17
+
18
+ # API service config
19
+ GLOW_API_CONTAINER_PORT=8000
20
+ GLOW_API_NUMBER_OF_WORKERS=8
8
21
  # dotenv-linter:off QuoteCharacter
9
22
  GLOW_CORS_ORIGINS=["*"]
10
23
  # dotenv-linter:on QuoteCharacter
11
- GLOW_API_NUMBER_OF_WORKERS=8
12
- GLOW_DEPLOYMENT=DockerCompose
24
+
25
+ # UI service config
26
+ GLOW_UI_CONTAINER_PORT=8001
27
+
28
+ # HPS service config
29
+ GLOW_PRODUCT_INSTANCE_SYSTEM=HPS
13
30
  GLOW_HPS_HOST=hps.${DOMAIN_NAME}
14
- GLOW_HPS_PASSWORD=repadmin
15
31
  GLOW_HPS_PORT=${TRAEFIK_PORT}
16
- GLOW_HPS_USERNAME=repadmin
17
- GLOW_PRODUCT_INSTANCE_SYSTEM=HPS
32
+ GLOW_HPS_USERNAME=${PG_USER}
33
+ GLOW_HPS_PASSWORD=${PG_PASSWORD}
34
+
35
+ # Storage config
36
+ DATABASE_LOCATION=${APPDATA}/Ansys/portal/{{ cookiecutter.__solution_name }}
18
37
  GLOW_PROJECTS_DIR_SOLUTION=./data/projects
19
- GLOW_SOLUTION_DEFINITION={{ cookiecutter.__solution_namespace }}.{{ cookiecutter.__solution_module_name }}.solution.definition
20
38
  GLOW_TRANSACTIONS_DIR_SOLUTION=./data/transactions
21
- GLOW_UI_CONTAINER_PORT=8001
22
- GLOW_UI_MODULE={{ cookiecutter.__solution_namespace }}.{{ cookiecutter.__solution_module_name }}.ui.app
23
- GLOW_UI_PATH_PREFIX=/
39
+
40
+ # Observability
24
41
  OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318
25
- PORTAL_DATABASE_TYPE=postgres
26
- PORTAL_PROJECT_DATABASE_LOCATION=${DATABASE_LOCATION}/projects.db
27
- TRAEFIK_PORT=8443