oe-python-template 0.2.3__tar.gz → 0.2.5__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.5}/.act-env +1 -1
  2. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/.copier-answers.yml +1 -1
  3. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/.devcontainer/devcontainer.json +0 -1
  4. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/.gitignore +1 -0
  5. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/.pre-commit-config.yaml +17 -2
  6. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/.secrets.baseline +1 -1
  7. {oe_python_template-0.2.3/template → oe_python_template-0.2.5}/.vscode/settings.json +1 -6
  8. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/CHANGELOG.md +22 -1
  9. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/CONTRIBUTING.md +6 -0
  10. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/PKG-INFO +2 -1
  11. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/RELEASE_NOTES.md +18 -0
  12. oe_python_template-0.2.5/VERSION +1 -0
  13. oe_python_template-0.2.5/bump +7 -0
  14. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/copier.yml +0 -46
  15. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/docs/source/conf.py +1 -1
  16. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/noxfile.py +4 -3
  17. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/pyproject.toml +23 -3
  18. oe_python_template-0.2.5/reports/mypy.xml +5 -0
  19. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/sonar-project.properties +1 -1
  20. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/template/.act-env.jinja +1 -1
  21. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/template/.devcontainer/devcontainer.json.jinja +0 -1
  22. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/template/.gitignore.jinja +1 -0
  23. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/template/.pre-commit-config.yaml.jinja +17 -2
  24. {oe_python_template-0.2.3 → oe_python_template-0.2.5/template}/.vscode/settings.json +1 -6
  25. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/template/CONTRIBUTING.md.jinja +6 -0
  26. oe_python_template-0.2.5/template/bump.jinja +7 -0
  27. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/template/noxfile.py.jinja +7 -3
  28. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/template/pyproject.toml.jinja +21 -1
  29. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/uv.lock +48 -4
  30. oe_python_template-0.2.3/VERSION +0 -1
  31. oe_python_template-0.2.3/bump +0 -3
  32. oe_python_template-0.2.3/template/bump.jinja +0 -3
  33. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/.act-secret +0 -0
  34. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/.devcontainer/Dockerfile +0 -0
  35. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/.devcontainer/onCreateCommand +0 -0
  36. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/.devcontainer/postAttachCommand +0 -0
  37. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/.devcontainer/postCreateCommand +0 -0
  38. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/.env.example +0 -0
  39. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/.github/workflows/docker-image-build-publish.yml +0 -0
  40. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/.github/workflows/package-build-publish-release.yml +0 -0
  41. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/.github/workflows/test-and-report.yml +0 -0
  42. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/.python-version +0 -0
  43. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/.readthedocs.yml +0 -0
  44. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/.vscode/extensions.json +0 -0
  45. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/CODEOWNERS +0 -0
  46. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/Dockerfile +0 -0
  47. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/LICENSE +0 -0
  48. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/README.md +0 -0
  49. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/SERVICE_CONNECTIONS.md +0 -0
  50. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/_readme_footer.md +0 -0
  51. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/_readme_header.md +0 -0
  52. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/_readme_main.md +0 -0
  53. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/bin/git-cliff +0 -0
  54. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/codecov.yml +0 -0
  55. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/compose.yaml +0 -0
  56. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/docs/Makefile +0 -0
  57. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/docs/make.bat +0 -0
  58. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/docs/source/_static/.keep +0 -0
  59. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/docs/source/contributing.rst +0 -0
  60. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/docs/source/index.rst +0 -0
  61. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/docs/source/latexmkrc +0 -0
  62. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/docs/source/main.rst +0 -0
  63. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/docs/source/reference.rst +0 -0
  64. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/docs/source/release-notes.rst +0 -0
  65. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/examples/__init__.py +0 -0
  66. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/examples/jupyter.ipynb +0 -0
  67. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/examples/notebook.ipynb +0 -0
  68. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/examples/notebook.py +0 -0
  69. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/examples/script.py +0 -0
  70. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/examples/streamlit.py +0 -0
  71. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/git-cliff-2.7.0/CHANGELOG.md +0 -0
  72. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/git-cliff-2.7.0/LICENSE-APACHE +0 -0
  73. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/git-cliff-2.7.0/LICENSE-MIT +0 -0
  74. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/git-cliff-2.7.0/README.md +0 -0
  75. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/git-cliff-2.7.0/completions/_git-cliff +0 -0
  76. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/git-cliff-2.7.0/completions/_git-cliff.ps1 +0 -0
  77. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/git-cliff-2.7.0/completions/git-cliff.bash +0 -0
  78. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/git-cliff-2.7.0/completions/git-cliff.elv +0 -0
  79. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/git-cliff-2.7.0/completions/git-cliff.fish +0 -0
  80. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/git-cliff-2.7.0/git-cliff-completions +0 -0
  81. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/git-cliff-2.7.0/git-cliff-mangen +0 -0
  82. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/git-cliff-2.7.0/man/git-cliff.1 +0 -0
  83. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/git-cliff-2.7.0-x86_64-unknown-linux-gnu.tar.gz +0 -0
  84. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/github-action-run +0 -0
  85. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/latexmkrc +0 -0
  86. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/logo.png +0 -0
  87. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/src/oe_python_template/__init__.py +0 -0
  88. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/src/oe_python_template/cli.py +0 -0
  89. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/src/oe_python_template/constants.py +0 -0
  90. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/src/oe_python_template/service.py +0 -0
  91. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/template/.act-secret.jinja +0 -0
  92. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/template/.devcontainer/Dockerfile.jinja +0 -0
  93. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/template/.devcontainer/onCreateCommand.jinja +0 -0
  94. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/template/.devcontainer/postAttachCommand.jinja +0 -0
  95. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/template/.devcontainer/postCreateCommand.jinja +0 -0
  96. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/template/.env.example.jinja +0 -0
  97. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/template/.github/workflows/docker-image-build-publish.yml.jinja +0 -0
  98. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/template/.github/workflows/package-build-publish-release.yml.jinja +0 -0
  99. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/template/.github/workflows/test-and-report.yml.jinja +0 -0
  100. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/template/.python-version +0 -0
  101. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/template/.readthedocs.yml.jinja +0 -0
  102. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/template/.vscode/extensions.json +0 -0
  103. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/template/CHANGELOG.md +0 -0
  104. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/template/CODEOWNERS.jinja +0 -0
  105. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/template/Dockerfile.jinja +0 -0
  106. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/template/LICENSE.jinja +0 -0
  107. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/template/SERVICE_CONNECTIONS.md.jinja +0 -0
  108. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/template/VERSION +0 -0
  109. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/template/_readme_footer.md.jinja +0 -0
  110. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/template/_readme_header.md.jinja +0 -0
  111. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/template/_readme_main.md.jinja +0 -0
  112. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/template/codecov.yml.jinja +0 -0
  113. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/template/compose.yaml.jinja +0 -0
  114. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/template/docs/Makefile.jinja +0 -0
  115. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/template/docs/make.bat.jinja +0 -0
  116. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/template/docs/source/_static/.keep +0 -0
  117. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/template/docs/source/conf.py.jinja +0 -0
  118. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/template/docs/source/contributing.rst.jinja +0 -0
  119. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/template/docs/source/index.rst.jinja +0 -0
  120. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/template/docs/source/latexmkrc.jinja +0 -0
  121. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/template/docs/source/main.rst.jinja +0 -0
  122. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/template/docs/source/reference.rst.jinja +0 -0
  123. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/template/docs/source/release-notes.rst.jinja +0 -0
  124. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/template/examples/__init__.py.jinja +0 -0
  125. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/template/examples/notebook.ipynb.jinja +0 -0
  126. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/template/examples/notebook.py.jinja +0 -0
  127. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/template/examples/script.py.jinja +0 -0
  128. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/template/examples/streamlit.py.jinja +0 -0
  129. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/template/github-action-run.jinja +0 -0
  130. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/template/latexmkrc.jinja +0 -0
  131. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/template/logo.png +0 -0
  132. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/template/sonar-project.properties.jinja +0 -0
  133. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/template/src/{{ project_name_snake_case }}/__init__.py.jinja +0 -0
  134. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/template/src/{{ project_name_snake_case }}/cli.py.jinja +0 -0
  135. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/template/src/{{ project_name_snake_case }}/constants.py.jinja +0 -0
  136. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/template/src/{{ project_name_snake_case }}/service.py.jinja +0 -0
  137. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/template/tests/__init__.py.jinja +0 -0
  138. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/template/tests/cli_test.py.jinja +0 -0
  139. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/template/tests/fixtures/.keep +0 -0
  140. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/template/{{_copier_conf.answers_file}}.jinja +0 -0
  141. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/tests/__init__.py +0 -0
  142. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/tests/cli_test.py +0 -0
  143. {oe_python_template-0.2.3 → oe_python_template-0.2.5}/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.4-1-g698be6f
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-07T08:01:57Z"
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,27 @@
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.5](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template/compare/v0.2.4..0.2.5) - 2025-03-07
4
+
5
+ ### ⛰️ Features
6
+
7
+ - *(mypy)* Introduce static type checker mypy - ([ace8dc2](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template/commit/ace8dc241c44edfe5ef8e9dbe4f1db9dbc1b70af))
8
+
9
+
10
+ ## [0.2.4](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template/compare/v0.2.3..v0.2.4) - 2025-03-07
11
+
12
+ ### ⛰️ Features
13
+
14
+ - *(mypy)* Introduce static type checker mypy - ([af56e82](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template/commit/af56e82581ee5bc157f44e181214751345a4bb52))
15
+
16
+ ### 🎨 Styling
17
+
18
+ - Remove commented out code - ([246feaa](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template/commit/246feaae1287037b78344d3430eff62b147628f4))
19
+
20
+ ## New Contributors ❤️
21
+
22
+ * @helmut-hoffer-von-ankershoffen made their first contribution
23
+
24
+ ## [0.2.3](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template/compare/v0.2.2..v0.2.3) - 2025-03-03
4
25
 
