oe-python-template-example 0.2.2__tar.gz → 0.2.4__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 (98) hide show
  1. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/.copier-answers.yml +1 -1
  2. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/.github/workflows/codeql.yml +1 -1
  3. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/.github/workflows/docker-image-build-publish.yml +8 -8
  4. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/.github/workflows/package-build-publish-release.yml +4 -4
  5. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/.github/workflows/test-and-report.yml +7 -7
  6. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/CONTRIBUTING.md +10 -2
  7. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/PKG-INFO +2 -2
  8. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/README.md +1 -1
  9. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/SECURITY.md +1 -1
  10. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/SERVICE_CONNECTIONS.md +1 -1
  11. oe_python_template_example-0.2.4/VERSION +1 -0
  12. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/docs/partials/README_header.md +1 -1
  13. oe_python_template_example-0.2.4/docs/source/_static/openapi_v1.yaml +14 -0
  14. oe_python_template_example-0.2.4/docs/source/api_v1.rst +9 -0
  15. oe_python_template_example-0.2.4/docs/source/api_v2.rst +9 -0
  16. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/docs/source/conf.py +1 -1
  17. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/docs/source/main.rst +0 -1
  18. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/examples/notebook.py +1 -1
  19. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/n +1 -0
  20. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/noxfile.py +35 -0
  21. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/pyproject.toml +2 -2
  22. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/sonar-project.properties +1 -1
  23. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/uv.lock +1 -1
  24. oe_python_template_example-0.2.2/VERSION +0 -1
  25. oe_python_template_example-0.2.2/docs/source/_static/openapi_v1.yaml +0 -34
  26. oe_python_template_example-0.2.2/docs/source/api_v1.rst +0 -11
  27. oe_python_template_example-0.2.2/docs/source/api_v2.rst +0 -11
  28. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/.act-env-public +0 -0
  29. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/.devcontainer/Dockerfile +0 -0
  30. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/.devcontainer/devcontainer.json +0 -0
  31. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/.devcontainer/onCreateCommand +0 -0
  32. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/.devcontainer/postAttachCommand +0 -0
  33. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/.devcontainer/postCreateCommand +0 -0
  34. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/.env.example +0 -0
  35. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/.github/copilot-instructions.md +0 -0
  36. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/.github/dependabot.yml +0 -0
  37. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/.gitignore +0 -0
  38. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/.pre-commit-config.yaml +0 -0
  39. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/.python-version +0 -0
  40. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/.readthedocs.yml +0 -0
  41. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/.secrets.baseline +0 -0
  42. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/.vscode/extensions.json +0 -0
  43. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/.vscode/settings.json +0 -0
  44. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/CHANGELOG.md +0 -0
  45. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/CODEOWNERS +0 -0
  46. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/CODE_STYLE.md +0 -0
  47. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/Dockerfile +0 -0
  48. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/LICENSE +0 -0
  49. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/RELEASE_NOTES.md +0 -0
  50. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/bin/git-cliff +0 -0
  51. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/codecov.yml +0 -0
  52. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/compose.yaml +0 -0
  53. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/docs/Makefile +0 -0
  54. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/docs/make.bat +0 -0
  55. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/docs/partials/README_footer.md +0 -0
  56. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/docs/partials/README_main.md +0 -0
  57. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/docs/source/_static/.keep +0 -0
  58. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/docs/source/_static/openapi.json +0 -0
  59. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/docs/source/_static/openapi.yaml +0 -0
  60. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/docs/source/_static/openapi_v1.json +0 -0
  61. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/docs/source/_static/openapi_v2.json +0 -0
  62. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/docs/source/_static/openapi_v2.yaml +0 -0
  63. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/docs/source/code-style.rst +0 -0
  64. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/docs/source/contributing.rst +0 -0
  65. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/docs/source/index.rst +0 -0
  66. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/docs/source/reference.rst +0 -0
  67. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/docs/source/release-notes.rst +0 -0
  68. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/docs/source/security.rst +0 -0
  69. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/examples/__init__.py +0 -0
  70. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/examples/notebook.ipynb +0 -0
  71. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/examples/script.py +0 -0
  72. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/examples/streamlit.py +0 -0
  73. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/git-cliff-2.7.0/CHANGELOG.md +0 -0
  74. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/git-cliff-2.7.0/LICENSE-APACHE +0 -0
  75. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/git-cliff-2.7.0/LICENSE-MIT +0 -0
  76. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/git-cliff-2.7.0/README.md +0 -0
  77. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/git-cliff-2.7.0/completions/_git-cliff +0 -0
  78. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/git-cliff-2.7.0/completions/_git-cliff.ps1 +0 -0
  79. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/git-cliff-2.7.0/completions/git-cliff.bash +0 -0
  80. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/git-cliff-2.7.0/completions/git-cliff.elv +0 -0
  81. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/git-cliff-2.7.0/completions/git-cliff.fish +0 -0
  82. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/git-cliff-2.7.0/git-cliff-completions +0 -0
  83. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/git-cliff-2.7.0/git-cliff-mangen +0 -0
  84. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/git-cliff-2.7.0/man/git-cliff.1 +0 -0
  85. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/git-cliff-2.7.0-x86_64-unknown-linux-gnu.tar.gz +0 -0
  86. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/github-action-run +0 -0
  87. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/logo.png +0 -0
  88. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/renovate.json +0 -0
  89. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/reports/.keep +0 -0
  90. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/src/oe_python_template_example/__init__.py +0 -0
  91. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/src/oe_python_template_example/api.py +0 -0
  92. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/src/oe_python_template_example/cli.py +0 -0
  93. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/src/oe_python_template_example/constants.py +0 -0
  94. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/src/oe_python_template_example/service.py +0 -0
  95. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/tests/__init__.py +0 -0
  96. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/tests/api_test.py +0 -0
  97. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/tests/cli_test.py +0 -0
  98. {oe_python_template_example-0.2.2 → oe_python_template_example-0.2.4}/tests/fixtures/.keep +0 -0
