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.
- {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/PKG-INFO +5 -7
- {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/pyproject.toml +19 -25
- {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/solution/cookiecutter.json +1 -1
- {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
- {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
- ansys_saf_cli-4.3.0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/.github/workflows/label.yml +89 -0
- {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
- ansys_saf_cli-4.3.0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/AGENTS.md +165 -0
- {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
- {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
- {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
- ansys_saf_cli-4.3.0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/deployments/distributed-deployment-template/compose.yaml +112 -0
- {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
- {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
- {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
- {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
- {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
- {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
- ansys_saf_cli-4.3.0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/doc/source/_static/css/custom.css +25 -0
- {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
- ansys_saf_cli-4.3.0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/doc/source/index.rst +3 -0
- {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
- {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
- {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
- 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
- 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
- {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
- {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
- 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
- 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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_utilities/backup.py +2 -1
- ansys_saf_cli-4.1.dev0/AUTHORS +0 -12
- ansys_saf_cli-4.1.dev0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/.github/workflows/label.yml +0 -89
- ansys_saf_cli-4.1.dev0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/.release-please-manifest.json +0 -3
- ansys_saf_cli-4.1.dev0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/.reuse/templates/copyright.jinja2 +0 -1
- ansys_saf_cli-4.1.dev0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/AUTHORS +0 -12
- ansys_saf_cli-4.1.dev0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/CODEOWNERS +0 -3
- ansys_saf_cli-4.1.dev0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/CODE_OF_CONDUCT.md +0 -65
- ansys_saf_cli-4.1.dev0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/CONTRIBUTING.md +0 -2
- ansys_saf_cli-4.1.dev0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/CONTRIBUTORS.md +0 -9
- ansys_saf_cli-4.1.dev0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/LICENSE.rst +0 -41
- ansys_saf_cli-4.1.dev0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/deployments/distributed-deployment-template/compose.yaml +0 -132
- ansys_saf_cli-4.1.dev0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/deployments/standalone-with-minerva/.env +0 -25
- ansys_saf_cli-4.1.dev0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/deployments/standalone-with-minerva/compose.yaml +0 -122
- ansys_saf_cli-4.1.dev0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/doc/changelog.d/changelog_template.jinja +0 -17
- ansys_saf_cli-4.1.dev0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/doc/source/_static/css/custom.css +0 -8
- 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
- ansys_saf_cli-4.1.dev0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/doc/source/_templates/README.md +0 -1
- ansys_saf_cli-4.1.dev0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/doc/source/changelog.rst +0 -12
- ansys_saf_cli-4.1.dev0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/doc/source/examples.rst +0 -8
- 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
- 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
- ansys_saf_cli-4.1.dev0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/doc/source/index.rst +0 -51
- ansys_saf_cli-4.1.dev0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/doc/source/user_guide/index.rst +0 -6
- 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
- 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
- ansys_saf_cli-4.1.dev0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/examples/README.md +0 -1
- ansys_saf_cli-4.1.dev0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/minerva/cli/README.md +0 -3
- 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
- ansys_saf_cli-4.1.dev0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/minerva/oauth/oauth.config +0 -9
- ansys_saf_cli-4.1.dev0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/release-please-config.json +0 -9
- ansys_saf_cli-4.1.dev0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/sonar-project.properties +0 -12
- 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
- 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
- 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
- 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
- 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
- ansys_saf_cli-4.1.dev0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/tests/common_test_files/README.md +0 -1
- ansys_saf_cli-4.1.dev0/src/ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/tox.ini +0 -56
- {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/LICENSE +0 -0
- {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/README.rst +0 -0
- {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/__init__.py +0 -0
- {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_cli/__init__.py +0 -0
- {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_cli/main.py +0 -0
- {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_cli/py.typed +0 -0
- {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_config/__init__.py +0 -0
- {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_config/const.py +0 -0
- {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_config/py.typed +0 -0
- {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_database/__init__.py +0 -0
- {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_database/manager.py +0 -0
- {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_database/models.py +0 -0
- {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_database/py.typed +0 -0
- {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/__init__.py +0 -0
- {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/add_step.py +0 -0
- {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/dependencies.py +0 -0
- {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/environment.py +0 -0
- {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/plugins.py +0 -0
- {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/py.typed +0 -0
- {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/scaffolding.py +0 -0
- {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/__init__.py +0 -0
- {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_solutions/templates/py.typed +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_utilities/__init__.py +0 -0
- {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_utilities/archiver.py +0 -0
- {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_utilities/conversion.py +0 -0
- {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_utilities/platform.py +0 -0
- {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_utilities/py.typed +0 -0
- {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/_utilities/solution_modules.py +0 -0
- {ansys_saf_cli-4.1.dev0 → ansys_saf_cli-4.3.0}/src/ansys/saf/cli/integrations/solutions_manager.py +0 -0
- {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.
|
|
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
|
|
9
|
+
Author-email: pyansys-core@synopsys.com
|
|
11
10
|
Maintainer: ANSYS, Inc.
|
|
12
|
-
Maintainer-email: pyansys
|
|
13
|
-
Requires-Python: >=3.
|
|
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.
|
|
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.
|
|
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
|
|
11
|
-
maintainers = [ "ANSYS, Inc. <pyansys
|
|
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.
|
|
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"
|
|
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.
|
|
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
|
-
|
|
76
|
+
httpx2 = "^2.5.0"
|
|
79
77
|
mock = "^4.0.3"
|
|
80
|
-
psutil = "^
|
|
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.
|
|
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
|
|
94
|
+
ansys-saf-glow-engine = { version = "^2.1", allow-prereleases = true, extras = [
|
|
103
95
|
"dash",
|
|
104
96
|
] }
|
|
105
|
-
ansys-solutions-dash-super-components =
|
|
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
|
-
|
|
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 = "
|
|
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" ]
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
|
-
"image": "mcr.microsoft.com/devcontainers/python:3.
|
|
2
|
+
"image": "mcr.microsoft.com/devcontainers/python:3.11",
|
|
3
3
|
"features": {
|
|
4
4
|
},
|
|
5
|
-
"onCreateCommand": "pip install
|
|
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.
|
|
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
|
-
|
|
6
|
+
- id: black
|
|
7
7
|
|
|
8
8
|
- repo: https://github.com/pycqa/isort
|
|
9
9
|
rev: 5.13.2
|
|
10
10
|
hooks:
|
|
11
|
-
|
|
11
|
+
- id: isort
|
|
12
12
|
|
|
13
13
|
- repo: https://github.com/PyCQA/flake8
|
|
14
14
|
rev: 7.0.0
|
|
15
15
|
hooks:
|
|
16
|
-
|
|
16
|
+
- id: flake8
|
|
17
17
|
|
|
18
18
|
- repo: https://github.com/codespell-project/codespell
|
|
19
19
|
rev: v2.3.0
|
|
20
20
|
hooks:
|
|
21
|
-
|
|
22
|
-
|
|
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
|
-
|
|
28
|
-
|
|
29
|
-
|
|
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.
|
|
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
|
-
|
|
2
|
-
|
|
3
|
-
|
|
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
|
-
|
|
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
|
-
|
|
12
|
-
|
|
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
|
|
17
|
-
|
|
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
|
-
|
|
22
|
-
|
|
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
|