5
26
  ### ⛰️ Features
6
27
 
@@ -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.5
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,23 @@
1
1
  [🧠 OE Python Template](https://oe-python-template.readthedocs.io/en/latest/)
2
2
 
3
+ ## [0.2.5](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template/compare/v0.2.4..v0.2.5) - 2025-03-07
4
+
5
+ ### ⛰️ Features
6
+
7
+ - *(mypy)* Introduce static type checker mypy - ([ace8dc2](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template/commit/ace8dc241c44edfe5ef8e9dbe4f1db9dbc1b70af))
8
+
9
+
10
+ ## [0.2.4](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template/compare/v0.2.3..v0.2.4) - 2025-03-07
11
+
12
+ ### ⛰️ Features
13
+
14
+ - *(mypy)* Introduce static type checker mypy - ([af56e82](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template/commit/af56e82581ee5bc157f44e181214751345a4bb52))
15
+
16
+ ### 🎨 Styling
17
+
18
+ - Remove commented out code - ([246feaa](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template/commit/246feaae1287037b78344d3430eff62b147628f4))
19
+
20
+
3
21
  ## [0.2.3](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template/compare/v0.2.2..v0.2.3) - 2025-03-03
4
22
 
5
23
  ### ⛰️ Features
@@ -0,0 +1 @@
1
+ 0.2.5
@@ -0,0 +1,7 @@
1
+ #!/bin/sh
2
+ VERSION_PART=${1:-patch}
3
+ if echo "$VERSION_PART" | grep -qE '^[0-9]+\.[0-9]+\.[0-9]+$'; then
4
+ uv run bump-my-version bump --new-version "$VERSION_PART" && git push
5
+ else
6
+ uv run bump-my-version bump "$VERSION_PART" && git push
7
+ 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.5"
29
29
  release = version
30
30
  github_username = "helmut-hoffer-von-ankershoffen"
31
31
  github_repository = "oe-python-template"
@@ -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,7 @@ def lint(session: nox.Session) -> None:
40
40
  "--check",
41
41
  ".",
42
42
  )
