oe-python-template-example 0.1.10__tar.gz → 0.1.12__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 (92) hide show
  1. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/.copier-answers.yml +1 -1
  2. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/.github/workflows/package-build-publish-release.yml +4 -1
  3. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/PKG-INFO +10 -5
  4. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/README.md +9 -4
  5. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/SECURITY.md +9 -9
  6. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/SERVICE_CONNECTIONS.md +8 -0
  7. oe_python_template_example-0.1.12/VERSION +1 -0
  8. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/_readme_header.md +2 -0
  9. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/_readme_main.md +7 -4
  10. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/docs/source/conf.py +1 -1
  11. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/pyproject.toml +3 -3
  12. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/sonar-project.properties +1 -1
  13. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/uv.lock +23 -23
  14. oe_python_template_example-0.1.10/VERSION +0 -1
  15. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/.act-env-public +0 -0
  16. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/.devcontainer/Dockerfile +0 -0
  17. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/.devcontainer/devcontainer.json +0 -0
  18. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/.devcontainer/onCreateCommand +0 -0
  19. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/.devcontainer/postAttachCommand +0 -0
  20. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/.devcontainer/postCreateCommand +0 -0
  21. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/.env.example +0 -0
  22. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/.github/dependabot.yml +0 -0
  23. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/.github/workflows/codeql.yml +0 -0
  24. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/.github/workflows/docker-image-build-publish.yml +0 -0
  25. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/.github/workflows/test-and-report.yml +0 -0
  26. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/.gitignore +0 -0
  27. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/.pre-commit-config.yaml +0 -0
  28. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/.python-version +0 -0
  29. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/.readthedocs.yml +0 -0
  30. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/.secrets.baseline +0 -0
  31. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/.vscode/extensions.json +0 -0
  32. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/.vscode/settings.json +0 -0
  33. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/CHANGELOG.md +0 -0
  34. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/CODEOWNERS +0 -0
  35. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/CONTRIBUTING.md +0 -0
  36. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/Dockerfile +0 -0
  37. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/LICENSE +0 -0
  38. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/RELEASE_NOTES.md +0 -0
  39. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/_readme_footer.md +0 -0
  40. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/bin/git-cliff +0 -0
  41. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/bump +0 -0
  42. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/codecov.yml +0 -0
  43. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/compose.yaml +0 -0
  44. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/docs/Makefile +0 -0
  45. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/docs/make.bat +0 -0
  46. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/docs/source/_static/.keep +0 -0
  47. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/docs/source/_static/openapi.json +0 -0
  48. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/docs/source/_static/openapi.yaml +0 -0
  49. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/docs/source/_static/openapi_v1.json +0 -0
  50. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/docs/source/_static/openapi_v1.yaml +0 -0
  51. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/docs/source/_static/openapi_v2.json +0 -0
  52. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/docs/source/_static/openapi_v2.yaml +0 -0
  53. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/docs/source/api_v1.rst +0 -0
  54. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/docs/source/api_v2.rst +0 -0
  55. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/docs/source/contributing.rst +0 -0
  56. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/docs/source/index.rst +0 -0
  57. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/docs/source/latexmkrc +0 -0
  58. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/docs/source/main.rst +0 -0
  59. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/docs/source/reference.rst +0 -0
  60. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/docs/source/release-notes.rst +0 -0
  61. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/examples/__init__.py +0 -0
  62. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/examples/notebook.ipynb +0 -0
  63. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/examples/notebook.py +0 -0
  64. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/examples/script.py +0 -0
  65. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/examples/streamlit.py +0 -0
  66. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/git-cliff-2.7.0/CHANGELOG.md +0 -0
  67. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/git-cliff-2.7.0/LICENSE-APACHE +0 -0
  68. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/git-cliff-2.7.0/LICENSE-MIT +0 -0
  69. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/git-cliff-2.7.0/README.md +0 -0
  70. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/git-cliff-2.7.0/completions/_git-cliff +0 -0
  71. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/git-cliff-2.7.0/completions/_git-cliff.ps1 +0 -0
  72. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/git-cliff-2.7.0/completions/git-cliff.bash +0 -0
  73. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/git-cliff-2.7.0/completions/git-cliff.elv +0 -0
  74. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/git-cliff-2.7.0/completions/git-cliff.fish +0 -0
  75. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/git-cliff-2.7.0/git-cliff-completions +0 -0
  76. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/git-cliff-2.7.0/git-cliff-mangen +0 -0
  77. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/git-cliff-2.7.0/man/git-cliff.1 +0 -0
  78. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/git-cliff-2.7.0-x86_64-unknown-linux-gnu.tar.gz +0 -0
  79. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/github-action-run +0 -0
  80. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/latexmkrc +0 -0
  81. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/logo.png +0 -0
  82. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/noxfile.py +0 -0
  83. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/renovate.json +0 -0
  84. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/src/oe_python_template_example/__init__.py +0 -0
  85. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/src/oe_python_template_example/api.py +0 -0
  86. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/src/oe_python_template_example/cli.py +0 -0
  87. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/src/oe_python_template_example/constants.py +0 -0
  88. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/src/oe_python_template_example/service.py +0 -0
  89. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/tests/__init__.py +0 -0
  90. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/tests/api_test.py +0 -0
  91. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/tests/cli_test.py +0 -0
  92. {oe_python_template_example-0.1.10 → oe_python_template_example-0.1.12}/tests/fixtures/.keep +0 -0