@@ -1,4 +1,4 @@
1
- _commit: v0.6.14
1
+ _commit: v0.6.20
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
@@ -76,7 +76,7 @@ jobs:
76
76
  # Prefix the list here with "+" to use these queries and those in the config file.
77
77
 
78
78
  # For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
79
- # queries: security-extended,security-and-quality
79
+ queries: security-extended,security-and-quality
80
80
 
81
81
  # If the analyze step fails for one of the languages you are analyzing with
82
82
  # "We were unable to automatically build your code", modify the matrix above
@@ -21,18 +21,18 @@ jobs:
21
21
  id-token: write
22
22
  steps:
23
23
  - name: Checkout
24
- uses: actions/checkout@v4
24
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
25
25
 
26
26
  - name: Set up QEMU
27
- uses: docker/setup-qemu-action@v3
27
+ uses: docker/setup-qemu-action@29109295f81e9208d7d86ff1c6c12d2833863392 # v3.6.0
28
28
 
29
29
  - name: Set up Docker Buildx
30
- uses: docker/setup-buildx-action@v3
30
+ uses: docker/setup-buildx-action@b5ca514318bd6ebac0fb2aedd5d36ec1b5c232a2 # v3.10.0
31
31
 
32
32
 
33
33
 
34
34
  - name: Log in to Docker Hub
35
- uses: docker/login-action@v3
35
+ uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3.4.0
36
36
  with:
37
37
 
38
38
  username: ${{ secrets.DOCKER_USERNAME }}
@@ -41,7 +41,7 @@ jobs:
41
41
 
42
42
 
43
43
  - name: Log in to GitHub container registry
44
- uses: docker/login-action@v3
44
+ uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3.4.0
45
45
  with:
46
46
  registry: ghcr.io
47
47
 
@@ -51,7 +51,7 @@ jobs:
51
51
 
52
52
  - name: Extract metadata (tags, labels) for Docker
53
53
  id: meta
54
- uses: docker/metadata-action@v5
54
+ uses: docker/metadata-action@902fa8ec7d6ecbf8d84d538b9b233a880e428804 # v5.7.0
55
55
  with:
56
56
 
57
57
 
@@ -73,7 +73,7 @@ jobs:
73
73
 
74
74
  - name: Build and push Docker image
75
75
  id: push
76
- uses: docker/build-push-action@v6
76
+ uses: docker/build-push-action@471d1dc4e07e5cdedd4c2171150001c434f0b7a4 # v6.15.0
77
77
  with:
78
78
  context: .