43
+ session.run("mypy", "src")
43
44
 
44
45
 
45
46
  @nox.session(python=["3.13"])
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "oe-python-template"
3
- version = "0.2.3"
3
+ version = "0.2.5"
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.5"
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.5
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
@@ -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,7 @@
1
+ #!/bin/sh
2
+ VERSION_PART=${1:-patch}
3
+ if echo "$VERSION_PART" | grep -qE '^[0-9]+\.[0-9]+\.[0-9]+$'; then
4
+ uv run bump-my-version bump --new-version "$VERSION_PART" && git push
5
+ else
6
+ uv run bump-my-version bump "$VERSION_PART" && git push
7
+ 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"]
@@ -1102,14 +1102,14 @@ wheels = [
1102
1102
 
1103
1103
  [[package]]
1104
1104
  name = "jinja2"
1105
- version = "3.1.5"
1105
+ version = "3.1.6"
1106
1106
  source = { registry = "https://pypi.org/simple" }
1107
1107
  dependencies = [
1108
1108
  { name = "markupsafe" },
1109
1109
  ]
1110
- sdist = { url = "https://files.pythonhosted.org/packages/af/92/b3130cbbf5591acf9ade8708c365f3238046ac7cb8ccba6e81abccb0ccff/jinja2-3.1.5.tar.gz", hash = "sha256:8fefff8dc3034e27bb80d67c671eb8a9bc424c0ef4c0826edbff304cceff43bb", size = 244674 }
1110
+ sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115 }
1111
1111
  wheels = [
1112
- { url = "https://files.pythonhosted.org/packages/bd/0f/2ba5fbcd631e3e88689309dbe978c5769e883e4b84ebfe7da30b43275c5a/jinja2-3.1.5-py3-none-any.whl", hash = "sha256:aba0f4dc9ed8013c424088f68a5c226f7d6097ed89b246d7749c2ec4175c6adb", size = 134596 },
1112
+ { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899 },
1113
1113
  ]