@@ -1,4 +1,4 @@
1
- _commit: v0.5.4
1
+ _commit: v0.5.7
2
2
  _src_path: gh:helmut-hoffer-von-ankershoffen/oe-python-template
3
3
  author_email: helmuthva@gmail.com
4
4
  author_github_username: helmut-hoffer-von-ankershoffen
@@ -46,11 +46,14 @@ jobs:
46
46
  - name: Publish package to PyPI
47
47
  run: uv publish -t ${{ secrets.UV_PUBLISH_TOKEN }}
48
48
 
49
+ - name: Build package into dist/
50
+ run: uv run nox -s audit
51
+
49
52
  - name: Create GitHub release
50
53
  env:
51
54
  GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
52
55
  run: |
53
- gh release create ${{ github.ref_name }} ./dist/* --notes-file ${{ steps.git-cliff.outputs.changelog }}
56
+ gh release create ${{ github.ref_name }} ./dist/* sbom.json licenses.json licenses-inverted.json vulnerabilities.json --notes-file ${{ steps.git-cliff.outputs.changelog }}
54
57
 
55
58
  - name: Allow other workflows to trigger on release
56
59
  env:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: oe-python-template-example
3
- Version: 0.1.10
3
+ Version: 0.1.12
4
4
  Summary: 🧠 Example project scaffolded and kept up to date with OE Python Template (oe-python-template).
5
5
  Project-URL: Homepage, https://oe-python-template-example.readthedocs.io/en/latest/
6
6
  Project-URL: Documentation, https://oe-python-template-example.readthedocs.io/en/latest/
@@ -66,6 +66,8 @@ Description-Content-Type: text/markdown
66
66
  [![PyPI - Python Version](https://img.shields.io/pypi/pyversions/oe-python-template-example.svg?logo=python&color=204361&labelColor=1E2933)](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/blob/main/noxfile.py)
67
67
  [![CI](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/actions/workflows/test-and-report.yml/badge.svg)](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/actions/workflows/test-and-report.yml)
68
68
  [![Read the Docs](https://img.shields.io/readthedocs/oe-python-template-example)](https://oe-python-template-example.readthedocs.io/en/latest/)
69
+ [![CodeQL](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/actions/workflows/codeql.yml/badge.svg)](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/security/code-scanning)
70
+ [![Dependabot](https://img.shields.io/badge/dependabot-active-brightgreen?style=flat-square&logo=dependabot)](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/security/dependabot)
69
71
  [![Quality Gate](https://sonarcloud.io/api/project_badges/measure?project=helmut-hoffer-von-ankershoffen_oe-python-template-example&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=helmut-hoffer-von-ankershoffen_oe-python-template-example)
70
72
  [![Security](https://sonarcloud.io/api/project_badges/measure?project=helmut-hoffer-von-ankershoffen_oe-python-template-example&metric=security_rating)](https://sonarcloud.io/summary/new_code?id=helmut-hoffer-von-ankershoffen_oe-python-template-example)
71
73
  [![Maintainability](https://sonarcloud.io/api/project_badges/measure?project=helmut-hoffer-von-ankershoffen_oe-python-template-example&metric=sqale_rating)](https://sonarcloud.io/summary/new_code?id=helmut-hoffer-von-ankershoffen_oe-python-template-example)
@@ -145,7 +147,7 @@ git push
145
147
  Visit your GitHub repository and check the Actions tab. The CI workflow should fail at the SonarQube step,
146
148
  as this external service is not yet configured for our new repository.
147
149
 
148
- **Step 6**: Follow the [SERVICE_INSTRUCTIONS.md](instructions) to wire up
150
+ **Step 6**: Follow the [instructions](SERVICE_CONNECTIONS.md) to wire up
149
151
  external services such as Cloudcov, SonarQube Cloud, Read The Docs, Docker.io, GHCR.io and Streamlit Community Cloud.
150
152
 
151
153
  **Step 7**: Release the first versions
@@ -204,12 +206,15 @@ This project is designed with operational excellence in mind, using modern Pytho
204
206
  - [Simple Python script](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/blob/main/examples/script.py)
205
207
  - [Streamlit web application](https://oe-python-template-example.streamlit.app/) deployed on [Streamlit Community Cloud](https://streamlit.io/cloud)
206
208
  - [Jupyter](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/blob/main/examples/notebook.ipynb) and [Marimo](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/blob/main/examples/notebook.py) notebook
207
- * [Complete reference documenation](https://oe-python-template-example.readthedocs.io/en/latest/reference.html) on Read the Docs
209
+ * [Complete reference documentation](https://oe-python-template-example.readthedocs.io/en/latest/reference.html) on Read the Docs
208
210
  * [Transparent test coverage](https://app.codecov.io/gh/helmut-hoffer-von-ankershoffen/oe-python-template-example) including unit and E2E tests (reported on Codecov)
209
211
  * Matrix tested with [multiple python versions](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/blob/main/noxfile.py) to ensure compatibility (powered by [Nox](https://nox.thea.codes/en/stable/))
210
212
  * Compliant with modern linting and formatting standards (powered by [Ruff](https://github.com/astral-sh/ruff))
211
- * Up-to-date dependencies (monitored by [Renovate](https://github.com/renovatebot/renovate))
212
- * [A-grade code quality](https://sonarcloud.io/summary/new_code?id=helmut-hoffer-von-ankershoffen_oe-python-template-example) in security, maintainability, and reliability with low technical debt and low codesmell (verified by SonarQube)
213
+ * Up-to-date dependencies (monitored by [Renovate](https://github.com/renovatebot/renovate) and [GitHub Dependabot](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/security/dependabot))
214
+ * [A-grade code quality](https://sonarcloud.io/summary/new_code?id=helmut-hoffer-von-ankershoffen_oe-python-template-example) in security, maintainability, and reliability with low technical debt and codesmell (verified by SonarQube)
215
+ * Additional code security checks using [GitHub CodeQL](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/security/code-scanning)
216
+ * [Security Policy](SECURITY.md)
217
+ * [License](LICENSE) compliant with the Open Source Initiative (OSI)
213
218
  * 1-liner for installation and execution of command line interface (CLI) via [uv(x)](https://github.com/astral-sh/uv) or [Docker](https://hub.docker.com/r/helmuthva/oe-python-template-example/tags)
214
219
  * Setup for developing inside a [devcontainer](https://code.visualstudio.com/docs/devcontainers/containers) included (supports VSCode and GitHub Codespaces)
215
220
 
@@ -5,6 +5,8 @@
5
5
  [![PyPI - Python Version](https://img.shields.io/pypi/pyversions/oe-python-template-example.svg?logo=python&color=204361&labelColor=1E2933)](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/blob/main/noxfile.py)
6
6
  [![CI](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/actions/workflows/test-and-report.yml/badge.svg)](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/actions/workflows/test-and-report.yml)
7
7
  [![Read the Docs](https://img.shields.io/readthedocs/oe-python-template-example)](https://oe-python-template-example.readthedocs.io/en/latest/)
8
+ [![CodeQL](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/actions/workflows/codeql.yml/badge.svg)](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/security/code-scanning)
9
+ [![Dependabot](https://img.shields.io/badge/dependabot-active-brightgreen?style=flat-square&logo=dependabot)](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/security/dependabot)
8
10
  [![Quality Gate](https://sonarcloud.io/api/project_badges/measure?project=helmut-hoffer-von-ankershoffen_oe-python-template-example&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=helmut-hoffer-von-ankershoffen_oe-python-template-example)
9
11
  [![Security](https://sonarcloud.io/api/project_badges/measure?project=helmut-hoffer-von-ankershoffen_oe-python-template-example&metric=security_rating)](https://sonarcloud.io/summary/new_code?id=helmut-hoffer-von-ankershoffen_oe-python-template-example)
10
12
  [![Maintainability](https://sonarcloud.io/api/project_badges/measure?project=helmut-hoffer-von-ankershoffen_oe-python-template-example&metric=sqale_rating)](https://sonarcloud.io/summary/new_code?id=helmut-hoffer-von-ankershoffen_oe-python-template-example)
@@ -84,7 +86,7 @@ git push
84
86
  Visit your GitHub repository and check the Actions tab. The CI workflow should fail at the SonarQube step,
85
87
  as this external service is not yet configured for our new repository.
86
88
 
87
- **Step 6**: Follow the [SERVICE_INSTRUCTIONS.md](instructions) to wire up
89
+ **Step 6**: Follow the [instructions](SERVICE_CONNECTIONS.md) to wire up
88
90
  external services such as Cloudcov, SonarQube Cloud, Read The Docs, Docker.io, GHCR.io and Streamlit Community Cloud.
89
91
 
90
92
  **Step 7**: Release the first versions
@@ -143,12 +145,15 @@ This project is designed with operational excellence in mind, using modern Pytho
143
145
  - [Simple Python script](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/blob/main/examples/script.py)
144
146
  - [Streamlit web application](https://oe-python-template-example.streamlit.app/) deployed on [Streamlit Community Cloud](https://streamlit.io/cloud)
145
147
  - [Jupyter](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/blob/main/examples/notebook.ipynb) and [Marimo](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/blob/main/examples/notebook.py) notebook
146
- * [Complete reference documenation](https://oe-python-template-example.readthedocs.io/en/latest/reference.html) on Read the Docs
148
+ * [Complete reference documentation](https://oe-python-template-example.readthedocs.io/en/latest/reference.html) on Read the Docs
147
149
  * [Transparent test coverage](https://app.codecov.io/gh/helmut-hoffer-von-ankershoffen/oe-python-template-example) including unit and E2E tests (reported on Codecov)
148
150
  * Matrix tested with [multiple python versions](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/blob/main/noxfile.py) to ensure compatibility (powered by [Nox](https://nox.thea.codes/en/stable/))
149
151
  * Compliant with modern linting and formatting standards (powered by [Ruff](https://github.com/astral-sh/ruff))
150
- * Up-to-date dependencies (monitored by [Renovate](https://github.com/renovatebot/renovate))
151
- * [A-grade code quality](https://sonarcloud.io/summary/new_code?id=helmut-hoffer-von-ankershoffen_oe-python-template-example) in security, maintainability, and reliability with low technical debt and low codesmell (verified by SonarQube)
152
+ * Up-to-date dependencies (monitored by [Renovate](https://github.com/renovatebot/renovate) and [GitHub Dependabot](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/security/dependabot))
153
+ * [A-grade code quality](https://sonarcloud.io/summary/new_code?id=helmut-hoffer-von-ankershoffen_oe-python-template-example) in security, maintainability, and reliability with low technical debt and codesmell (verified by SonarQube)
154
+ * Additional code security checks using [GitHub CodeQL](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/security/code-scanning)
155
+ * [Security Policy](SECURITY.md)
156
+ * [License](LICENSE) compliant with the Open Source Initiative (OSI)
152
157
  * 1-liner for installation and execution of command line interface (CLI) via [uv(x)](https://github.com/astral-sh/uv) or [Docker](https://hub.docker.com/r/helmuthva/oe-python-template-example/tags)
153
158
  * Setup for developing inside a [devcontainer](https://code.visualstudio.com/docs/devcontainers/containers) included (supports VSCode and GitHub Codespaces)
154
159
 
@@ -20,23 +20,23 @@ OE Python Template Example employs several automated tools to continuously monit
20
20
 
21
21
  ### 1. Dependency Vulnerability Scanning
22
22
 
23
- - **Renovate Bot**: Automatically creates pull requests to update dependencies when new versions are available, with a focus on security patches.
24
- - **GitHub Dependabot**: Monitors dependencies for known vulnerabilities and automatically creates pull requests to update them when security issues are found.
25
- - **pip-audit**: Regularly scans Python dependencies for known vulnerabilities using data from the Python Advisory Database.
23
+ - **GitHub Dependabot**: Monitors dependencies for known vulnerabilities and automatically creates pull requests to update them when security issues are found. [Dependendabot alerts](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/security/dependabot) published.
24
+ - **Renovate Bot**: Automatically creates pull requests to update dependencies when new versions are available, with a focus on security patches. [Dependency Dashboard](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/issues) published.
25
+ - **pip-audit**: Regularly scans Python dependencies for known vulnerabilities using data from the Python Advisory Database. ```vulnerabilities.json``` published [per release](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/releases).
26
26
 
27
27
  ### 2. Dependency Compliance
28
28
 
29
- - **pip-licenses**: Exports the licenses of all dependencies to ensure compliance with licensing requirements and avoid using components with problematic licenses.
30
- - **cyclonedx-py**: Generates a Software Bill of Materials (SBOM) in SPDX format, listing all components and dependencies used in the project.
29
+ - **cyclonedx-py**: Generates a Software Bill of Materials (SBOM) in SPDX format, listing all components and dependencies used in the project. ```sbom.json``` (SPDX format) published [per release](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/releases).
30
+ - **pip-licenses**: Exports the licenses of all dependencies to ensure compliance with licensing requirements and avoid using components with problematic licenses. ```licenses.json``` and ```licenses-inverted.json``` published [per release](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/releases).
31
31
 
32
32
  ### 3. Static Code Analysis
33
33
 
34
- - **SonarQube**: Performs comprehensive static code analysis to detect code quality issues, security vulnerabilities, and bugs.
35
- - **GitHub CodeQL**: Analyzes code for common vulnerabilities and coding errors using GitHub's semantic code analysis engine.
34
+ - **GitHub CodeQL**: Analyzes code for common vulnerabilities and coding errors using GitHub's semantic code analysis engine. [Code scanning results](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/security/code-scanning) published.
35
+ - **SonarQube**: Performs comprehensive static code analysis to detect code quality issues, security vulnerabilities, and bugs. [Security hotspots](https://sonarcloud.io/project/security_hotspots?id=helmut-hoffer-von-ankershoffen_oe-python-template-example) published.
36
36
 
37
37
  ### 4. Secret Detection
38
-
39
- - **Yelp/detect-secrets**: Pre-commit hook and automated scanning to prevent accidental inclusion of secrets or sensitive information in the codebase.
38
+ - **GitHub Secret scanning**: Automatically scans for secrets in the codebase and alerts if any are found. [Secret scanning alerts](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/security/secret-scanning) published.
39
+ - **Yelp/detect-secrets**: Pre-commit hook and automated scanning to prevent accidental inclusion of secrets or sensitive information in commits. [Pre-Commit hook](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/blob/main/.pre-commit-config.yaml) published.
40
40
 
41
41
  ## Security Best Practices
42
42
 
@@ -61,6 +61,14 @@
61
61
  4. Select the oe-python-template-example repo, for "Main file path" select `examples/streamlit.py`, for App URL enter `oe-python-template-example`.streamlit.app. Click "Deploy"
62
62
  5. Goto https://oe-python-template-example.streamlit.app
63
63
 
64
+ ## GitHub repository settings
65
+
66
+ 1. Goto https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/settings/security_analysis
67
+ 2. Enable Private vulnerability reporting
68
+ 3. Enable Dependabot alerts
69
+ 4. Enable Dependabot security updates
70
+ 5. CodeQL analyis will be automatically set up via a GitHub action
71
+
64
72
  ## Polishing GitHub repository
65
73
 
66
74
  1. Goto https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example
@@ -0,0 +1 @@
1
+ 0.1.12
@@ -5,6 +5,8 @@
5
5
  [![PyPI - Python Version](https://img.shields.io/pypi/pyversions/oe-python-template-example.svg?logo=python&color=204361&labelColor=1E2933)](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/blob/main/noxfile.py)
6
6
  [![CI](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/actions/workflows/test-and-report.yml/badge.svg)](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/actions/workflows/test-and-report.yml)
7
7
  [![Read the Docs](https://img.shields.io/readthedocs/oe-python-template-example)](https://oe-python-template-example.readthedocs.io/en/latest/)
8
+ [![CodeQL](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/actions/workflows/codeql.yml/badge.svg)](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/security/code-scanning)
9
+ [![Dependabot](https://img.shields.io/badge/dependabot-active-brightgreen?style=flat-square&logo=dependabot)](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/security/dependabot)
8
10
  [![Quality Gate](https://sonarcloud.io/api/project_badges/measure?project=helmut-hoffer-von-ankershoffen_oe-python-template-example&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=helmut-hoffer-von-ankershoffen_oe-python-template-example)
9
11
  [![Security](https://sonarcloud.io/api/project_badges/measure?project=helmut-hoffer-von-ankershoffen_oe-python-template-example&metric=security_rating)](https://sonarcloud.io/summary/new_code?id=helmut-hoffer-von-ankershoffen_oe-python-template-example)
10
12
  [![Maintainability](https://sonarcloud.io/api/project_badges/measure?project=helmut-hoffer-von-ankershoffen_oe-python-template-example&metric=sqale_rating)](https://sonarcloud.io/summary/new_code?id=helmut-hoffer-von-ankershoffen_oe-python-template-example)
@@ -45,7 +45,7 @@ git push
45
45
  Visit your GitHub repository and check the Actions tab. The CI workflow should fail at the SonarQube step,
46
46
  as this external service is not yet configured for our new repository.
47
47
 
48
- **Step 6**: Follow the [SERVICE_INSTRUCTIONS.md](instructions) to wire up
48
+ **Step 6**: Follow the [instructions](SERVICE_CONNECTIONS.md) to wire up
49
49
  external services such as Cloudcov, SonarQube Cloud, Read The Docs, Docker.io, GHCR.io and Streamlit Community Cloud.
50
50
 
51
51
  **Step 7**: Release the first versions
@@ -104,12 +104,15 @@ This project is designed with operational excellence in mind, using modern Pytho
104
104
  - [Simple Python script](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/blob/main/examples/script.py)
105
105
  - [Streamlit web application](https://oe-python-template-example.streamlit.app/) deployed on [Streamlit Community Cloud](https://streamlit.io/cloud)
106
106
  - [Jupyter](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/blob/main/examples/notebook.ipynb) and [Marimo](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/blob/main/examples/notebook.py) notebook
107
- * [Complete reference documenation](https://oe-python-template-example.readthedocs.io/en/latest/reference.html) on Read the Docs
107
+ * [Complete reference documentation](https://oe-python-template-example.readthedocs.io/en/latest/reference.html) on Read the Docs
108
108
  * [Transparent test coverage](https://app.codecov.io/gh/helmut-hoffer-von-ankershoffen/oe-python-template-example) including unit and E2E tests (reported on Codecov)
109
109
  * Matrix tested with [multiple python versions](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/blob/main/noxfile.py) to ensure compatibility (powered by [Nox](https://nox.thea.codes/en/stable/))
110
110
  * Compliant with modern linting and formatting standards (powered by [Ruff](https://github.com/astral-sh/ruff))
111
- * Up-to-date dependencies (monitored by [Renovate](https://github.com/renovatebot/renovate))
112
- * [A-grade code quality](https://sonarcloud.io/summary/new_code?id=helmut-hoffer-von-ankershoffen_oe-python-template-example) in security, maintainability, and reliability with low technical debt and low codesmell (verified by SonarQube)
111
+ * Up-to-date dependencies (monitored by [Renovate](https://github.com/renovatebot/renovate) and [GitHub Dependabot](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/security/dependabot))
112
+ * [A-grade code quality](https://sonarcloud.io/summary/new_code?id=helmut-hoffer-von-ankershoffen_oe-python-template-example) in security, maintainability, and reliability with low technical debt and codesmell (verified by SonarQube)
113
+ * Additional code security checks using [GitHub CodeQL](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/security/code-scanning)
114
+ * [Security Policy](SECURITY.md)
115
+ * [License](LICENSE) compliant with the Open Source Initiative (OSI)
113
116
  * 1-liner for installation and execution of command line interface (CLI) via [uv(x)](https://github.com/astral-sh/uv) or [Docker](https://hub.docker.com/r/helmuthva/oe-python-template-example/tags)
114
117
  * Setup for developing inside a [devcontainer](https://code.visualstudio.com/docs/devcontainers/containers) included (supports VSCode and GitHub Codespaces)
115
118
 
@@ -29,7 +29,7 @@ extensions = [
29
29
  project = "oe-python-template-example"
30
30
  author = "Helmut Hoffer von Ankershoffen"
31
31
  copyright = f" (c) 2025-{datetime.now(UTC).year}, {author}" # noqa: A001
32
- version = "0.1.10"
32
+ version = "0.1.12"
33
33
  release = version
34
34
  github_username = "helmut-hoffer-von-ankershoffen"
35
35
  github_repository = "oe-python-template-example"
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "oe-python-template-example"
3
- version = "0.1.10"
3
+ version = "0.1.12"
4
4
  description = "🧠 Example project scaffolded and kept up to date with OE Python Template (oe-python-template)."
5
5
  readme = "README.md"
6
6
  authors = [
@@ -113,7 +113,7 @@ dev = [
113
113
  "pytest-env>=1.1.5",
114
114
  "pytest-regressions>=2.7.0",
115
115
  "pytest-xdist[psutil]>=3.6.1",
116
- "ruff>=0.9.10",
116
+ "ruff>=0.10.0",
117
117
  "sphinx>=8.2.3",
118
118
  "sphinx-autobuild>=2024.10.3",
119
119
  "sphinx-copybutton>=0.5.2",
@@ -242,7 +242,7 @@ source = ["src/"]
242
242
 
243
243
 
244
244
  [tool.bumpversion]
245
- current_version = "0.1.10"
245
+ current_version = "0.1.12"
246
246
  parse = "(?P<major>\\d+)\\.(?P<minor>\\d+)\\.(?P<patch>\\d+)"
247
247
  serialize = ["{major}.{minor}.{patch}"]
248
248
  search = "{current_version}"
@@ -1,6 +1,6 @@
1
1
  sonar.projectKey=helmut-hoffer-von-ankershoffen_oe-python-template-example
2
2
  sonar.organization=helmut-hoffer-von-ankershoffen
3
- sonar.projectVersion=0.1.10
3
+ sonar.projectVersion=0.1.12
4
4
  sonar.projectDescription=🧠 Example project scaffolded and kept up to date with OE Python Template (oe-python-template).
5
5
  sonar.links.homepage=https://oe-python-template-example.readthedocs.io/en/latest/
6
6
  sonar.links.scm=https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example
@@ -2075,7 +2075,7 @@ wheels = [
2075
2075
 
2076
2076
  [[package]]
2077
2077
  name = "oe-python-template-example"
2078
- version = "0.1.10"
2078
+ version = "0.1.12"
2079
2079
  source = { editable = "." }
2080
2080
  dependencies = [
2081
2081
  { name = "fastapi", extra = ["all", "standard"] },
@@ -2168,7 +2168,7 @@ dev = [
2168
2168
  { name = "pytest-env", specifier = ">=1.1.5" },
2169
2169
  { name = "pytest-regressions", specifier = ">=2.7.0" },
2170
2170
  { name = "pytest-xdist", extras = ["psutil"], specifier = ">=3.6.1" },
2171
- { name = "ruff", specifier = ">=0.9.10" },
2171
+ { name = "ruff", specifier = ">=0.10.0" },
2172
2172
  { name = "sphinx", specifier = ">=8.2.3" },
2173
2173
  { name = "sphinx-autobuild", specifier = ">=2024.10.3" },
2174
2174
  { name = "sphinx-copybutton", specifier = ">=0.5.2" },
@@ -3310,27 +3310,27 @@ wheels = [
3310
3310
 
3311
3311
  [[package]]
3312
3312
  name = "ruff"
3313
- version = "0.9.10"
3314
- source = { registry = "https://pypi.org/simple" }
3315
- sdist = { url = "https://files.pythonhosted.org/packages/20/8e/fafaa6f15c332e73425d9c44ada85360501045d5ab0b81400076aff27cf6/ruff-0.9.10.tar.gz", hash = "sha256:9bacb735d7bada9cfb0f2c227d3658fc443d90a727b47f206fb33f52f3c0eac7", size = 3759776 }
3316
- wheels = [
3317
- { url = "https://files.pythonhosted.org/packages/73/b2/af7c2cc9e438cbc19fafeec4f20bfcd72165460fe75b2b6e9a0958c8c62b/ruff-0.9.10-py3-none-linux_armv6l.whl", hash = "sha256:eb4d25532cfd9fe461acc83498361ec2e2252795b4f40b17e80692814329e42d", size = 10049494 },
3318
- { url = "https://files.pythonhosted.org/packages/6d/12/03f6dfa1b95ddd47e6969f0225d60d9d7437c91938a310835feb27927ca0/ruff-0.9.10-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:188a6638dab1aa9bb6228a7302387b2c9954e455fb25d6b4470cb0641d16759d", size = 10853584 },
3319
- { url = "https://files.pythonhosted.org/packages/02/49/1c79e0906b6ff551fb0894168763f705bf980864739572b2815ecd3c9df0/ruff-0.9.10-py3-none-macosx_11_0_arm64.whl", hash = "sha256:5284dcac6b9dbc2fcb71fdfc26a217b2ca4ede6ccd57476f52a587451ebe450d", size = 10155692 },
3320
- { url = "https://files.pythonhosted.org/packages/5b/01/85e8082e41585e0e1ceb11e41c054e9e36fed45f4b210991052d8a75089f/ruff-0.9.10-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:47678f39fa2a3da62724851107f438c8229a3470f533894b5568a39b40029c0c", size = 10369760 },
3321
- { url = "https://files.pythonhosted.org/packages/a1/90/0bc60bd4e5db051f12445046d0c85cc2c617095c0904f1aa81067dc64aea/ruff-0.9.10-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:99713a6e2766b7a17147b309e8c915b32b07a25c9efd12ada79f217c9c778b3e", size = 9912196 },
3322
- { url = "https://files.pythonhosted.org/packages/66/ea/0b7e8c42b1ec608033c4d5a02939c82097ddcb0b3e393e4238584b7054ab/ruff-0.9.10-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:524ee184d92f7c7304aa568e2db20f50c32d1d0caa235d8ddf10497566ea1a12", size = 11434985 },
3323
- { url = "https://files.pythonhosted.org/packages/d5/86/3171d1eff893db4f91755175a6e1163c5887be1f1e2f4f6c0c59527c2bfd/ruff-0.9.10-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:df92aeac30af821f9acf819fc01b4afc3dfb829d2782884f8739fb52a8119a16", size = 12155842 },
3324
- { url = "https://files.pythonhosted.org/packages/89/9e/700ca289f172a38eb0bca752056d0a42637fa17b81649b9331786cb791d7/ruff-0.9.10-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de42e4edc296f520bb84954eb992a07a0ec5a02fecb834498415908469854a52", size = 11613804 },
3325
- { url = "https://files.pythonhosted.org/packages/f2/92/648020b3b5db180f41a931a68b1c8575cca3e63cec86fd26807422a0dbad/ruff-0.9.10-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d257f95b65806104b6b1ffca0ea53f4ef98454036df65b1eda3693534813ecd1", size = 13823776 },
3326
- { url = "https://files.pythonhosted.org/packages/5e/a6/cc472161cd04d30a09d5c90698696b70c169eeba2c41030344194242db45/ruff-0.9.10-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b60dec7201c0b10d6d11be00e8f2dbb6f40ef1828ee75ed739923799513db24c", size = 11302673 },
3327
- { url = "https://files.pythonhosted.org/packages/6c/db/d31c361c4025b1b9102b4d032c70a69adb9ee6fde093f6c3bf29f831c85c/ruff-0.9.10-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:d838b60007da7a39c046fcdd317293d10b845001f38bcb55ba766c3875b01e43", size = 10235358 },
3328
- { url = "https://files.pythonhosted.org/packages/d1/86/d6374e24a14d4d93ebe120f45edd82ad7dcf3ef999ffc92b197d81cdc2a5/ruff-0.9.10-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:ccaf903108b899beb8e09a63ffae5869057ab649c1e9231c05ae354ebc62066c", size = 9886177 },
3329
- { url = "https://files.pythonhosted.org/packages/00/62/a61691f6eaaac1e945a1f3f59f1eea9a218513139d5b6c2b8f88b43b5b8f/ruff-0.9.10-py3-none-musllinux_1_2_i686.whl", hash = "sha256:f9567d135265d46e59d62dc60c0bfad10e9a6822e231f5b24032dba5a55be6b5", size = 10864747 },
3330
- { url = "https://files.pythonhosted.org/packages/ee/94/2c7065e1d92a8a8a46d46d9c3cf07b0aa7e0a1e0153d74baa5e6620b4102/ruff-0.9.10-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:5f202f0d93738c28a89f8ed9eaba01b7be339e5d8d642c994347eaa81c6d75b8", size = 11360441 },
3331
- { url = "https://files.pythonhosted.org/packages/a7/8f/1f545ea6f9fcd7bf4368551fb91d2064d8f0577b3079bb3f0ae5779fb773/ruff-0.9.10-py3-none-win32.whl", hash = "sha256:bfb834e87c916521ce46b1788fbb8484966e5113c02df216680102e9eb960029", size = 10247401 },
3332
- { url = "https://files.pythonhosted.org/packages/4f/18/fb703603ab108e5c165f52f5b86ee2aa9be43bb781703ec87c66a5f5d604/ruff-0.9.10-py3-none-win_amd64.whl", hash = "sha256:f2160eeef3031bf4b17df74e307d4c5fb689a6f3a26a2de3f7ef4044e3c484f1", size = 11366360 },
3333
- { url = "https://files.pythonhosted.org/packages/35/85/338e603dc68e7d9994d5d84f24adbf69bae760ba5efd3e20f5ff2cec18da/ruff-0.9.10-py3-none-win_arm64.whl", hash = "sha256:5fd804c0327a5e5ea26615550e706942f348b197d5475ff34c19733aee4b2e69", size = 10436892 },
3313
+ version = "0.10.0"
3314
+ source = { registry = "https://pypi.org/simple" }
3315
+ sdist = { url = "https://files.pythonhosted.org/packages/4c/ec/9c59d2956566517c98ac8267554f4eaceafb2a19710a429368518b7fab43/ruff-0.10.0.tar.gz", hash = "sha256:fa1554e18deaf8aa097dbcfeafaf38b17a2a1e98fdc18f50e62e8a836abee392", size = 3789921 }
3316
+ wheels = [
3317
+ { url = "https://files.pythonhosted.org/packages/bf/3f/742afe91b43def2a75990b293c676355576c0ff9cdbcf4249f78fa592544/ruff-0.10.0-py3-none-linux_armv6l.whl", hash = "sha256:46a2aa0eaae5048e5f804f0be9489d8a661633e23277b7293089e70d5c1a35c4", size = 10078369 },
3318
+ { url = "https://files.pythonhosted.org/packages/8d/a0/8696fb4862e82f7b40bbbc2917137594b22826cc62d77278a91391507514/ruff-0.10.0-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:775a6bc61af9dd0a2e1763406522a137e62aabb743d8b43ed95f019cdd1526c7", size = 10876912 },
3319
+ { url = "https://files.pythonhosted.org/packages/40/aa/0d48b7b7d7a1f168bb8fd893ed559d633c7d68c4a8ef9b996f0c2bd07aca/ruff-0.10.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:8b03e6fcd39d20f0004f9956f0ed5eadc404d3a299f9d9286323884e3b663730", size = 10229962 },
3320
+ { url = "https://files.pythonhosted.org/packages/21/de/861ced2f75b045d8cfc038d68961d8ac117344df1f43a11abdd05bf7991b/ruff-0.10.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:621101d1af80248827f2409a78c8177c8319986a57b4663613b9c72f8617bfcd", size = 10404627 },
3321
+ { url = "https://files.pythonhosted.org/packages/21/69/666e0b840191c3ce433962c0d05fc0f6800afe259ea5d230cc731655d8e2/ruff-0.10.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e2dfe85cb6bfbd4259801e7d4982f2a72bdbd5749dc73a09d68a6dbf77f2209a", size = 9939383 },
3322
+ { url = "https://files.pythonhosted.org/packages/76/bf/34a2adc58092c99cdfa9f1303acd82d840d56412022e477e2ab20c261d2d/ruff-0.10.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:43ac3879a20c22fdc57e559f0bb27f0c71828656841d0b42d3505b1e5b3a83c8", size = 11492269 },
3323
+ { url = "https://files.pythonhosted.org/packages/31/3d/f7ccfcf69f15948623b190feea9d411d5029ae39725fcc078f8d43bd07a6/ruff-0.10.0-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:ef5e3aac421bbc62f8a7aab21edd49a359ed42205f7a5091a74386bca1efa293", size = 12186939 },
3324
+ { url = "https://files.pythonhosted.org/packages/6e/3e/c557c0abfdea85c7d238a3cb238c73e7b6d17c30a584234c4fd8fe2cafb6/ruff-0.10.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9f4f62d7fac8b748fce67ad308116b4d4cc1a9f964b4804fc5408fbd06e13ba9", size = 11655896 },
3325
+ { url = "https://files.pythonhosted.org/packages/3b/8e/3bfa110f37e5192eb3943f14943d05fbb9a76fea380aa87655e6f6276a54/ruff-0.10.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:02f9f6205c5b0d626f98da01a0e75b724a64c21c554bba24b12522c9e9ba6a04", size = 13885502 },
3326
+ { url = "https://files.pythonhosted.org/packages/51/4a/22cdab59b5563dd7f4c504d0f1e6bb25fc800a5a057395bc24f8ff3a85b2/ruff-0.10.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:46a97f3d55f68464c48d1e929a8582c7e5bb80ac73336bbc7b0da894d8e6cd9e", size = 11344767 },
3327
+ { url = "https://files.pythonhosted.org/packages/3d/0f/8f85de2ac565f82f47c6d8fb7ae04383e6300560f2d1b91c1268ff91e507/ruff-0.10.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:a0b811197d0dc96c13d610f8cfdc56030b405bcff5c2f10eab187b329da0ca4a", size = 10300331 },
3328
+ { url = "https://files.pythonhosted.org/packages/90/4a/b337df327832cb30bd8607e8d1fdf1b6b5ca228307d5008dd49028fb66ae/ruff-0.10.0-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:a13a3fda0870c1c964b47ff5d73805ae80d2a9de93ee2d185d453b8fddf85a84", size = 9926551 },
3329
+ { url = "https://files.pythonhosted.org/packages/d7/e9/141233730b85675ac806c4b62f70516bd9c0aae8a55823f3a6589ed411be/ruff-0.10.0-py3-none-musllinux_1_2_i686.whl", hash = "sha256:6ceb8d9f062e90ddcbad929f6136edf764bbf6411420a07e8357602ea28cd99f", size = 10925061 },
3330
+ { url = "https://files.pythonhosted.org/packages/24/09/02987935b55c2d353a226ac1b4f9718830e2e195834929f46c07eeede746/ruff-0.10.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:c41d07d573617ed2f287ea892af2446fd8a8d877481e8e1ba6928e020665d240", size = 11394949 },
3331
+ { url = "https://files.pythonhosted.org/packages/d6/ec/054f9879fb6f4122d43ffe5c9f88c8c323a9cd14220d5c813aea5805e02c/ruff-0.10.0-py3-none-win32.whl", hash = "sha256:76e2de0cbdd587e373cd3b4050d2c45babdd7014c1888a6f121c29525c748a15", size = 10272077 },
3332
+ { url = "https://files.pythonhosted.org/packages/6e/49/915d8682f24645b904fe6a1aac36101464fc814923fdf293c1388dc5533c/ruff-0.10.0-py3-none-win_amd64.whl", hash = "sha256:f943acdecdcc6786a8d1dad455dd9f94e6d57ccc115be4993f9b52ef8316027a", size = 11393300 },
3333
+ { url = "https://files.pythonhosted.org/packages/82/ed/5c59941634c9026ceeccc7c119f23f4356f09aafd28c15c1bc734ac66b01/ruff-0.10.0-py3-none-win_arm64.whl", hash = "sha256:935a943bdbd9ff0685acd80d484ea91088e27617537b5f7ef8907187d19d28d0", size = 10510133 },
3334
3334
  ]
3335
3335
 
3336
3336
  [[package]]
@@ -1 +0,0 @@
1
- 0.1.10