79
79
  file: ./Dockerfile
@@ -86,7 +86,7 @@ jobs:
86
86
 
87
87
 
88
88
  - name: Generate artifact attestation
89
- uses: actions/attest-build-provenance@v2
89
+ uses: actions/attest-build-provenance@c074443f1aee8d4aeeae555aebba3282517141b2 # v2.2.3
90
90
  with:
91
91
  subject-name: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
92
92
  subject-digest: ${{ steps.push.outputs.digest }}
@@ -15,12 +15,12 @@ jobs:
15
15
  packages: read
16
16
  steps:
17
17
  - name: Checkout
18
- uses: actions/checkout@v4
18
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
19
19
  with:
20
20
  fetch-depth: 0
21
21
 
22
22
  - name: Generate release notes
23
- uses: orhun/git-cliff-action@v4
23
+ uses: orhun/git-cliff-action@4a4a951bc43fafe41cd2348d181853f52356bee7 # v4.4.2
24
24
  id: git-cliff
25
25
  with:
26
26
  config: pyproject.toml
@@ -34,9 +34,9 @@ jobs:
34
34
 
35
35
 
36
36
  - name: Install uv
37
- uses: astral-sh/setup-uv@v5
37
+ uses: astral-sh/setup-uv@f94ec6bedd8674c4426838e6b50417d36b6ab231 # v5.3.1
38
38
  with:
39
- version: "0.5.9"
39
+ version: "0.6.7"
40
40
  cache-dependency-glob: uv.lock
41
41
  enable-cache: true
42
42
 
@@ -17,7 +17,7 @@ jobs:
17
17
  id-token: write
18
18
  steps:
19
19
  - name: Checkout
20
- uses: actions/checkout@v4
20
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
21
21
  with:
22
22
  fetch-depth: 0
23
23
 
@@ -30,7 +30,7 @@ jobs:
30
30
  sudo apt-get install -y curl jq xsltproc gnupg2 libcairo2
31
31
 
32
32
  - name: Install uv (python package manager)
33
- uses: astral-sh/setup-uv@v5
33
+ uses: astral-sh/setup-uv@f94ec6bedd8674c4426838e6b50417d36b6ab231 # v5.3.1
34
34
  with:
35
35
  version: "0.5.9"
36
36
  enable-cache: true
@@ -58,7 +58,7 @@ jobs:
58
58
  echo "Development build - Current version in pyproject.toml: $TOML_VERSION"
59
59
 
60
60
  - name: Create .env file
61
- uses: SpicyPizza/create-envfile@v2.0
61
+ uses: SpicyPizza/create-envfile@ace6d4f5d7802b600276c23ca417e669f1a06f6f # v2.0.3
62
62
  with:
63
63
  envkey_ENV_KEY: "ENV_VALUE"
64
64
  fail_on_empty: true
@@ -80,7 +80,7 @@ jobs:
80
80
  uv run nox
81
81
 
82
82
  - name: Upload test results
83
- uses: actions/upload-artifact@v4
83
+ uses: actions/upload-artifact@4cec3d8aa04e39d1a68397de0c4cd6fb9dce8ec1 # v4.6.1
84
84
  if: ${{ always() && (env.GITHUB_WORKFLOW_RUNTIME != 'ACT') }}
85
85
  with:
86
86
  name: test-results
@@ -94,7 +94,7 @@ jobs:
94
94
  retention-days: 30
95
95
 
96
96
  - name: Upload coverage reports to Codecov
97
- uses: codecov/codecov-action@v5
97
+ uses: codecov/codecov-action@0565863a31f2c772f9f0395002a31e3f06189574 # v5.4.0
98
98
  if: ${{ !cancelled() && (env.GITHUB_WORKFLOW_RUNTIME != 'ACT') }}
99
99
  with:
100
100
  token: ${{ secrets.CODECOV_TOKEN }}
@@ -102,12 +102,12 @@ jobs:
102
102
 
103
103
  - name: Upload test results to Codecov
104
104
  if: ${{ !cancelled() && (env.GITHUB_WORKFLOW_RUNTIME != 'ACT') }}
105
- uses: codecov/test-results-action@v1
105
+ uses: codecov/test-results-action@f2dba722c67b86c6caa034178c6e4d35335f6706 # v1.1.0
106
106
  with:
107
107
  token: ${{ secrets.CODECOV_TOKEN }}
108
108
  - name: SonarQube Scan
109
109
  if: ${{ !cancelled() && (env.GITHUB_WORKFLOW_RUNTIME != 'ACT') }}
110
- uses: SonarSource/sonarqube-scan-action@v5
110
+ uses: SonarSource/sonarqube-scan-action@0303d6b62e310685c0e34d0b9cde218036885c4d # v5.0.0
111
111
  env:
112
112
  GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
113
113
  SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
@@ -20,6 +20,7 @@ fi
20
20
  which jq &> /dev/null || brew install jq
21
21
  which xmllint &> /dev/null || brew install xmllint
22
22
  which act &> /dev/null || brew install act
23
+ which pinact &> /dev/null || brew install pinact
23
24
  uv run pre-commit install # install pre-commit hooks, see https://pre-commit.com/
24
25
  ```
25
26
 
@@ -88,9 +89,10 @@ uv run nox -s test # run tests
88
89
  uv run nox -s lint # run formatting and linting
89
90
  uv run nox -s audit # run security and license audit, inc. sbom generation
90
91
  uv run nox -s docs # build documentation, output in docs/build/html
92
+ uv run nox -s docs_pdf # locally build pdf manual to docs/build/latex/oe-python-template-example.pdf
91
93
  ```
92
94
 
93
- As a shortcut, you can run build steps using `./n`:
95
+ As a shortcut, you can run build steps using `./n`, e.g.
94
96
 
95
97
  ```shell
96
98
  ./n test
@@ -129,9 +131,15 @@ docker build -t oe-python-template-example .
129
131
  docker run --env THE_VAR=THE_VALUE oe-python-template-example --help
130
132
  ```
131
133
 
134
+ ### Pinning github actions
135
+
136
+ ```shell
137
+ pinact run # See https://dev.to/suzukishunsuke/pin-github-actions-to-a-full-length-commit-sha-for-security-2n7p
138
+ ```
139
+
132
140
  ### Copier
133
141
 
134
- Update scaffold from template
142
+ Update from template
135
143
 