1114
1114
 
1115
1115
  [[package]]
@@ -1736,6 +1736,46 @@ wheels = [
1736
1736
  { url = "https://files.pythonhosted.org/packages/b6/bc/8bd826dd03e022153bfa1766dcdec4976d6c818865ed54223d71f07862b3/msgpack-1.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:bce7d9e614a04d0883af0b3d4d501171fbfca038f12c77fa838d9f198147a23f", size = 75140 },
1737
1737
  ]
1738
1738
 
1739
+ [[package]]
1740
+ name = "mypy"
1741
+ version = "1.15.0"
1742
+ source = { registry = "https://pypi.org/simple" }
1743
+ dependencies = [
1744
+ { name = "mypy-extensions" },
1745
+ { name = "typing-extensions" },
1746
+ ]
1747
+ sdist = { url = "https://files.pythonhosted.org/packages/ce/43/d5e49a86afa64bd3839ea0d5b9c7103487007d728e1293f52525d6d5486a/mypy-1.15.0.tar.gz", hash = "sha256:404534629d51d3efea5c800ee7c42b72a6554d6c400e6a79eafe15d11341fd43", size = 3239717 }
1748
+ wheels = [
1749
+ { url = "https://files.pythonhosted.org/packages/03/bc/f6339726c627bd7ca1ce0fa56c9ae2d0144604a319e0e339bdadafbbb599/mypy-1.15.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2922d42e16d6de288022e5ca321cd0618b238cfc5570e0263e5ba0a77dbef56f", size = 10662338 },
1750
+ { url = "https://files.pythonhosted.org/packages/e2/90/8dcf506ca1a09b0d17555cc00cd69aee402c203911410136cd716559efe7/mypy-1.15.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2ee2d57e01a7c35de00f4634ba1bbf015185b219e4dc5909e281016df43f5ee5", size = 9787540 },
1751
+ { url = "https://files.pythonhosted.org/packages/05/05/a10f9479681e5da09ef2f9426f650d7b550d4bafbef683b69aad1ba87457/mypy-1.15.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:973500e0774b85d9689715feeffcc980193086551110fd678ebe1f4342fb7c5e", size = 11538051 },
1752
+ { url = "https://files.pythonhosted.org/packages/e9/9a/1f7d18b30edd57441a6411fcbc0c6869448d1a4bacbaee60656ac0fc29c8/mypy-1.15.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5a95fb17c13e29d2d5195869262f8125dfdb5c134dc8d9a9d0aecf7525b10c2c", size = 12286751 },
1753
+ { url = "https://files.pythonhosted.org/packages/72/af/19ff499b6f1dafcaf56f9881f7a965ac2f474f69f6f618b5175b044299f5/mypy-1.15.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1905f494bfd7d85a23a88c5d97840888a7bd516545fc5aaedff0267e0bb54e2f", size = 12421783 },
1754
+ { url = "https://files.pythonhosted.org/packages/96/39/11b57431a1f686c1aed54bf794870efe0f6aeca11aca281a0bd87a5ad42c/mypy-1.15.0-cp311-cp311-win_amd64.whl", hash = "sha256:c9817fa23833ff189db061e6d2eff49b2f3b6ed9856b4a0a73046e41932d744f", size = 9265618 },
1755
+ { url = "https://files.pythonhosted.org/packages/98/3a/03c74331c5eb8bd025734e04c9840532226775c47a2c39b56a0c8d4f128d/mypy-1.15.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:aea39e0583d05124836ea645f412e88a5c7d0fd77a6d694b60d9b6b2d9f184fd", size = 10793981 },
1756
+ { url = "https://files.pythonhosted.org/packages/f0/1a/41759b18f2cfd568848a37c89030aeb03534411eef981df621d8fad08a1d/mypy-1.15.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2f2147ab812b75e5b5499b01ade1f4a81489a147c01585cda36019102538615f", size = 9749175 },
1757
+ { url = "https://files.pythonhosted.org/packages/12/7e/873481abf1ef112c582db832740f4c11b2bfa510e829d6da29b0ab8c3f9c/mypy-1.15.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ce436f4c6d218a070048ed6a44c0bbb10cd2cc5e272b29e7845f6a2f57ee4464", size = 11455675 },
1758
+ { url = "https://files.pythonhosted.org/packages/b3/d0/92ae4cde706923a2d3f2d6c39629134063ff64b9dedca9c1388363da072d/mypy-1.15.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8023ff13985661b50a5928fc7a5ca15f3d1affb41e5f0a9952cb68ef090b31ee", size = 12410020 },
1759
+ { url = "https://files.pythonhosted.org/packages/46/8b/df49974b337cce35f828ba6fda228152d6db45fed4c86ba56ffe442434fd/mypy-1.15.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1124a18bc11a6a62887e3e137f37f53fbae476dc36c185d549d4f837a2a6a14e", size = 12498582 },
1760
+ { url = "https://files.pythonhosted.org/packages/13/50/da5203fcf6c53044a0b699939f31075c45ae8a4cadf538a9069b165c1050/mypy-1.15.0-cp312-cp312-win_amd64.whl", hash = "sha256:171a9ca9a40cd1843abeca0e405bc1940cd9b305eaeea2dda769ba096932bb22", size = 9366614 },
1761
+ { url = "https://files.pythonhosted.org/packages/6a/9b/fd2e05d6ffff24d912f150b87db9e364fa8282045c875654ce7e32fffa66/mypy-1.15.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:93faf3fdb04768d44bf28693293f3904bbb555d076b781ad2530214ee53e3445", size = 10788592 },
1762
+ { url = "https://files.pythonhosted.org/packages/74/37/b246d711c28a03ead1fd906bbc7106659aed7c089d55fe40dd58db812628/mypy-1.15.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:811aeccadfb730024c5d3e326b2fbe9249bb7413553f15499a4050f7c30e801d", size = 9753611 },
1763
+ { url = "https://files.pythonhosted.org/packages/a6/ac/395808a92e10cfdac8003c3de9a2ab6dc7cde6c0d2a4df3df1b815ffd067/mypy-1.15.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:98b7b9b9aedb65fe628c62a6dc57f6d5088ef2dfca37903a7d9ee374d03acca5", size = 11438443 },
1764
+ { url = "https://files.pythonhosted.org/packages/d2/8b/801aa06445d2de3895f59e476f38f3f8d610ef5d6908245f07d002676cbf/mypy-1.15.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c43a7682e24b4f576d93072216bf56eeff70d9140241f9edec0c104d0c515036", size = 12402541 },
1765
+ { url = "https://files.pythonhosted.org/packages/c7/67/5a4268782eb77344cc613a4cf23540928e41f018a9a1ec4c6882baf20ab8/mypy-1.15.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:baefc32840a9f00babd83251560e0ae1573e2f9d1b067719479bfb0e987c6357", size = 12494348 },
1766
+ { url = "https://files.pythonhosted.org/packages/83/3e/57bb447f7bbbfaabf1712d96f9df142624a386d98fb026a761532526057e/mypy-1.15.0-cp313-cp313-win_amd64.whl", hash = "sha256:b9378e2c00146c44793c98b8d5a61039a048e31f429fb0eb546d93f4b000bedf", size = 9373648 },
1767
+ { url = "https://files.pythonhosted.org/packages/09/4e/a7d65c7322c510de2c409ff3828b03354a7c43f5a8ed458a7a131b41c7b9/mypy-1.15.0-py3-none-any.whl", hash = "sha256:5469affef548bd1895d86d3bf10ce2b44e33d86923c29e4d675b3e323437ea3e", size = 2221777 },
1768
+ ]
1769
+
1770
+ [[package]]
1771
+ name = "mypy-extensions"
1772
+ version = "1.0.0"
1773
+ source = { registry = "https://pypi.org/simple" }
1774
+ sdist = { url = "https://files.pythonhosted.org/packages/98/a4/1ab47638b92648243faf97a5aeb6ea83059cc3624972ab6b8d2316078d3f/mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782", size = 4433 }
1775
+ wheels = [
1776
+ { url = "https://files.pythonhosted.org/packages/2a/e2/5d3f6ada4297caebe1a2add3b126fe800c96f56dbe5d1988a2cbe0b267aa/mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d", size = 4695 },
1777
+ ]
1778
+
1739
1779
  [[package]]
