oe-python-template 0.6.15__tar.gz → 0.6.17__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 (168) hide show
  1. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/.copier-answers.yml +1 -1
  2. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/.github/workflows/codeql.yml +1 -1
  3. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/CHANGELOG.md +15 -1
  4. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/CONTRIBUTING.md +2 -9
  5. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/PKG-INFO +1 -1
  6. oe_python_template-0.6.17/RELEASE_NOTES.md +8 -0
  7. oe_python_template-0.6.17/VERSION +1 -0
  8. oe_python_template-0.6.17/docs/source/_static/openapi_v1.yaml +36 -0
  9. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/docs/source/conf.py +1 -1
  10. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/noxfile.py +28 -2
  11. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/pyproject.toml +2 -2
  12. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/sonar-project.properties +1 -1
  13. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/template/.github/workflows/codeql.yml +1 -1
  14. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/template/CONTRIBUTING.md.jinja +2 -9
  15. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/template/noxfile.py.jinja +28 -2
  16. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/uv.lock +1 -1
  17. oe_python_template-0.6.15/RELEASE_NOTES.md +0 -8
  18. oe_python_template-0.6.15/VERSION +0 -1
  19. oe_python_template-0.6.15/docs/source/_static/openapi_v1.yaml +0 -188
  20. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/.act-env-public +0 -0
  21. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/.devcontainer/Dockerfile +0 -0
  22. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/.devcontainer/devcontainer.json +0 -0
  23. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/.devcontainer/onCreateCommand +0 -0
  24. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/.devcontainer/postAttachCommand +0 -0
  25. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/.devcontainer/postCreateCommand +0 -0
  26. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/.env.example +0 -0
  27. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/.github/copilot-instructions.md +0 -0
  28. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/.github/dependabot.yml +0 -0
  29. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/.github/prompts/.keep +0 -0
  30. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/.github/workflows/docker-image-build-publish.yml +0 -0
  31. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/.github/workflows/package-build-publish-release.yml +0 -0
  32. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/.github/workflows/test-and-report.yml +0 -0
  33. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/.gitignore +0 -0
  34. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/.pre-commit-config.yaml +0 -0
  35. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/.python-version +0 -0
  36. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/.readthedocs.yml +0 -0
  37. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/.secrets.baseline +0 -0
  38. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/.vscode/extensions.json +0 -0
  39. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/.vscode/settings.json +0 -0
  40. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/CODEOWNERS +0 -0
  41. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/CODE_STYLE.md +0 -0
  42. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/Dockerfile +0 -0
  43. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/LICENSE +0 -0
  44. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/README.md +0 -0
  45. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/SECURITY.md +0 -0
  46. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/SERVICE_CONNECTIONS.md +0 -0
  47. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/bin/git-cliff +0 -0
  48. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/codecov.yml +0 -0
  49. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/compose.yaml +0 -0
  50. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/copier.yml +0 -0
  51. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/docs/Makefile +0 -0
  52. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/docs/make.bat +0 -0
  53. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/docs/partials/README_footer.md +0 -0
  54. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/docs/partials/README_header.md +0 -0
  55. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/docs/partials/README_main.md +0 -0
  56. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/docs/source/_static/.keep +0 -0
  57. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/docs/source/_static/openapi_v1.json +0 -0
  58. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/docs/source/_static/openapi_v2.json +0 -0
  59. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/docs/source/_static/openapi_v2.yaml +0 -0
  60. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/docs/source/api_v1.rst +0 -0
  61. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/docs/source/api_v2.rst +0 -0
  62. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/docs/source/code-style.rst +0 -0
  63. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/docs/source/contributing.rst +0 -0
  64. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/docs/source/index.rst +0 -0
  65. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/docs/source/latexmkrc +0 -0
  66. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/docs/source/main.rst +0 -0
  67. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/docs/source/reference.rst +0 -0
  68. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/docs/source/release-notes.rst +0 -0
  69. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/docs/source/security.rst +0 -0
  70. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/examples/__init__.py +0 -0
  71. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/examples/notebook.ipynb +0 -0
  72. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/examples/notebook.py +0 -0
  73. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/examples/script.py +0 -0
  74. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/examples/streamlit.py +0 -0
  75. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/git-cliff-2.7.0/CHANGELOG.md +0 -0
  76. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/git-cliff-2.7.0/LICENSE-APACHE +0 -0
  77. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/git-cliff-2.7.0/LICENSE-MIT +0 -0
  78. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/git-cliff-2.7.0/README.md +0 -0
  79. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/git-cliff-2.7.0/completions/_git-cliff +0 -0
  80. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/git-cliff-2.7.0/completions/_git-cliff.ps1 +0 -0
  81. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/git-cliff-2.7.0/completions/git-cliff.bash +0 -0
  82. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/git-cliff-2.7.0/completions/git-cliff.elv +0 -0
  83. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/git-cliff-2.7.0/completions/git-cliff.fish +0 -0
  84. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/git-cliff-2.7.0/git-cliff-completions +0 -0
  85. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/git-cliff-2.7.0/git-cliff-mangen +0 -0
  86. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/git-cliff-2.7.0/man/git-cliff.1 +0 -0
  87. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/git-cliff-2.7.0-x86_64-unknown-linux-gnu.tar.gz +0 -0
  88. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/github-action-run +0 -0
  89. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/logo.png +0 -0
  90. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/n +0 -0
  91. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/renovate.json +0 -0
  92. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/reports/.keep +0 -0
  93. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/src/oe_python_template/__init__.py +0 -0
  94. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/src/oe_python_template/api.py +0 -0
  95. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/src/oe_python_template/cli.py +0 -0
  96. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/src/oe_python_template/constants.py +0 -0
  97. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/src/oe_python_template/service.py +0 -0
  98. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/template/.act-env-public.jinja +0 -0
  99. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/template/.devcontainer/Dockerfile.jinja +0 -0
  100. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/template/.devcontainer/devcontainer.json.jinja +0 -0
  101. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/template/.devcontainer/onCreateCommand.jinja +0 -0
  102. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/template/.devcontainer/postAttachCommand.jinja +0 -0
  103. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/template/.devcontainer/postCreateCommand.jinja +0 -0
  104. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/template/.env.example.jinja +0 -0
  105. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/template/.github/copilot-instructions.md +0 -0
  106. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/template/.github/dependabot.yml +0 -0
  107. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/template/.github/workflows/docker-image-build-publish.yml.jinja +0 -0
  108. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/template/.github/workflows/package-build-publish-release.yml.jinja +0 -0
  109. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/template/.github/workflows/test-and-report.yml.jinja +0 -0
  110. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/template/.gitignore.jinja +0 -0
  111. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/template/.pre-commit-config.yaml.jinja +0 -0
  112. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/template/.python-version +0 -0
  113. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/template/.readthedocs.yml.jinja +0 -0
  114. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/template/.vscode/extensions.json +0 -0
  115. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/template/.vscode/settings.json.jinja +0 -0
  116. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/template/CHANGELOG.md +0 -0
  117. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/template/CODEOWNERS.jinja +0 -0
  118. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/template/CODE_STYLE.md.jinja +0 -0
  119. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/template/Dockerfile.jinja +0 -0
  120. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/template/LICENSE.jinja +0 -0
  121. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/template/README.md +0 -0
  122. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/template/SECURITY.md.jinja +0 -0
  123. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/template/SERVICE_CONNECTIONS.md.jinja +0 -0
  124. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/template/VERSION +0 -0
  125. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/template/codecov.yml.jinja +0 -0
  126. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/template/compose.yaml.jinja +0 -0
  127. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/template/docs/Makefile.jinja +0 -0
  128. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/template/docs/make.bat.jinja +0 -0
  129. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/template/docs/partials/README_footer.md.jinja +0 -0
  130. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/template/docs/partials/README_header.md.jinja +0 -0
  131. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/template/docs/partials/README_main.md.jinja +0 -0
  132. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/template/docs/source/_static/.keep +0 -0
  133. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/template/docs/source/api_v1.rst.jinja +0 -0
  134. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/template/docs/source/api_v2.rst.jinja +0 -0
  135. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/template/docs/source/code-style.rst.jinja +0 -0
  136. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/template/docs/source/conf.py.jinja +0 -0
  137. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/template/docs/source/contributing.rst.jinja +0 -0
  138. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/template/docs/source/index.rst.jinja +0 -0
  139. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/template/docs/source/main.rst.jinja +0 -0
  140. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/template/docs/source/reference.rst.jinja +0 -0
  141. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/template/docs/source/release-notes.rst.jinja +0 -0
  142. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/template/docs/source/security.rst.jinja +0 -0
  143. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/template/examples/__init__.py.jinja +0 -0
  144. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/template/examples/notebook.ipynb.jinja +0 -0
  145. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/template/examples/notebook.py.jinja +0 -0
  146. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/template/examples/script.py.jinja +0 -0
  147. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/template/examples/streamlit.py.jinja +0 -0
  148. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/template/github-action-run.jinja +0 -0
  149. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/template/logo.png +0 -0
  150. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/template/n.jinja +0 -0
  151. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/template/pyproject.toml.jinja +0 -0
  152. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/template/renovate.json +0 -0
  153. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/template/reports/.keep +0 -0
  154. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/template/sonar-project.properties.jinja +0 -0
  155. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/template/src/{{ project_name_snake_case }}/__init__.py.jinja +0 -0
  156. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/template/src/{{ project_name_snake_case }}/api.py.jinja +0 -0
  157. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/template/src/{{ project_name_snake_case }}/cli.py.jinja +0 -0
  158. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/template/src/{{ project_name_snake_case }}/constants.py.jinja +0 -0
  159. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/template/src/{{ project_name_snake_case }}/service.py.jinja +0 -0
  160. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/template/tests/__init__.py.jinja +0 -0
  161. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/template/tests/api_test.py.jinja +0 -0
  162. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/template/tests/cli_test.py.jinja +0 -0
  163. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/template/tests/fixtures/.keep +0 -0
  164. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/template/{{_copier_conf.answers_file}}.jinja +0 -0
  165. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/tests/__init__.py +0 -0
  166. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/tests/api_test.py +0 -0
  167. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/tests/cli_test.py +0 -0
  168. {oe_python_template-0.6.15 → oe_python_template-0.6.17}/tests/fixtures/.keep +0 -0