136
144
  ```shell
137
145
  uv run nox -s update_from_template
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: oe-python-template-example
3
- Version: 0.2.2
3
+ Version: 0.2.4
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/
@@ -76,7 +76,7 @@ Description-Content-Type: text/markdown
76
76
  [![Code Smells](https://sonarcloud.io/api/project_badges/measure?project=helmut-hoffer-von-ankershoffen_oe-python-template-example&metric=code_smells)](https://sonarcloud.io/summary/new_code?id=helmut-hoffer-von-ankershoffen_oe-python-template-example)
77
77
  [![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)
78
78
  [![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)
79
- [![Renovate enabled](https://img.shields.io/badge/renovate-enabled-brightgreen.svg)](https://renovatebot.com/)
79
+ [![Renovate enabled](https://img.shields.io/badge/renovate-enabled-brightgreen.svg)](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/issues?q=is%3Aissue%20state%3Aopen%20Dependency%20Dashboard)
80
80
  [![Coverage](https://codecov.io/gh/helmut-hoffer-von-ankershoffen/oe-python-template-example/graph/badge.svg?token=SX34YRP30E)](https://codecov.io/gh/helmut-hoffer-von-ankershoffen/oe-python-template-example)
81
81
  [![Ruff](https://img.shields.io/badge/style-Ruff-blue?color=D6FF65)](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/blob/main/noxfile.py)
82
82
  [![MyPy](https://img.shields.io/badge/mypy-checked-blue)](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/blob/main/noxfile.py)
@@ -15,7 +15,7 @@
15
15
  [![Code Smells](https://sonarcloud.io/api/project_badges/measure?project=helmut-hoffer-von-ankershoffen_oe-python-template-example&metric=code_smells)](https://sonarcloud.io/summary/new_code?id=helmut-hoffer-von-ankershoffen_oe-python-template-example)
16
16
  [![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)
17
17
  [![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)
18
- [![Renovate enabled](https://img.shields.io/badge/renovate-enabled-brightgreen.svg)](https://renovatebot.com/)
18
+ [![Renovate enabled](https://img.shields.io/badge/renovate-enabled-brightgreen.svg)](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/issues?q=is%3Aissue%20state%3Aopen%20Dependency%20Dashboard)
19
19
  [![Coverage](https://codecov.io/gh/helmut-hoffer-von-ankershoffen/oe-python-template-example/graph/badge.svg?token=SX34YRP30E)](https://codecov.io/gh/helmut-hoffer-von-ankershoffen/oe-python-template-example)
20
20
  [![Ruff](https://img.shields.io/badge/style-Ruff-blue?color=D6FF65)](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/blob/main/noxfile.py)
21
21
  [![MyPy](https://img.shields.io/badge/mypy-checked-blue)](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/blob/main/noxfile.py)
@@ -21,7 +21,7 @@ OE Python Template Example employs several automated tools to continuously monit
21
21
  ### 1. Dependency Vulnerability Scanning
22
22
 
23
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.
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?q=is%3Aissue%20state%3Aopen%20Dependency%20Dashboard) published.
25
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
@@ -31,7 +31,7 @@
31
31
 
32
32
  1. Goto https://github.com/apps/renovate and click the "Configure" button
33
33
  2. Select the owner of your project's repository and configure "Repository access"
34
- 3. Rennovate creates a [Dependency Dashboard](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/issues) as an issue in your repository
34
+ 3. Rennovate creates a [Dependency Dashboard](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/issues?q=is%3Aissue%20state%3Aopen%20Dependency%20Dashboard) as an issue in your repository
35
35
 
36
36
  ## Publishing package to Python Package Index (pypi.org)
37
37
 
@@ -0,0 +1 @@
1
+ 0.2.4
@@ -12,7 +12,7 @@
12
12
  [![Code Smells](https://sonarcloud.io/api/project_badges/measure?project=helmut-hoffer-von-ankershoffen_oe-python-template-example&metric=code_smells)](https://sonarcloud.io/summary/new_code?id=helmut-hoffer-von-ankershoffen_oe-python-template-example)
13
13
  [![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)
14
14
  [![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)
15
- [![Renovate enabled](https://img.shields.io/badge/renovate-enabled-brightgreen.svg)](https://renovatebot.com/)
15
+ [![Renovate enabled](https://img.shields.io/badge/renovate-enabled-brightgreen.svg)](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/issues?q=is%3Aissue%20state%3Aopen%20Dependency%20Dashboard)
16
16
  [![Coverage](https://codecov.io/gh/helmut-hoffer-von-ankershoffen/oe-python-template-example/graph/badge.svg?token=SX34YRP30E)](https://codecov.io/gh/helmut-hoffer-von-ankershoffen/oe-python-template-example)
17
17
  [![Ruff](https://img.shields.io/badge/style-Ruff-blue?color=D6FF65)](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/blob/main/noxfile.py)
18
18
  [![MyPy](https://img.shields.io/badge/mypy-checked-blue)](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/blob/main/noxfile.py)
@@ -0,0 +1,14 @@
1
+ Traceback (most recent call last):
2
+ File "/Users/helmut/Code/oe-python-template-example/.nox/docs-3-13/bin/oe-python-template-example", line 4, in <module>
3
+ from oe_python_template_example.cli import cli
4
+ File "/Users/helmut/Code/oe-python-template-example/src/oe_python_template_example/cli.py", line 7, in <module>
5
+ import typer
6
+ File "/Users/helmut/Code/oe-python-template-example/.nox/docs-3-13/lib/python3.13/site-packages/typer/__init__.py", line 29, in <module>
7
+ from .main import Typer as Typer
8
+ File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
9
+ File "<frozen importlib._bootstrap>", line 1331, in _find_and_load_unlocked
10
+ File "<frozen importlib._bootstrap>", line 935, in _load_unlocked
11
+ File "<frozen importlib._bootstrap_external>", line 1022, in exec_module
12
+ File "<frozen importlib._bootstrap_external>", line 1118, in get_code
13
+ File "<frozen importlib._bootstrap_external>", line 1218, in get_data
14
+ KeyboardInterrupt
@@ -0,0 +1,9 @@
1
+ API V1
2
+ ======
3
+
4
+ .. only:: html
5
+
6
+ .. swagger-plugin:: _static/openapi_v1.yaml
7
+ :full-page:
8
+
9
+ Visit the `Interactive API Documentation <https: //oe-python-template-example.readthedocs.io/en/latest/api_v1.html>`_
@@ -0,0 +1,9 @@
1
+ API V2
2
+ ======
3
+
4
+ .. only:: html
5
+
6
+ .. swagger-plugin:: _static/openapi_v2.yaml
7
+ :full-page:
8
+
9
+ Visit the `Interactive API Documentation <https://oe-python-template-example.readthedocs.io/en/latest/api_v2.html>`_
@@ -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.2.2"
32
+ version = "0.2.4"
33
33
  release = version
