oe-python-template 0.2.3__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 (143) hide show
  1. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/.act-env +1 -1
  2. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/.copier-answers.yml +1 -1
  3. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/.devcontainer/devcontainer.json +0 -1
  4. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/.gitignore +1 -0
  5. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/.pre-commit-config.yaml +17 -2
  6. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/.secrets.baseline +1 -1
  7. {oe_python_template-0.2.3/template → oe_python_template-0.2.4}/.vscode/settings.json +1 -6
  8. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/CHANGELOG.md +15 -1
  9. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/CONTRIBUTING.md +6 -0
  10. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/PKG-INFO +2 -1
  11. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/RELEASE_NOTES.md +11 -0
  12. oe_python_template-0.2.4/VERSION +1 -0
  13. oe_python_template-0.2.4/bump +8 -0
  14. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/copier.yml +0 -46
  15. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/docs/source/conf.py +5 -5
  16. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/examples/notebook.ipynb +0 -1
  17. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/examples/streamlit.py +0 -1
  18. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/noxfile.py +8 -4
  19. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/pyproject.toml +23 -3
  20. oe_python_template-0.2.4/reports/mypy.xml +5 -0
  21. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/sonar-project.properties +1 -1
  22. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/src/oe_python_template/__init__.py +2 -1
  23. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/src/oe_python_template/cli.py +1 -1
  24. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/src/oe_python_template/service.py +1 -3
  25. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/.act-env.jinja +1 -1
  26. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/.devcontainer/devcontainer.json.jinja +0 -1
  27. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/.gitignore.jinja +1 -0
  28. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/.pre-commit-config.yaml.jinja +17 -2
  29. {oe_python_template-0.2.3 → oe_python_template-0.2.4/template}/.vscode/settings.json +1 -6
  30. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/CONTRIBUTING.md.jinja +6 -0
  31. oe_python_template-0.2.4/template/bump.jinja +8 -0
  32. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/noxfile.py.jinja +7 -3
  33. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/pyproject.toml.jinja +21 -1
  34. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/tests/cli_test.py +4 -5
  35. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/uv.lock +48 -4
  36. oe_python_template-0.2.3/VERSION +0 -1
  37. oe_python_template-0.2.3/bump +0 -3
  38. oe_python_template-0.2.3/template/bump.jinja +0 -3
  39. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/.act-secret +0 -0
  40. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/.devcontainer/Dockerfile +0 -0
  41. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/.devcontainer/onCreateCommand +0 -0
  42. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/.devcontainer/postAttachCommand +0 -0
  43. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/.devcontainer/postCreateCommand +0 -0
  44. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/.env.example +0 -0
  45. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/.github/workflows/docker-image-build-publish.yml +0 -0
  46. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/.github/workflows/package-build-publish-release.yml +0 -0
  47. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/.github/workflows/test-and-report.yml +0 -0
  48. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/.python-version +0 -0
  49. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/.readthedocs.yml +0 -0
  50. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/.vscode/extensions.json +0 -0
  51. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/CODEOWNERS +0 -0
  52. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/Dockerfile +0 -0
  53. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/LICENSE +0 -0
  54. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/README.md +0 -0
  55. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/SERVICE_CONNECTIONS.md +0 -0
  56. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/_readme_footer.md +0 -0
  57. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/_readme_header.md +0 -0
  58. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/_readme_main.md +0 -0
  59. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/bin/git-cliff +0 -0
  60. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/codecov.yml +0 -0
  61. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/compose.yaml +0 -0
  62. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/docs/Makefile +0 -0
  63. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/docs/make.bat +0 -0
  64. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/docs/source/_static/.keep +0 -0
  65. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/docs/source/contributing.rst +0 -0
  66. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/docs/source/index.rst +0 -0
  67. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/docs/source/latexmkrc +0 -0
  68. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/docs/source/main.rst +0 -0
  69. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/docs/source/reference.rst +0 -0
  70. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/docs/source/release-notes.rst +0 -0
  71. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/examples/__init__.py +0 -0
  72. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/examples/jupyter.ipynb +0 -0
  73. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/examples/notebook.py +0 -0
  74. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/examples/script.py +0 -0
  75. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/git-cliff-2.7.0/CHANGELOG.md +0 -0
  76. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/git-cliff-2.7.0/LICENSE-APACHE +0 -0
  77. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/git-cliff-2.7.0/LICENSE-MIT +0 -0
  78. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/git-cliff-2.7.0/README.md +0 -0
  79. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/git-cliff-2.7.0/completions/_git-cliff +0 -0
  80. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/git-cliff-2.7.0/completions/_git-cliff.ps1 +0 -0
  81. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/git-cliff-2.7.0/completions/git-cliff.bash +0 -0
  82. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/git-cliff-2.7.0/completions/git-cliff.elv +0 -0
  83. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/git-cliff-2.7.0/completions/git-cliff.fish +0 -0
  84. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/git-cliff-2.7.0/git-cliff-completions +0 -0
  85. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/git-cliff-2.7.0/git-cliff-mangen +0 -0
  86. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/git-cliff-2.7.0/man/git-cliff.1 +0 -0
  87. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/git-cliff-2.7.0-x86_64-unknown-linux-gnu.tar.gz +0 -0
  88. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/github-action-run +0 -0
  89. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/latexmkrc +0 -0
  90. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/logo.png +0 -0
  91. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/src/oe_python_template/constants.py +0 -0
  92. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/.act-secret.jinja +0 -0
  93. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/.devcontainer/Dockerfile.jinja +0 -0
  94. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/.devcontainer/onCreateCommand.jinja +0 -0
  95. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/.devcontainer/postAttachCommand.jinja +0 -0
  96. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/.devcontainer/postCreateCommand.jinja +0 -0
  97. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/.env.example.jinja +0 -0
  98. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/.github/workflows/docker-image-build-publish.yml.jinja +0 -0
  99. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/.github/workflows/package-build-publish-release.yml.jinja +0 -0
  100. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/.github/workflows/test-and-report.yml.jinja +0 -0
  101. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/.python-version +0 -0
  102. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/.readthedocs.yml.jinja +0 -0
  103. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/.vscode/extensions.json +0 -0
  104. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/CHANGELOG.md +0 -0
  105. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/CODEOWNERS.jinja +0 -0
  106. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/Dockerfile.jinja +0 -0
  107. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/LICENSE.jinja +0 -0
  108. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/SERVICE_CONNECTIONS.md.jinja +0 -0
  109. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/VERSION +0 -0
  110. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/_readme_footer.md.jinja +0 -0
  111. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/_readme_header.md.jinja +0 -0
  112. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/_readme_main.md.jinja +0 -0
  113. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/codecov.yml.jinja +0 -0
  114. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/compose.yaml.jinja +0 -0
  115. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/docs/Makefile.jinja +0 -0
  116. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/docs/make.bat.jinja +0 -0
  117. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/docs/source/_static/.keep +0 -0
  118. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/docs/source/conf.py.jinja +0 -0
  119. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/docs/source/contributing.rst.jinja +0 -0
  120. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/docs/source/index.rst.jinja +0 -0
  121. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/docs/source/latexmkrc.jinja +0 -0
  122. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/docs/source/main.rst.jinja +0 -0
  123. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/docs/source/reference.rst.jinja +0 -0
  124. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/docs/source/release-notes.rst.jinja +0 -0
  125. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/examples/__init__.py.jinja +0 -0
  126. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/examples/notebook.ipynb.jinja +0 -0
  127. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/examples/notebook.py.jinja +0 -0
  128. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/examples/script.py.jinja +0 -0
  129. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/examples/streamlit.py.jinja +0 -0
  130. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/github-action-run.jinja +0 -0
  131. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/latexmkrc.jinja +0 -0
  132. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/logo.png +0 -0
  133. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/sonar-project.properties.jinja +0 -0
  134. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/src/{{ project_name_snake_case }}/__init__.py.jinja +0 -0
  135. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/src/{{ project_name_snake_case }}/cli.py.jinja +0 -0
  136. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/src/{{ project_name_snake_case }}/constants.py.jinja +0 -0
  137. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/src/{{ project_name_snake_case }}/service.py.jinja +0 -0
  138. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/tests/__init__.py.jinja +0 -0
  139. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/tests/cli_test.py.jinja +0 -0
  140. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/tests/fixtures/.keep +0 -0
  141. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/{{_copier_conf.answers_file}}.jinja +0 -0
  142. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/tests/__init__.py +0 -0
  143. {oe_python_template-0.2.3 → oe_python_template-0.2.4}/tests/fixtures/.keep +0 -0
