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.
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/.act-env +1 -1
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/.copier-answers.yml +1 -1
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/.devcontainer/devcontainer.json +0 -1
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/.gitignore +1 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/.pre-commit-config.yaml +17 -2
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/.secrets.baseline +1 -1
- {oe_python_template-0.2.3/template → oe_python_template-0.2.4}/.vscode/settings.json +1 -6
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/CHANGELOG.md +15 -1
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/CONTRIBUTING.md +6 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/PKG-INFO +2 -1
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/RELEASE_NOTES.md +11 -0
- oe_python_template-0.2.4/VERSION +1 -0
- oe_python_template-0.2.4/bump +8 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/copier.yml +0 -46
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/docs/source/conf.py +5 -5
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/examples/notebook.ipynb +0 -1
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/examples/streamlit.py +0 -1
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/noxfile.py +8 -4
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/pyproject.toml +23 -3
- oe_python_template-0.2.4/reports/mypy.xml +5 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/sonar-project.properties +1 -1
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/src/oe_python_template/__init__.py +2 -1
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/src/oe_python_template/cli.py +1 -1
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/src/oe_python_template/service.py +1 -3
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/.act-env.jinja +1 -1
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/.devcontainer/devcontainer.json.jinja +0 -1
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/.gitignore.jinja +1 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/.pre-commit-config.yaml.jinja +17 -2
- {oe_python_template-0.2.3 → oe_python_template-0.2.4/template}/.vscode/settings.json +1 -6
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/CONTRIBUTING.md.jinja +6 -0
- oe_python_template-0.2.4/template/bump.jinja +8 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/noxfile.py.jinja +7 -3
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/pyproject.toml.jinja +21 -1
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/tests/cli_test.py +4 -5
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/uv.lock +48 -4
- oe_python_template-0.2.3/VERSION +0 -1
- oe_python_template-0.2.3/bump +0 -3
- oe_python_template-0.2.3/template/bump.jinja +0 -3
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/.act-secret +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/.devcontainer/Dockerfile +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/.devcontainer/onCreateCommand +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/.devcontainer/postAttachCommand +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/.devcontainer/postCreateCommand +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/.env.example +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/.github/workflows/docker-image-build-publish.yml +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/.github/workflows/package-build-publish-release.yml +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/.github/workflows/test-and-report.yml +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/.python-version +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/.readthedocs.yml +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/.vscode/extensions.json +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/CODEOWNERS +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/Dockerfile +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/LICENSE +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/README.md +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/SERVICE_CONNECTIONS.md +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/_readme_footer.md +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/_readme_header.md +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/_readme_main.md +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/bin/git-cliff +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/codecov.yml +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/compose.yaml +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/docs/Makefile +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/docs/make.bat +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/docs/source/_static/.keep +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/docs/source/contributing.rst +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/docs/source/index.rst +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/docs/source/latexmkrc +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/docs/source/main.rst +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/docs/source/reference.rst +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/docs/source/release-notes.rst +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/examples/__init__.py +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/examples/jupyter.ipynb +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/examples/notebook.py +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/examples/script.py +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/git-cliff-2.7.0/CHANGELOG.md +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/git-cliff-2.7.0/LICENSE-APACHE +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/git-cliff-2.7.0/LICENSE-MIT +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/git-cliff-2.7.0/README.md +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/git-cliff-2.7.0/completions/_git-cliff +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/git-cliff-2.7.0/completions/_git-cliff.ps1 +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/git-cliff-2.7.0/completions/git-cliff.bash +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/git-cliff-2.7.0/completions/git-cliff.elv +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/git-cliff-2.7.0/completions/git-cliff.fish +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/git-cliff-2.7.0/git-cliff-completions +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/git-cliff-2.7.0/git-cliff-mangen +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/git-cliff-2.7.0/man/git-cliff.1 +0 -0
- {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
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/github-action-run +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/latexmkrc +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/logo.png +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/src/oe_python_template/constants.py +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/.act-secret.jinja +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/.devcontainer/Dockerfile.jinja +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/.devcontainer/onCreateCommand.jinja +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/.devcontainer/postAttachCommand.jinja +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/.devcontainer/postCreateCommand.jinja +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/.env.example.jinja +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/.github/workflows/docker-image-build-publish.yml.jinja +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/.github/workflows/package-build-publish-release.yml.jinja +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/.github/workflows/test-and-report.yml.jinja +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/.python-version +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/.readthedocs.yml.jinja +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/.vscode/extensions.json +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/CHANGELOG.md +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/CODEOWNERS.jinja +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/Dockerfile.jinja +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/LICENSE.jinja +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/SERVICE_CONNECTIONS.md.jinja +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/VERSION +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/_readme_footer.md.jinja +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/_readme_header.md.jinja +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/_readme_main.md.jinja +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/codecov.yml.jinja +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/compose.yaml.jinja +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/docs/Makefile.jinja +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/docs/make.bat.jinja +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/docs/source/_static/.keep +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/docs/source/conf.py.jinja +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/docs/source/contributing.rst.jinja +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/docs/source/index.rst.jinja +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/docs/source/latexmkrc.jinja +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/docs/source/main.rst.jinja +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/docs/source/reference.rst.jinja +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/docs/source/release-notes.rst.jinja +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/examples/__init__.py.jinja +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/examples/notebook.ipynb.jinja +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/examples/notebook.py.jinja +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/examples/script.py.jinja +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/examples/streamlit.py.jinja +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/github-action-run.jinja +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/latexmkrc.jinja +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/logo.png +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/sonar-project.properties.jinja +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/src/{{ project_name_snake_case }}/__init__.py.jinja +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/src/{{ project_name_snake_case }}/cli.py.jinja +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/src/{{ project_name_snake_case }}/constants.py.jinja +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/src/{{ project_name_snake_case }}/service.py.jinja +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/tests/__init__.py.jinja +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/tests/cli_test.py.jinja +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/tests/fixtures/.keep +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/{{_copier_conf.answers_file}}.jinja +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/tests/__init__.py +0 -0
- {oe_python_template-0.2.3 → oe_python_template-0.2.4}/tests/fixtures/.keep +0 -0
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
GITHUB_WORKFLOW_RUNTIME=ACT
|
|
2
2
|
ACTIONS_RUNTIME_TOKEN=TOKEN
|
|
@@ -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
|
-
|
|
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
|
}
|
|
@@ -1,6 +1,20 @@
|
|
|
1
1
|
[🧠 OE Python Template](https://oe-python-template.readthedocs.io/en/latest/)
|
|
2
2
|
|
|
3
|
-
## [0.2.
|
|
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
|
+
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.
|
|
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
|
|
|
@@ -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
|
|
29
|
-
return os.environ.get("
|
|
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
|
|
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:
|
|
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
|
+
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.
|
|
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}"
|
|
@@ -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
|
+
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
|
|
@@ -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",
|
|
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
|
-
|
|
1
|
+
GITHUB_WORKFLOW_RUNTIME=ACT
|
|
2
2
|
ACTIONS_RUNTIME_TOKEN=TOKEN
|
{oe_python_template-0.2.3 → oe_python_template-0.2.4}/template/.pre-commit-config.yaml.jinja
RENAMED
|
@@ -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
|
-
|
|
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
|
|
29
|
-
return os.environ.get("
|
|
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
|
|
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",
|
|
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"])
|