34
34
  github_username = "helmut-hoffer-von-ankershoffen"
35
35
  github_repository = "oe-python-template-example"
@@ -1,2 +1 @@
1
1
  .. mdinclude:: ../partials/README_main.md
2
- :start-line: 0
@@ -10,7 +10,7 @@ def _():
10
10
 
11
11
  service = Service()
12
12
  message = service.get_hello_world()
13
- message # type: ignore
13
+ print(message)
14
14
  return Service, message, service
15
15
 
16
16
 
@@ -16,6 +16,7 @@ echo "Usage: ./n <session_name> [additional_args]"
16
16
  echo " ./n bump minor"
17
17
  echo " ./n bump major"
18
18
  echo " ./n bump x.y.z"
19
+ echo " ./n docs_pdf"
19
20
  exit 1
20
21
  fi
21
22
 
@@ -7,11 +7,13 @@ from pathlib import Path
7
7
 
8
8
  import nox
9
9
  import tomli
10
+ from nox.command import CommandFailed
10
11
 
11
12
  nox.options.reuse_existing_virtualenvs = True
12
13
  nox.options.default_venv_backend = "uv"
13
14
 
14
15
  NOT_SKIP_WITH_ACT = "not skip_with_act"
16
+ LATEXMK_VERSION_MIN = 4.86
15
17
 
16
18
 
17
19
  def _setup_venv(session: nox.Session, all_extras: bool = True) -> None:
@@ -78,6 +80,39 @@ def docs(session: nox.Session) -> None:
78
80
  # Build docs
79
81
  session.run("make", "-C", "docs", "clean", external=True)
80
82
  session.run("make", "-C", "docs", "html", external=True)
83
+ session.run("make", "-C", "docs", "singlehtml", external=True)
84
+ session.run("make", "-C", "docs", "latex", external=True)
85
+
86
+
87
+ @nox.session(python=["3.13"], default=False)
88
+ def docs_pdf(session: nox.Session) -> None:
89
+ """Setup dev environment post project creation.""" # noqa: DOC501
90
+ _setup_venv(session)
91
+ try:
92
+ out = session.run("latexmk", "--version", external=True, silent=True)
93
+
94
+ version_match = re.search(r"Version (\d+\.\d+\w*)", str(out))
95
+ if not version_match:
96
+ session.error("Could not determine latexmk version")
97
+
98
+ version_str = version_match.group(1)
99
+
100
+ # Parse version (handle cases like "4.86a")
101
+ match = re.match(r"(\d+\.\d+)", version_str)
102
+ if not match:
103
+ session.error(f"Could not parse version number from '{version_str}'")
104
+ base_version = match.group(1)
105
+
106
+ if float(base_version) < LATEXMK_VERSION_MIN:
107
+ message = f"latexmk version {version_str} is outdated. Please run 'brew upgrade mactex' to upgrade."
108
+ raise ValueError(message) # noqa: TRY301
109
+ session.log(f"latexmk version {version_str} is sufficient")
110
+ session.run("make", "-C", "docs", "latexpdf", external=True)
111
+
112
+ except CommandFailed as e:
113
+ session.error(f"latexmk is not installed or not in PATH: {e}. Please run 'brew install mactex' to install")
114
+ except (ValueError, AttributeError) as e:
115
+ session.error(f"Failed to parse latexmk version information: {e}")
81
116
 
82
117
 