1740
1780
  name = "narwhals"
1741
1781
  version = "1.28.0"
@@ -1927,7 +1967,7 @@ wheels = [
1927
1967
 
1928
1968
  [[package]]
1929
1969
  name = "oe-python-template"
1930
- version = "0.2.3"
1970
+ version = "0.2.5"
1931
1971
  source = { editable = "." }
1932
1972
  dependencies = [
1933
1973
  { name = "pydantic" },
@@ -1937,6 +1977,7 @@ dependencies = [
1937
1977
 
1938
1978
  [package.optional-dependencies]
1939
1979
  examples = [
1980
+ { name = "jinja2" },
1940
1981
  { name = "jupyter" },
1941
1982
  { name = "marimo" },
1942
1983
  { name = "streamlit" },
@@ -1952,6 +1993,7 @@ dev = [
1952
1993
  { name = "furo" },
1953
1994
  { name = "git-cliff" },
1954
1995
  { name = "matplotlib" },
1996
+ { name = "mypy" },
1955
1997
  { name = "nox", extra = ["uv"] },
1956
1998
  { name = "pip-audit" },
1957
1999
  { name = "pip-licenses" },
@@ -1979,6 +2021,7 @@ dev = [
1979
2021
 
1980
2022
  [package.metadata]
1981
2023
  requires-dist = [
2024
+ { name = "jinja2", marker = "extra == 'examples'", specifier = ">=3.1.6" },
1982
2025
  { name = "jupyter", marker = "extra == 'examples'", specifier = ">=1.1.1" },
1983
2026
  { name = "marimo", marker = "extra == 'examples'", specifier = ">=0.11.13" },
1984
2027
  { name = "pydantic", specifier = ">=2.10.6" },
@@ -1998,6 +2041,7 @@ dev = [
1998
2041
  { name = "furo", specifier = ">=2024.8.6" },
1999
2042
  { name = "git-cliff", specifier = ">=2.8.0" },
2000
2043
  { name = "matplotlib", specifier = ">=3.10.0" },
2044
+ { name = "mypy", specifier = ">=1.5.0" },
2001
2045
  { name = "nox", extras = ["uv"], specifier = ">=2025.2.9" },
2002
2046
  { name = "pip-audit", specifier = ">=2.8.0" },
2003
2047
  { name = "pip-licenses", specifier = ">=5.0.0" },
@@ -1 +0,0 @@
1
- 0.2.3
@@ -1,3 +0,0 @@
1
- #!/bin/sh
2
- VERSION_PART=${1:-patch}
3
- uv run bump-my-version bump "$VERSION_PART" && git push
@@ -1,3 +0,0 @@
1
- #!/bin/sh
2
- VERSION_PART=${1:-patch}
3
- uv run bump-my-version bump "$VERSION_PART" && git push