@@ -1,4 +1,4 @@
1
- _commit: v0.6.14-1-g6f04954
1
+ _commit: v0.6.16-1-g0e35063
2
2
  _src_path: .
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
@@ -1,6 +1,20 @@
1
1
  [🧠 OE Python Template](https://oe-python-template.readthedocs.io/en/latest/)
2
2
 
3
- ## [0.6.15](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template/compare/v0.6.14..0.6.15) - 2025-03-18
3
+ ## [0.6.17](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template/compare/v0.6.16..0.6.17) - 2025-03-18
4
+
5
+ ### ⛰️ Features
6
+
7
+ - *(docs_pdf)* Check for latex tooling - ([3c35f28](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template/commit/3c35f280652557650e4aa40c8b459ed42c536a65))
8
+
9
+
10
+ ## [0.6.16](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template/compare/v0.6.15..v0.6.16) - 2025-03-18
11
+
12
+ ### ⛰️ Features
13
+
14
+ - *(codeql)* Enable security-extended and security-and-quality - ([0dead53](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template/commit/0dead53a748967132eb80f570b44d038a88788e5))
15
+
16
+
17
+ ## [0.6.15](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template/compare/v0.6.14..v0.6.15) - 2025-03-18
4
18
 
5
19
  ### ⚙️ Miscellaneous Tasks
6
20
 
@@ -88,9 +88,10 @@ uv run nox -s test # run tests
88
88
  uv run nox -s lint # run formatting and linting
89
89
  uv run nox -s audit # run security and license audit, inc. sbom generation
90
90
  uv run nox -s docs # build documentation, output in docs/build/html
91
+ uv run nox -s docs_pdf # locally build pdf manual to docs/build/latex/oe-python-template.pdf
91
92
  ```
92
93
 
93
- As a shortcut, you can run build steps using `./n`:
94
+ As a shortcut, you can run build steps using `./n`, e.g.
94
95
 
95
96
  ```shell
96
97
  ./n test
@@ -137,14 +138,6 @@ Update from template
137
138
  uv run nox -s update_from_template
138
139
  ```
139
140
 
140
- ### Generate PDF manual
141
-
142
- ```shell
143
- brew install mactex # install MacTeX, will take a while and requires sudo
144
- ./n docs_pdf # build latex, then generate pdf from it. Output in docs/build/latex/oe-python-template.pdf
145
- ```
146
-
147
-
148
141
  ## Pull Request Guidelines
149
142
 
150
143
  - Before starting to write code read the [code style guide](CODE_STYLE.md) document for mandatory coding style
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: oe-python-template
3
- Version: 0.6.15
3
+ Version: 0.6.17
4
4
  Summary: 🧠 Copier template to scaffold Python projects compliant with best practices and modern tooling.
5
5
  Project-URL: Homepage, https://oe-python-template.readthedocs.io/en/latest/
6
6
  Project-URL: Documentation, https://oe-python-template.readthedocs.io/en/latest/
@@ -0,0 +1,8 @@
1
+ ## [0.6.17](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template/compare/v0.6.16..v0.6.17) - 2025-03-18
2
+
3
+ ### ⛰️ Features
4
+
5
+ - *(docs_pdf)* Check for latex tooling - ([3c35f28](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template/commit/3c35f280652557650e4aa40c8b459ed42c536a65))
6
+
7
+
8
+
@@ -0,0 +1 @@
1
+ 0.6.17
@@ -0,0 +1,36 @@
1
+ Traceback (most recent call last):
2
+ File "/Users/helmut/Code/oe-python-template/.nox/docs-3-13/bin/oe-python-template", line 4, in <module>
3
+ from oe_python_template.cli import cli
4
+ File "/Users/helmut/Code/oe-python-template/src/oe_python_template/cli.py", line 7, in <module>
5
+ import typer
6
+ File "/Users/helmut/Code/oe-python-template/.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 "/Users/helmut/Code/oe-python-template/.nox/docs-3-13/lib/python3.13/site-packages/typer/main.py", line 21, in <module>
9
+ from .core import (
10
+ ...<6 lines>...
11
+ )
12
+ File "/Users/helmut/Code/oe-python-template/.nox/docs-3-13/lib/python3.13/site-packages/typer/core.py", line 36, in <module>
13
+ from . import rich_utils
14
+ File "/Users/helmut/Code/oe-python-template/.nox/docs-3-13/lib/python3.13/site-packages/typer/rich_utils.py", line 14, in <module>
15
+ from rich.columns import Columns
16
+ File "/Users/helmut/Code/oe-python-template/.nox/docs-3-13/lib/python3.13/site-packages/rich/columns.py", line 7, in <module>
17
+ from .console import Console, ConsoleOptions, RenderableType, RenderResult
18
+ File "/Users/helmut/Code/oe-python-template/.nox/docs-3-13/lib/python3.13/site-packages/rich/console.py", line 59, in <module>
19
+ from .pretty import Pretty, is_expandable
20
+ File "/Users/helmut/Code/oe-python-template/.nox/docs-3-13/lib/python3.13/site-packages/rich/pretty.py", line 33, in <module>
21
+ import attr as _attr_module
22
+ File "/Users/helmut/Code/oe-python-template/.nox/docs-3-13/lib/python3.13/site-packages/attr/__init__.py", line 10, in <module>
23
+ from . import converters, exceptions, filters, setters, validators
24
+ File "/Users/helmut/Code/oe-python-template/.nox/docs-3-13/lib/python3.13/site-packages/attr/converters.py", line 10, in <module>
25
+ from ._make import NOTHING, Converter, Factory, pipe
26
+ File "/Users/helmut/Code/oe-python-template/.nox/docs-3-13/lib/python3.13/site-packages/attr/_make.py", line 21, in <module>
27
+ from . import _compat, _config, setters
28
+ File "/Users/helmut/Code/oe-python-template/.nox/docs-3-13/lib/python3.13/site-packages/attr/setters.py", line 8, in <module>
29
+ from .exceptions import FrozenAttributeError
30
+ File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
31
+ File "<frozen importlib._bootstrap>", line 1331, in _find_and_load_unlocked
32
+ File "<frozen importlib._bootstrap>", line 935, in _load_unlocked
33
+ File "<frozen importlib._bootstrap_external>", line 1022, in exec_module
34
+ File "<frozen importlib._bootstrap_external>", line 1118, in get_code
35
+ File "<frozen importlib._bootstrap_external>", line 1218, in get_data
36
+ KeyboardInterrupt
@@ -29,7 +29,7 @@ extensions = [
29
29
  project = "oe-python-template"
30
30
  author = "Helmut Hoffer von Ankershoffen"
31
31
  copyright = f" (c) 2025-{datetime.now(UTC).year}, {author}" # noqa: A001
32
- version = "0.6.15"
32
+ version = "0.6.17"
33
33
  release = version
34
34
  github_username = "helmut-hoffer-von-ankershoffen"
35
35
  github_repository = "oe-python-template"
@@ -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:
@@ -84,9 +86,33 @@ def docs(session: nox.Session) -> None:
84
86
 
85
87
  @nox.session(python=["3.13"], default=False)
86
88
  def docs_pdf(session: nox.Session) -> None:
87
- """Setup dev environment post project creation."""
89
+ """Setup dev environment post project creation.""" # noqa: DOC501
88
90
  _setup_venv(session)
89
- session.run("make", "-C", "docs", "latexpdf", external=True)
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}")
90
116
 
91
117
 
92
118
  @nox.session(python=["3.13"])
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "oe-python-template"
3
- version = "0.6.15"
3
+ version = "0.6.17"
4
4
  description = "🧠 Copier template to scaffold Python projects compliant with best practices and modern tooling."
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.6.15"
245
+ current_version = "0.6.17"
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
2
2
  sonar.organization=helmut-hoffer-von-ankershoffen
3
- sonar.projectVersion=0.6.15
3
+ sonar.projectVersion=0.6.17
4
4
  sonar.projectDescription=🧠 Copier template to scaffold Python projects compliant with best practices and modern tooling.
5
5
  sonar.links.homepage=https://oe-python-template.readthedocs.io/en/latest/
6
6
  sonar.links.scm=https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template
@@ -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
@@ -88,9 +88,10 @@ uv run nox -s test # run tests
88
88
  uv run nox -s lint # run formatting and linting
89
89
  uv run nox -s audit # run security and license audit, inc. sbom generation
90
90
  uv run nox -s docs # build documentation, output in docs/build/html
91
+ uv run nox -s docs_pdf # locally build pdf manual to docs/build/latex/{{ pypi_distribution_name }}.pdf
91
92
  ```
92
93
 
93
- As a shortcut, you can run build steps using `./n`:
94
+ As a shortcut, you can run build steps using `./n`, e.g.
94
95
 
95
96
  ```shell
96
97
  ./n test
@@ -137,14 +138,6 @@ Update from template
137
138
  uv run nox -s update_from_template
138
139
  ```
139
140
 
140
- ### Generate PDF manual
141
-
142
- ```shell
143
- brew install mactex # install MacTeX, will take a while and requires sudo
144
- ./n docs_pdf # build latex, then generate pdf from it. Output in docs/build/latex/{{ pypi_distribution_name }}.pdf
145
- ```
146
-
147
-
148
141
  ## Pull Request Guidelines
149
142
 
150
143
  - Before starting to write code read the [code style guide](CODE_STYLE.md) document for mandatory coding style
@@ -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:
@@ -84,9 +86,33 @@ def docs(session: nox.Session) -> None:
84
86
 
85
87
  @nox.session(python=["3.13"], default=False)
86
88
  def docs_pdf(session: nox.Session) -> None:
87
- """Setup dev environment post project creation."""
89
+ """Setup dev environment post project creation.""" # noqa: DOC501
88
90
  _setup_venv(session)
89
- session.run("make", "-C", "docs", "latexpdf", external=True)
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}")
90
116
 