@@ -1,2 +1,2 @@
1
- GITLAB_WORKFLOW_RUNTIME=ACT
1
+ GITHUB_WORKFLOW_RUNTIME=ACT
2
2
  ACTIONS_RUNTIME_TOKEN=TOKEN
@@ -1,4 +1,4 @@
1
- _commit: v0.2.2-1-g791e7ba
1
+ _commit: v0.2.3-4-ge68660f
2
2
  _src_path: .
3
3
  author_email: helmuthva@gmail.com
4
4
  author_github_username: helmut-hoffer-von-ankershoffen
@@ -21,7 +21,6 @@
21
21
  "charliermarsh.ruff",
22
22
  "codecov.codecov",
23
23
  "donjayamanne.python-environment-manager",
24
- "elagil.pre-commit-helper",
25
24
  "fill-labs.dependi",
26
25
  "github.vscode-github-actions",
27
26
  "github.copilot",
@@ -43,6 +43,7 @@ vulnerabilities.json
43
43
  licenses.json
44
44
  licenses-inverted.json
45
45
  sbom.json
46
+ mypi_junit.xml
46
47
 
47
48
  # IDE
48
49
  .idea/
@@ -6,6 +6,22 @@ default_install_hook_types:
6
6
  - post-rewrite
7
7
  fail_fast: true