83
118
  @nox.session(python=["3.13"])
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "oe-python-template-example"
3
- version = "0.2.2"
3
+ version = "0.2.4"
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 = [
@@ -242,7 +242,7 @@ source = ["src/"]
242
242
 
243
243
 
244
244
  [tool.bumpversion]
245
- current_version = "0.2.2"
245
+ current_version = "0.2.4"
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.2.2
3
+ sonar.projectVersion=0.2.4
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.2.2"
2078
+ version = "0.2.4"
2079
2079
  source = { editable = "." }
2080
2080
  dependencies = [
2081
2081
  { name = "fastapi", extra = ["all", "standard"] },
@@ -1 +0,0 @@
1
- 0.2.2
@@ -1,34 +0,0 @@
1
- Traceback (most recent call last):
2
- File "/Users/helmut/Code/oe-python-template-example/.nox/docs-3-13/bin/oe-python-template-example", line 4, in <module>
3
- from oe_python_template_example.cli import cli
4
- File "/Users/helmut/Code/oe-python-template-example/src/oe_python_template_example/cli.py", line 13, in <module>
5
- from oe_python_template_example.api import api_v1, api_v2
6
- File "/Users/helmut/Code/oe-python-template-example/src/oe_python_template_example/api.py", line 16, in <module>
7
- from fastapi import Depends, FastAPI, Response, status
8
- File "/Users/helmut/Code/oe-python-template-example/.nox/docs-3-13/lib/python3.13/site-packages/fastapi/__init__.py", line 7, in <module>
9
- from .applications import FastAPI as FastAPI
10
- File "/Users/helmut/Code/oe-python-template-example/.nox/docs-3-13/lib/python3.13/site-packages/fastapi/applications.py", line 16, in <module>
11
- from fastapi import routing
12
- File "/Users/helmut/Code/oe-python-template-example/.nox/docs-3-13/lib/python3.13/site-packages/fastapi/routing.py", line 34, in <module>
13
- from fastapi.dependencies.models import Dependant
14
- File "/Users/helmut/Code/oe-python-template-example/.nox/docs-3-13/lib/python3.13/site-packages/fastapi/dependencies/models.py", line 5, in <module>
15
- from fastapi.security.base import SecurityBase
16
- File "/Users/helmut/Code/oe-python-template-example/.nox/docs-3-13/lib/python3.13/site-packages/fastapi/security/__init__.py", line 1, in <module>
17
- from .api_key import APIKeyCookie as APIKeyCookie
18
- File "/Users/helmut/Code/oe-python-template-example/.nox/docs-3-13/lib/python3.13/site-packages/fastapi/security/api_key.py", line 6, in <module>
19
- from starlette.requests import Request
20
- File "/Users/helmut/Code/oe-python-template-example/.nox/docs-3-13/lib/python3.13/site-packages/starlette/requests.py", line 12, in <module>
21
- from starlette.formparsers import FormParser, MultiPartException, MultiPartParser
22
- File "/Users/helmut/Code/oe-python-template-example/.nox/docs-3-13/lib/python3.13/site-packages/starlette/formparsers.py", line 17, in <module>
23
- import python_multipart as multipart
24
- File "/Users/helmut/Code/oe-python-template-example/.nox/docs-3-13/lib/python3.13/site-packages/python_multipart/__init__.py", line 7, in <module>
25
- from .multipart import (
26
- ...<7 lines>...
27
- )
28
- File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
29
- File "<frozen importlib._bootstrap>", line 1331, in _find_and_load_unlocked
30
- File "<frozen importlib._bootstrap>", line 935, in _load_unlocked
31
- File "<frozen importlib._bootstrap_external>", line 1022, in exec_module
32
- File "<frozen importlib._bootstrap_external>", line 1155, in get_code
33
- File "<frozen importlib._bootstrap_external>", line 784, in _compile_bytecode
34
- KeyboardInterrupt
@@ -1,11 +0,0 @@
1
- API V1
2
- ======
3
-
4
- .. only:: html
5
-
6
- .. swagger-plugin:: _static/openapi_v1.yaml
7
- :full-page:
8
-
9
- .. only:: latex
10
-
11
- Visit the `Interactive API Documentation <https://oe-python-template-example.readthedocs.io/en/latest/api_v1.html>`_
@@ -1,11 +0,0 @@
1
- API V2
2
- ======
3
-
4
- .. only:: html
5
-
6
- .. swagger-plugin:: _static/openapi_v2.yaml
7
- :full-page:
8
-
9
- .. only:: latex
10
-
11
- Visit the `Interactive API Documentation <https://oe-python-template-example.readthedocs.io/en/latest/api_v2.html>`_