91
117
 
92
118
  @nox.session(python=["3.13"])
@@ -2075,7 +2075,7 @@ wheels = [
2075
2075
 
2076
2076
  [[package]]
2077
2077
  name = "oe-python-template"
2078
- version = "0.6.15"
2078
+ version = "0.6.17"
2079
2079
  source = { editable = "." }
2080
2080
  dependencies = [
2081
2081
  { name = "fastapi", extra = ["all", "standard"] },
@@ -1,8 +0,0 @@
1
- ## [0.6.15](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template/compare/v0.6.14..v0.6.15) - 2025-03-18
2
-
3
- ### ⚙️ Miscellaneous Tasks
4
-
5
- - *(docs)* Generate singlehtml and pdf; deeper rennovate link - ([14fe3c0](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template/commit/14fe3c07e45daee42716c7d09fcbeb6aae02c9a7))
6
-
7
-
8
-
@@ -1 +0,0 @@
1
- 0.6.15
@@ -1,188 +0,0 @@
1
- components:
2
- schemas:
3
- EchoRequest:
4
- description: Request model for echo endpoint.
5
- properties:
6
- text:
7
- description: The text to echo back
8
- examples:
9
- - Hello, world!
10
- minLength: 1
11
- title: Text
12
- type: string
13
- required:
14
- - text
15
- title: EchoRequest
16
- type: object
17
- EchoResponse:
18
- description: Response model for echo endpoint.
19
- properties:
20
- message:
21
- description: The message content
22
- examples:
23
- - Hello, world!
24
- minLength: 1
25
- title: Message
26
- type: string
27
- required:
28
- - message
29
- title: EchoResponse
30
- type: object
31
- HTTPValidationError:
32
- properties:
33
- detail:
34
- items:
35
- $ref: '#/components/schemas/ValidationError'
36
- title: Detail
37
- type: array
38
- title: HTTPValidationError
39
- type: object
40
- Health:
41
- description: Health status model.
42
- properties:
43
- reason:
44
- anyOf:
45
- - type: string
46
- - type: 'null'
47
- title: Reason
48
- status:
49
- $ref: '#/components/schemas/_HealthStatus'
50
- required:
51
- - status
52
- title: Health
53
- type: object
54
- HelloWorldResponse:
55
- description: Response model for hello-world endpoint.
56
- properties:
57
- message:
58
- description: The hello world message
59
- examples:
60
- - Hello, world!
61
- title: Message
62
- type: string
63
- required:
64
- - message
65
- title: HelloWorldResponse
66
- type: object
67
- ValidationError:
68
- properties:
69
- loc:
70
- items:
71
- anyOf:
72
- - type: string
73
- - type: integer
74
- title: Location
75
- type: array
76
- msg:
77
- title: Message
78
- type: string
79
- type:
80
- title: Error Type
81
- type: string
82
- required:
83
- - loc
84
- - msg
85
- - type
86
- title: ValidationError
87
- type: object
88
- _HealthStatus:
89
- description: Health status enumeration.
90
- enum:
91
- - UP
92
- - DOWN
93
- title: _HealthStatus
94
- type: string
95
- info:
96
- contact:
97
- email: helmuthva@gmail.com
98
- name: Helmut Hoffer von Ankershoffen
99
- url: https://github.com/helmut-hoffer-von-ankershoffen
100
- termsOfService: https://oe-python-template.readthedocs.io/en/latest/
101
- title: OE Python Template
102
- version: 1.0.0
103
- openapi: 3.1.0
104
- paths:
105
- /echo:
106
- post:
107
- description: "Echo back the provided text.\n\nArgs:\n request (EchoRequest):\
108
- \ The request containing the text to echo back.\n\nReturns:\n EchoResponse:\
109
- \ A response containing the echoed text.\n\nRaises:\n 422 Unprocessable\
110
- \ Entity: If text is not provided or empty."
111
- operationId: echo_echo_post
112
- requestBody:
113
- content:
114
- application/json:
115
- schema:
116
- $ref: '#/components/schemas/EchoRequest'
117
- required: true
118
- responses:
119
- '200':
120
- content:
121
- application/json:
122
- schema:
123
- $ref: '#/components/schemas/EchoResponse'
124
- description: Successful Response
125
- '422':
126
- content:
127
- application/json:
128
- schema:
129
- $ref: '#/components/schemas/HTTPValidationError'
130
- description: Validation Error
131
- summary: Echo
132
- tags:
133
- - Basics
134
- /health:
135
- get:
136
- description: "Check the health of the service.\n\nThis endpoint returns the\
137
- \ health status of the service.\nThe health status can be either UP or DOWN.\n\
138
- If the service is healthy, the status will be UP.\nIf the service is unhealthy,\
139
- \ the status will be DOWN and a reason will be provided.\nThe response will\
140
- \ have a 200 OK status code if the service is healthy,\nand a 500 Internal\
141
- \ Server Error status code if the service is unhealthy.\n\nReturns:\n Health:\
142
- \ The health status of the service."
143
- operationId: health_health_get
144
- responses:
145
- '200':
146
- content:
147
- application/json:
148
- schema:
149
- $ref: '#/components/schemas/Health'
150
- description: Successful Response
151
- summary: Health
152
- tags:
153
- - Observability
154
- /healthz:
155
- get:
156
- description: "Check the health of the service.\n\nThis endpoint returns the\
157
- \ health status of the service.\nThe health status can be either UP or DOWN.\n\
158
- If the service is healthy, the status will be UP.\nIf the service is unhealthy,\
159
- \ the status will be DOWN and a reason will be provided.\nThe response will\
160
- \ have a 200 OK status code if the service is healthy,\nand a 500 Internal\
161
- \ Server Error status code if the service is unhealthy.\n\nReturns:\n Health:\
162
- \ The health status of the service."
163
- operationId: health_healthz_get
164
- responses:
165
- '200':
166
- content:
167
- application/json:
168
- schema:
169
- $ref: '#/components/schemas/Health'
170
- description: Successful Response
171
- summary: Health
172
- tags:
173
- - Observability
174
- /hello-world:
175
- get:
176
- description: "Return a hello world message.\n\nReturns:\n HelloWorldResponse:\
177
- \ A response containing the hello world message."
178
- operationId: hello_world_hello_world_get
179
- responses:
180
- '200':
181
- content:
182
- application/json:
183
- schema:
184
- $ref: '#/components/schemas/HelloWorldResponse'
185
- description: Successful Response
186
- summary: Hello World
187
- tags:
188
- - Basics