8
8
  repos:
9
+ - repo: meta
10
+ hooks:
11
+ - id: check-useless-excludes
12
+ - repo: https://github.com/pre-commit/pygrep-hooks
13
+ rev: v1.10.0
14
+ hooks:
15
+ - id: python-check-blanket-noqa
16
+ - id: python-check-blanket-type-ignore
17
+ - id: python-check-mock-methods
18
+ - id: python-no-eval
19
+ - id: python-no-log-warn
20
+ - id: python-use-type-annotations
21
+ - id: rst-backticks
22
+ - id: rst-directive-colons
23
+ - id: rst-inline-touching-normal
24
+ - id: text-unicode-replacement-char
9
25
  - repo: https://github.com/pre-commit/pre-commit-hooks
10
26
  rev: v5.0.0
11
27
  hooks:
@@ -40,10 +56,9 @@ repos:
40
56
  - repo: https://github.com/Yelp/detect-secrets
41
57
  rev: v1.5.0
42
58
  hooks:
43
- - id: detect-secrets
59
+ - id: detect-secrets
44
60
  args: ['--baseline', '.secrets.baseline']
45
61
  additional_dependencies: ["gibberish-detector"]
46
- exclude: package.lock.json
47
62
  - repo: https://github.com/astral-sh/uv-pre-commit
48
63
  # uv version.
49
64
  rev: 0.5.8
@@ -123,5 +123,5 @@
123
123
  }
124
124
  ],
125
125
  "results": {},
126
- "generated_at": "2025-03-03T21:22:39Z"
126
+ "generated_at": "2025-03-07T07:52:03Z"
127
127
  }
@@ -3,7 +3,6 @@
3
3
  "**/__pycache__ ": true
4
4
  },
5
5
  "editor.formatOnSave": true,
6
- "editor.defaultFormatter": "charliermarsh.ruff",
7
6
  "terminal.integrated.scrollback": 100000,
8
7
  "[python]": {
9
8
  "editor.codeActionsOnSave": {
@@ -67,9 +66,5 @@
67
66
  "sonarlint.connectedMode.project": {
68
67
  "connectionId": "{{ org_name_kebab_case }}",
69
68
  "projectKey": "{{ org_name_kebab_case }}_{{ project_name_kebab_case }}"
70
- },
71
- "pre-commit-helper.runOnSave": "fixes",
72
- "pre-commit-helper.excludedHookIds": [
73
- "nox"
74
- ],
69
+ }
75
70
  }
@@ -1,6 +1,20 @@
1
1
  [🧠 OE Python Template](https://oe-python-template.readthedocs.io/en/latest/)
2
2
 
3
- ## [0.2.3](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template/compare/v0.2.2..0.2.3) - 2025-03-03
3
+ ## [0.2.4](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template/compare/v0.2.3..0.2.4) - 2025-03-07
4
+
5
+ ### ⛰️ Features
6
+
7
+ - *(mypy)* Introduce static type checker mypy - ([af56e82](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template/commit/af56e82581ee5bc157f44e181214751345a4bb52))
8
+
9
+ ### 🎨 Styling
10
+
11
+ - Remove commented out code - ([246feaa](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template/commit/246feaae1287037b78344d3430eff62b147628f4))
12
+
13
+ ## New Contributors ❤️
14
+
15
+ * @helmut-hoffer-von-ankershoffen made their first contribution
16
+
17
+ ## [0.2.3](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template/compare/v0.2.2..v0.2.3) - 2025-03-03
4
18
 
5
19
  ### ⛰️ Features
6
20
 
@@ -111,6 +111,12 @@ docker build -t oe-python-template .
111
111
  docker run --env THE_VAR=THE_VALUE oe-python-template --help
112
112
  ```
113
113
 
114
+ ### Updating demo application
115
+
116
+ ```shell
117
+ copier copy -r HEAD . . --force --trust
118
+ ```
119
+
114
120
  ## Pull Request Guidelines
115
121
 
116
122
  - **Pre-Commit Hooks:** We use pre-commit hooks to ensure code quality. Please install the pre-commit hooks by running `uv run pre-commit install`. This ensure all tests, linting etc. pass locally before you can commit.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: oe-python-template
3
- Version: 0.2.3
3
+ Version: 0.2.4
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/
@@ -52,6 +52,7 @@ Requires-Dist: pydantic>=2.10.6
52
52
  Requires-Dist: python-dotenv>=1.0.1
53
53
  Requires-Dist: typer>=0.15.1
54
54
  Provides-Extra: examples
55
+ Requires-Dist: jinja2>=3.1.6; extra == 'examples'
55
56
  Requires-Dist: jupyter>=1.1.1; extra == 'examples'
56
57
  Requires-Dist: marimo>=0.11.13; extra == 'examples'
57
58
  Requires-Dist: streamlit>=1.42.2; extra == 'examples'
@@ -1,5 +1,16 @@
1
1
  [🧠 OE Python Template](https://oe-python-template.readthedocs.io/en/latest/)
2
2
 
3
+ ## [0.2.4](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template/compare/v0.2.3..v0.2.4) - 2025-03-07
4
+
5
+ ### ⛰️ Features
6
+
7
+ - *(mypy)* Introduce static type checker mypy - ([af56e82](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template/commit/af56e82581ee5bc157f44e181214751345a4bb52))
8
+
9
+ ### 🎨 Styling
10
+
11
+ - Remove commented out code - ([246feaa](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template/commit/246feaae1287037b78344d3430eff62b147628f4))
12
+
13
+
3
14
  ## [0.2.3](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template/compare/v0.2.2..v0.2.3) - 2025-03-03
4
15
 
5
16
  ### ⛰️ Features
@@ -0,0 +1 @@
1
+ 0.2.4
@@ -0,0 +1,8 @@
1
+ #!/bin/sh
2
+ VERSION_PART=${1:-patch}
3
+ uv run bump-my-version bump "$VERSION_PART" && git push
4
+ if echo "$VERSION_PART" | grep -qE '^[0-9]+\.[0-9]+\.[0-9]+$'; then
5
+ uv run bump-my-version bump --new-version "$VERSION_PART"
6
+ else
7
+ uv run bump-my-version bump "$VERSION_PART" && git push
8
+ fi
@@ -192,49 +192,3 @@ streamlit_project_key:
192
192
  {% if not streamlit_project_key %}
193
193
  Invalid streamlit.io project key
194
194
  {% endif %}
195
-
196
- # project_type:
197
- # type: str
198
- # help: Is this project a shared library or an app?
199
- # choices:
200
- # - application
201
- # - shared library
202
- # default: package
203
- #
204
- # python_version:
205
- # type: str
206
- # help: "{% if project_type == 'app' %}Which Python version should your app use?{% else %}What is the minimum Python version your package should support?{% endif %}"
207
- # default: "{% if project_type == 'app' %}3.12{% else %}3.10{% endif %}"
208
- #
209
- # ci:
210
- # type: str
211
- # help: Which CI/CD provider would you like to use?
212
- # choices:
213
- # GitHub Actions: github
214
- # GitLab CI/CD: gitlab
215
- # default: "{% if 'github' in project_url %}github{% else %}gitlab{% endif %}"
216
- # when: "{{ 'github' not in project_url and 'gitlab' not in project_url }}"
217
- #
218
- # typing:
219
- # type: str
220
- # help: Do you want to use optional or strict typing and linting?
221
- # choices:
222
- # Optional: optional
223
- # Strict: strict
224
- # default: optional
225
- #
226
- # with_conventional_commits:
227
- # type: bool
228
- # help: Do you want to follow the Conventional Commits standard (https://www.conventionalcommits.org) for your commit messages?
229
- # default: true
230
- #
231
- # with_fastapi_api:
232
- # type: bool
233
- # help: Does your app need a FastAPI API?
234
- # default: false
235
- # when: "{{ project_type == 'app' }}"
236
- #
237
- # with_typer_cli:
238
- # type: bool
239
- # help: Does your {{ project_type }} need a Typer CLI?
240
- # default: false
@@ -25,7 +25,7 @@ extensions = [
25
25
  project = "oe-python-template"
26
26
  author = "Helmut Hoffer von Ankershoffen"
27
27
  copyright = f" (c) 2025-{datetime.now(UTC).year}, {author}" # noqa: A001
28
- version = "0.2.3"
28
+ version = "0.2.4"
29
29
  release = version
30
30
  github_username = "helmut-hoffer-von-ankershoffen"
31
31
  github_repository = "oe-python-template"
@@ -74,11 +74,11 @@ html_static_path = ["_static"]
74
74
  html_logo = "../../logo.png"
75
75
  html_theme_options = {
76
76
  "announcement": (
77
- '<a target="_blank" href="https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template">GitHub</a> - '
78
- '<a target="_blank" href="https://pypi.org/project/oe-python-template">PyPI</a> - '
79
- '<a target="_blank" href="https://hub.docker.com/r/helmuthva/oe-python-template/tags">Docker</a> - '
77
+ '<a target="_blank" href="https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template">GitHub</a> - ' # noqa: E501
78
+ '<a target="_blank" href="https://pypi.org/project/oe-python-template">PyPI</a> - ' # noqa: E501
79
+ '<a target="_blank" href="https://hub.docker.com/r/helmuthva/oe-python-template/tags">Docker</a> - ' # noqa: E501
80
80
  '<a target="_blank" href="https://sonarcloud.io/summary/new_code?id=helmut-hoffer-von-ankershoffen_oe-python-template">SonarQube</a> - ' # noqa: E501
81
- '<a target="_blank" href="https://app.codecov.io/gh/helmut-hoffer-von-ankershoffen/oe-python-template">Codecov</a>'
81
+ '<a target="_blank" href="https://app.codecov.io/gh/helmut-hoffer-von-ankershoffen/oe-python-template">Codecov</a>' # noqa: E501
82
82
  ),
83
83
  }
84
84
 
@@ -15,7 +15,6 @@
15
15
  ],
16
16
  "source": [
17
17
  "from oe_python_template import Service\n",
18
- "\n",
19
18
  "service = Service()\n",
20
19
  "message = service.get_hello_world()\n",
21
20
  "message"
@@ -6,7 +6,6 @@ OE Python Template.
6
6
  """
7
7
 
8
8
  import streamlit as st
9
-
10
9
  from oe_python_template import (
11
10
  Service,
12
11
  __version__,
@@ -25,13 +25,13 @@ def _setup_venv(session: nox.Session, all_extras: bool = True) -> None:
25
25
 
26
26
 
27
27
  def _is_act_environment() -> bool:
28
- """Check if running in GitLab ACT environment.""" # noqa: DOC201
29
- return os.environ.get("GITLAB_WORKFLOW_RUNTIME") == "ACT"
28
+ """Check if running in Github ACT environment.""" # noqa: DOC201
29
+ return os.environ.get("GITHUB_WORKFLOW_RUNTIME") == "ACT"
30
30
 
31
31
 
32
32
  @nox.session(python=["3.13"])
33
33
  def lint(session: nox.Session) -> None:
34
- """Run code linting and formatting checks."""
34
+ """Run code formatting checks, linting, and static type checking."""
35
35
  _setup_venv(session)
36
36
  session.run("ruff", "check", ".")
37
37
  session.run(
@@ -40,6 +40,10 @@ def lint(session: nox.Session) -> None:
40
40
  "--check",
41
41
  ".",
42
42
  )
43
+ session.run(
44
+ "mypy",
45
+ "src"
46
+ )
43
47
 
44
48
 
45
49
  @nox.session(python=["3.13"])
@@ -108,6 +112,6 @@ def setup_dev(session: nox.Session) -> None:
108
112
  session.run("git", "add", ".", external=True)
109
113
  try:
110
114
  session.run("pre-commit", external=True)
111
- except Exception: # noqa: BLE001
115
+ except Exception: # noqa: BLE001
112
116
  session.log("pre-commit run failed, continuing anyway")
113
117
  session.run("git", "add", ".", external=True)
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "oe-python-template"
3
- version = "0.2.3"
3
+ version = "0.2.4"
4
4
  description = "🧠 Copier template to scaffold Python projects compliant with best practices and modern tooling."
5
5
  readme = "README.md"
6
6
  authors = [
@@ -61,7 +61,7 @@ requires = ["hatchling"]
61
61
  build-backend = "hatchling.build"
62
62
 
63
63
  [project.optional-dependencies]
64
- examples = ["streamlit>=1.42.2", "marimo>=0.11.13","jupyter>=1.1.1"]
64
+ examples = ["streamlit>=1.42.2", "marimo>=0.11.13","jupyter>=1.1.1", "jinja2 >=3.1.6"]
65
65
 
66
66
  [dependency-groups]
67
67
  dev = [
@@ -72,6 +72,7 @@ dev = [
72
72
  "enum-tools>=0.12.0",
73
73
  "furo>=2024.8.6",
74
74
  "git-cliff>=2.8.0",
75
+ "mypy>=1.5.0",
75
76
  "nox[uv]>=2025.2.9",
76
77
  "pip-audit>=2.8.0",
77
78
  "pip-licenses>=5.0.0",
@@ -167,6 +168,25 @@ docstring-code-format = true
167
168
  [tool.ruff.lint.pydocstyle]
168
169
  convention = "google"
169
170
 
171
+ [tool.mypy] # https://mypy.readthedocs.io/en/latest/config_file.html
172
+ junit_xml = "mypi_junit.xml"
173
+ plugins = "pydantic.mypy"
174
+ strict = true
175
+ disallow_subclassing_any = false
176
+ disallow_untyped_decorators = false
177
+ ignore_missing_imports = true
178
+ pretty = true
179
+ show_column_numbers = true
180
+ show_error_codes = true
181
+ show_error_context = true
182
+ warn_unreachable = true
183
+
184
+ [tool.pydantic-mypy] # https://docs.pydantic.dev/latest/integrations/mypy/#configuring-the-plugin
185
+ init_forbid_extra = true
186
+ init_typed = true
187
+ warn_required_dynamic_aliases = true
188
+ warn_untyped_fields = true
189
+
170
190
  [tool.pytest.ini_options]
171
191
  addopts = "-v --cov=oe_python_template --cov-report=term-missing --cov-report=xml:coverage.xml --cov-report=html:coverage_html"
172
192
  testpaths = ["tests"]
@@ -193,7 +213,7 @@ source = ["src/"]
193
213
 
194
214
 
195
215
  [tool.bumpversion]
196
- current_version = "0.2.3"
216
+ current_version = "0.2.4"
197
217
  parse = "(?P<major>\\d+)\\.(?P<minor>\\d+)\\.(?P<patch>\\d+)"
198
218
  serialize = ["{major}.{minor}.{patch}"]
199
219
  search = "{current_version}"
@@ -0,0 +1,5 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <testsuite errors="0" failures="0" name="mypy" skips="0" tests="1" time="2.363">
3
+ <testcase classname="mypy" file="mypy" line="1" name="mypy-py3_11-darwin" time="2.363">
4
+ </testcase>
5
+ </testsuite>
@@ -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.2.3
3
+ sonar.projectVersion=0.2.4
4
4
  sonar.projectDescription=OE Python Template
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
@@ -5,11 +5,12 @@ from .constants import (
5
5
  __project_path__,
6
6
  __version__,
7
7
  )
8
+
8
9
  from .service import Service
9
10
 
10
11
  __all__ = [
11
- "Service",
12
12
  "__project_name__",
13
13
  "__project_path__",
14
14
  "__version__",
15
+ "Service",
15
16
  ]
@@ -5,7 +5,7 @@ from typing import Annotated
5
5
  import typer
6
6
  from rich.console import Console
7
7
 
8
- from oe_python_template import Service, __version__
8
+ from oe_python_template import __version__, Service
9
9
 
10
10
  console = Console()
11
11
 
@@ -1,12 +1,10 @@
1
1
  """Service of OE Python Template."""
2
2
 
3
3
  import os
4
-
5
4
  from dotenv import load_dotenv
6
5
 
7
6
  load_dotenv()
8
- THE_VAR = os.getenv("THE_VAR", "not defined")
9
-
7
+ THE_VAR = os.getenv("THE_VAR","not defined")
10
8
 
11
9
  class Service:
12
10
  """Service of OE Python Template."""
@@ -1,2 +1,2 @@
1
- GITLAB_WORKFLOW_RUNTIME=ACT
1
+ GITHUB_WORKFLOW_RUNTIME=ACT
2
2
  ACTIONS_RUNTIME_TOKEN=TOKEN
@@ -21,7 +21,6 @@
21
21
  "charliermarsh.ruff",
22
22
  "codecov.codecov",
23
23
  "donjayamanne.python-environment-manager",
24
- "elagil.pre-commit-helper",
25
24
  "fill-labs.dependi",
26
25
  "github.vscode-github-actions",
27
26
  "github.copilot",
@@ -43,6 +43,7 @@ vulnerabilities.json
43
43
  licenses.json
44
44
  licenses-inverted.json
45
45
  sbom.json
46
+ mypi_junit.xml
46
47
 
47
48
  # IDE
48
49
  .idea/
@@ -6,6 +6,22 @@ default_install_hook_types:
6
6
  - post-rewrite
7
7
  fail_fast: true
8
8
  repos:
9
+ - repo: meta
10
+ hooks:
11
+ - id: check-useless-excludes
12
+ - repo: https://github.com/pre-commit/pygrep-hooks
13
+ rev: v1.10.0
14
+ hooks:
15
+ - id: python-check-blanket-noqa
16
+ - id: python-check-blanket-type-ignore
17
+ - id: python-check-mock-methods
18
+ - id: python-no-eval
19
+ - id: python-no-log-warn
20
+ - id: python-use-type-annotations
21
+ - id: rst-backticks
22
+ - id: rst-directive-colons
23
+ - id: rst-inline-touching-normal
24
+ - id: text-unicode-replacement-char
9
25
  - repo: https://github.com/pre-commit/pre-commit-hooks
10
26
  rev: v5.0.0
11
27
  hooks:
@@ -40,10 +56,9 @@ repos:
40
56
  - repo: https://github.com/Yelp/detect-secrets
41
57
  rev: v1.5.0
42
58
  hooks:
43
- - id: detect-secrets
59
+ - id: detect-secrets
44
60
  args: ['--baseline', '.secrets.baseline']
45
61
  additional_dependencies: ["gibberish-detector"]
46
- exclude: package.lock.json
47
62
  - repo: https://github.com/astral-sh/uv-pre-commit
48
63
  # uv version.
49
64
  rev: 0.5.8
@@ -3,7 +3,6 @@
3
3
  "**/__pycache__ ": true
4
4
  },
5
5
  "editor.formatOnSave": true,
6
- "editor.defaultFormatter": "charliermarsh.ruff",
7
6
  "terminal.integrated.scrollback": 100000,
8
7
  "[python]": {
9
8
  "editor.codeActionsOnSave": {
@@ -67,9 +66,5 @@
67
66
  "sonarlint.connectedMode.project": {
68
67
  "connectionId": "{{ org_name_kebab_case }}",
69
68
  "projectKey": "{{ org_name_kebab_case }}_{{ project_name_kebab_case }}"
70
- },
71
- "pre-commit-helper.runOnSave": "fixes",
72
- "pre-commit-helper.excludedHookIds": [
73
- "nox"
74
- ],
69
+ }
75
70
  }
@@ -111,6 +111,12 @@ docker build -t {{ project_name_kebab_case }} .
111
111
  docker run --env THE_VAR=THE_VALUE {{ pypi_distribution_name }} --help
112
112
  ```
113
113
 
114
+ ### Updating demo application
115
+
116
+ ```shell
117
+ copier copy -r HEAD . . --force --trust
118
+ ```
119
+
114
120
  ## Pull Request Guidelines
115
121
 
116
122
  - **Pre-Commit Hooks:** We use pre-commit hooks to ensure code quality. Please install the pre-commit hooks by running `uv run pre-commit install`. This ensure all tests, linting etc. pass locally before you can commit.
@@ -0,0 +1,8 @@
1
+ #!/bin/sh
2
+ VERSION_PART=${1:-patch}
3
+ uv run bump-my-version bump "$VERSION_PART" && git push
4
+ if echo "$VERSION_PART" | grep -qE '^[0-9]+\.[0-9]+\.[0-9]+$'; then
5
+ uv run bump-my-version bump --new-version "$VERSION_PART"
6
+ else
7
+ uv run bump-my-version bump "$VERSION_PART" && git push
8
+ fi
@@ -25,13 +25,13 @@ def _setup_venv(session: nox.Session, all_extras: bool = True) -> None:
25
25
 
26
26
 
27
27
  def _is_act_environment() -> bool:
28
- """Check if running in GitLab ACT environment.""" # noqa: DOC201
29
- return os.environ.get("GITLAB_WORKFLOW_RUNTIME") == "ACT"
28
+ """Check if running in Github ACT environment.""" # noqa: DOC201
29
+ return os.environ.get("GITHUB_WORKFLOW_RUNTIME") == "ACT"
30
30
 
31
31
 
32
32
  @nox.session(python=["3.13"])
33
33
  def lint(session: nox.Session) -> None:
34
- """Run code linting and formatting checks."""
34
+ """Run code formatting checks, linting, and static type checking."""
35
35
  _setup_venv(session)
36
36
  session.run("ruff", "check", ".")
37
37
  session.run(
@@ -40,6 +40,10 @@ def lint(session: nox.Session) -> None:
40
40
  "--check",
41
41
  ".",
42
42
  )
43
+ session.run(
44
+ "mypy",
45
+ "src"
46
+ )
43
47
 
44
48
 
45
49
  @nox.session(python=["3.13"])
@@ -61,7 +61,7 @@ requires = ["hatchling"]
61
61
  build-backend = "hatchling.build"
62
62
 
63
63
  [project.optional-dependencies]
64
- examples = ["streamlit>=1.42.2", "marimo>=0.11.13","jupyter>=1.1.1"]
64
+ examples = ["streamlit>=1.42.2", "marimo>=0.11.13","jupyter>=1.1.1", "jinja2 >=3.1.6"]
65
65
 
66
66
  [dependency-groups]
67
67
  dev = [
@@ -72,6 +72,7 @@ dev = [
72
72
  "enum-tools>=0.12.0",
73
73
  "furo>=2024.8.6",
74
74
  "git-cliff>=2.8.0",
75
+ "mypy>=1.5.0",
75
76
  "nox[uv]>=2025.2.9",
76
77
  "pip-audit>=2.8.0",
77
78
  "pip-licenses>=5.0.0",
@@ -167,6 +168,25 @@ docstring-code-format = true
167
168
  [tool.ruff.lint.pydocstyle]
168
169
  convention = "google"
169
170
 
171
+ [tool.mypy] # https://mypy.readthedocs.io/en/latest/config_file.html
172
+ junit_xml = "mypi_junit.xml"
173
+ plugins = "pydantic.mypy"
174
+ strict = true
175
+ disallow_subclassing_any = false
176
+ disallow_untyped_decorators = false
177
+ ignore_missing_imports = true
178
+ pretty = true
179
+ show_column_numbers = true
180
+ show_error_codes = true
181
+ show_error_context = true
182
+ warn_unreachable = true
183
+
184
+ [tool.pydantic-mypy] # https://docs.pydantic.dev/latest/integrations/mypy/#configuring-the-plugin
185
+ init_forbid_extra = true
186
+ init_typed = true
187
+ warn_required_dynamic_aliases = true
188
+ warn_untyped_fields = true
189
+
170
190
  [tool.pytest.ini_options]
171
191
  addopts = "-v --cov={{ project_name_snake_case }} --cov-report=term-missing --cov-report=xml:coverage.xml --cov-report=html:coverage_html"
172
192
  testpaths = ["tests"]
@@ -1,5 +1,8 @@
1
1
  """Tests to verify the CLI functionality of OE Python Template."""
2
2
 
3
+ import json
4
+ from unittest.mock import patch
5
+
3
6
  import pytest
4
7
  from typer.testing import CliRunner
5
8
 
@@ -10,13 +13,11 @@ from oe_python_template.cli import cli
10
13
 
11
14
  BUILT_WITH_LOVE = "built with love in Berlin"
12
15
 
13
-
14
16
  @pytest.fixture
15
17
  def runner() -> CliRunner:
16
18
  """Provide a CLI test runner fixture."""
17
19
  return CliRunner()
18
20
 
19
-
20
21
  def test_cli_built_with_love(runner) -> None:
21
22
  """Check epilog shown."""
22
23
  result = runner.invoke(cli, ["--help"])
@@ -24,14 +25,12 @@ def test_cli_built_with_love(runner) -> None:
24
25
  assert BUILT_WITH_LOVE in result.output
25
26
  assert __version__ in result.output
26
27
 
27
-
28
28
  def test_cli_echo(runner: CliRunner) -> None:
29
29
  """Check hello world printed."""
30
- result = runner.invoke(cli, ["echo", "4711"])
30
+ result = runner.invoke(cli, ["echo","4711"])
31
31
  assert result.exit_code == 0
32
32
  assert "4711" in result.output
33
33
 
34
-
35
34
  def test_cli_hello_world(runner: CliRunner) -> None:
36
35
  """Check hello world printed."""
37
36
  result = runner.invoke(cli, ["hello-world"])