oe-python-template-example 0.1.13__tar.gz → 0.1.15__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_example-0.1.13 → oe_python_template_example-0.1.15}/.copier-answers.yml +1 -1
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/.github/workflows/package-build-publish-release.yml +1 -1
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/.gitignore +5 -10
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/CHANGELOG.md +8 -1
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/CONTRIBUTING.md +20 -8
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/PKG-INFO +7 -9
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/README.md +6 -8
- oe_python_template_example-0.1.15/RELEASE_NOTES.md +8 -0
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/SECURITY.md +3 -3
- oe_python_template_example-0.1.15/VERSION +1 -0
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/_readme_header.md +3 -2
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/_readme_main.md +3 -6
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/docs/source/_static/openapi_v1.yaml +32 -16
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/docs/source/_static/openapi_v2.yaml +32 -16
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/docs/source/conf.py +1 -1
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/docs/source/index.rst +2 -1
- oe_python_template_example-0.1.15/docs/source/security.rst +1 -0
- oe_python_template_example-0.1.15/n +27 -0
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/noxfile.py +75 -18
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/pyproject.toml +5 -5
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/sonar-project.properties +1 -1
- oe_python_template_example-0.1.15/tests/fixtures/.keep +0 -0
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/uv.lock +1 -1
- oe_python_template_example-0.1.13/RELEASE_NOTES.md +0 -8
- oe_python_template_example-0.1.13/VERSION +0 -1
- oe_python_template_example-0.1.13/bump +0 -7
- oe_python_template_example-0.1.13/docs/source/latexmkrc +0 -11
- oe_python_template_example-0.1.13/latexmkrc +0 -11
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/.act-env-public +0 -0
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/.devcontainer/Dockerfile +0 -0
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/.devcontainer/devcontainer.json +0 -0
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/.devcontainer/onCreateCommand +0 -0
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/.devcontainer/postAttachCommand +0 -0
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/.devcontainer/postCreateCommand +0 -0
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/.env.example +0 -0
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/.github/dependabot.yml +0 -0
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/.github/workflows/codeql.yml +0 -0
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/.github/workflows/docker-image-build-publish.yml +0 -0
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/.github/workflows/test-and-report.yml +0 -0
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/.pre-commit-config.yaml +0 -0
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/.python-version +0 -0
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/.readthedocs.yml +0 -0
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/.secrets.baseline +0 -0
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/.vscode/extensions.json +0 -0
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/.vscode/settings.json +0 -0
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/CODEOWNERS +0 -0
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/Dockerfile +0 -0
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/LICENSE +0 -0
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/SERVICE_CONNECTIONS.md +0 -0
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/_readme_footer.md +0 -0
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/bin/git-cliff +0 -0
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/codecov.yml +0 -0
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/compose.yaml +0 -0
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/docs/Makefile +0 -0
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/docs/make.bat +0 -0
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/docs/source/_static/.keep +0 -0
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/docs/source/_static/openapi.json +0 -0
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/docs/source/_static/openapi.yaml +0 -0
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/docs/source/_static/openapi_v1.json +0 -0
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/docs/source/_static/openapi_v2.json +0 -0
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/docs/source/api_v1.rst +0 -0
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/docs/source/api_v2.rst +0 -0
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/docs/source/contributing.rst +0 -0
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/docs/source/main.rst +0 -0
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/docs/source/reference.rst +0 -0
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/docs/source/release-notes.rst +0 -0
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/examples/__init__.py +0 -0
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/examples/notebook.ipynb +0 -0
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/examples/notebook.py +0 -0
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/examples/script.py +0 -0
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/examples/streamlit.py +0 -0
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/git-cliff-2.7.0/CHANGELOG.md +0 -0
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/git-cliff-2.7.0/LICENSE-APACHE +0 -0
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/git-cliff-2.7.0/LICENSE-MIT +0 -0
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/git-cliff-2.7.0/README.md +0 -0
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/git-cliff-2.7.0/completions/_git-cliff +0 -0
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/git-cliff-2.7.0/completions/_git-cliff.ps1 +0 -0
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/git-cliff-2.7.0/completions/git-cliff.bash +0 -0
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/git-cliff-2.7.0/completions/git-cliff.elv +0 -0
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/git-cliff-2.7.0/completions/git-cliff.fish +0 -0
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/git-cliff-2.7.0/git-cliff-completions +0 -0
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/git-cliff-2.7.0/git-cliff-mangen +0 -0
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/git-cliff-2.7.0/man/git-cliff.1 +0 -0
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/git-cliff-2.7.0-x86_64-unknown-linux-gnu.tar.gz +0 -0
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/github-action-run +0 -0
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/logo.png +0 -0
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/renovate.json +0 -0
- {oe_python_template_example-0.1.13/tests/fixtures → oe_python_template_example-0.1.15/reports}/.keep +0 -0
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/src/oe_python_template_example/__init__.py +0 -0
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/src/oe_python_template_example/api.py +0 -0
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/src/oe_python_template_example/cli.py +0 -0
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/src/oe_python_template_example/constants.py +0 -0
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/src/oe_python_template_example/service.py +0 -0
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/tests/__init__.py +0 -0
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/tests/api_test.py +0 -0
- {oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/tests/cli_test.py +0 -0
@@ -53,7 +53,7 @@ jobs:
|
|
53
53
|
env:
|
54
54
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
55
55
|
run: |
|
56
|
-
gh release create ${{ github.ref_name }} ./dist/*
|
56
|
+
gh release create ${{ github.ref_name }} ./dist/* ./reports/* --notes-file ${{ steps.git-cliff.outputs.changelog }}
|
57
57
|
|
58
58
|
- name: Allow other workflows to trigger on release
|
59
59
|
env:
|
@@ -41,18 +41,13 @@ develop-eggs/
|
|
41
41
|
.nox
|
42
42
|
.dmypy.json
|
43
43
|
.mypy_cache/
|
44
|
+
.coverage
|
44
45
|
|
45
46
|
|
46
|
-
# Build
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
coverage_html/
|
51
|
-
vulnerabilities.json
|
52
|
-
licenses.json
|
53
|
-
licenses-inverted.json
|
54
|
-
sbom.json
|
55
|
-
mypi_junit.xml
|
47
|
+
# Build Report
|
48
|
+
reports/*
|
49
|
+
!reports/.keep
|
50
|
+
!reports/README.md
|
56
51
|
|
57
52
|
# IDE
|
58
53
|
.idea/
|
@@ -1,6 +1,13 @@
|
|
1
1
|
[🧠 OE Python Template Example](https://oe-python-template-example.readthedocs.io/en/latest/)
|
2
2
|
|
3
|
-
## [0.1.
|
3
|
+
## [0.1.15](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/compare/v0.1.14..0.1.15) - 2025-03-15
|
4
|
+
|
5
|
+
### ⚙️ Miscellaneous Tasks
|
6
|
+
|
7
|
+
- .gitignore - ([b1fb3fa](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/commit/b1fb3fa01b18031cfa12f3241b62e70dc1419640))
|
8
|
+
|
9
|
+
|
10
|
+
## [0.1.13](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/compare/v0.1.12..v0.1.13) - 2025-03-14
|
4
11
|
|
5
12
|
### 📚 Documentation
|
6
13
|
|
@@ -90,10 +90,28 @@ uv run nox -s audit # run security and license audit, inc. sbom generation
|
|
90
90
|
uv run nox -s docs # build documentation, output in docs/build/html
|
91
91
|
```
|
92
92
|
|
93
|
+
As a shortcut, you can run build steps using `./n`:
|
94
|
+
|
95
|
+
```shell
|
96
|
+
./n test
|
97
|
+
./n lint
|
98
|
+
# ...
|
99
|
+
```
|
100
|
+
|
101
|
+
Generate a wheel using uv
|
102
|
+
```shell
|
103
|
+
uv build
|
104
|
+
```
|
105
|
+
|
106
|
+
Notes:
|
107
|
+
1. Reports dumped into ```reports/```
|
108
|
+
3. Documentation dumped into ```docs/build/html/```
|
109
|
+
2. Distribution dumped into ```dist/```
|
110
|
+
|
93
111
|
### Running GitHub CI workflow locally
|
94
112
|
|
95
113
|
```shell
|
96
|
-
|
114
|
+
uv run nox -s act
|
97
115
|
```
|
98
116
|
|
99
117
|
Notes:
|
@@ -116,13 +134,7 @@ docker run --env THE_VAR=THE_VALUE oe-python-template-example --help
|
|
116
134
|
Update scaffold from template
|
117
135
|
|
118
136
|
```shell
|
119
|
-
|
120
|
-
```
|
121
|
-
|
122
|
-
### Updating demo application contained within oe-python-template-example
|
123
|
-
|
124
|
-
```shell
|
125
|
-
copier copy -r HEAD . . --force --trust
|
137
|
+
uv run nox -s update_from_template
|
126
138
|
```
|
127
139
|
|
128
140
|
## Pull Request Guidelines
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: oe-python-template-example
|
3
|
-
Version: 0.1.
|
3
|
+
Version: 0.1.15
|
4
4
|
Summary: 🧠 Example project scaffolded and kept up to date with OE Python Template (oe-python-template).
|
5
5
|
Project-URL: Homepage, https://oe-python-template-example.readthedocs.io/en/latest/
|
6
6
|
Project-URL: Documentation, https://oe-python-template-example.readthedocs.io/en/latest/
|
@@ -66,13 +66,14 @@ Description-Content-Type: text/markdown
|
|
66
66
|
[](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/blob/main/noxfile.py)
|
67
67
|
[](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/actions/workflows/test-and-report.yml)
|
68
68
|
[](https://oe-python-template-example.readthedocs.io/en/latest/)
|
69
|
-
[](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/security/code-scanning)
|
70
|
-
[](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/security/dependabot)
|
71
69
|
[](https://sonarcloud.io/summary/new_code?id=helmut-hoffer-von-ankershoffen_oe-python-template-example)
|
72
70
|
[](https://sonarcloud.io/summary/new_code?id=helmut-hoffer-von-ankershoffen_oe-python-template-example)
|
73
71
|
[](https://sonarcloud.io/summary/new_code?id=helmut-hoffer-von-ankershoffen_oe-python-template-example)
|
74
72
|
[](https://sonarcloud.io/summary/new_code?id=helmut-hoffer-von-ankershoffen_oe-python-template-example)
|
75
73
|
[](https://sonarcloud.io/summary/new_code?id=helmut-hoffer-von-ankershoffen_oe-python-template-example)
|
74
|
+
[](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/security/code-scanning)
|
75
|
+
[](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/security/dependabot)
|
76
|
+
[](https://renovatebot.com/)
|
76
77
|
[](https://codecov.io/gh/helmut-hoffer-von-ankershoffen/oe-python-template-example)
|
77
78
|
[](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/blob/main/noxfile.py)
|
78
79
|
[](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/blob/main/noxfile.py)
|
@@ -135,13 +136,10 @@ uvx oe-python-template-example serve --port=4711 # serves webservice API on port
|
|
135
136
|
```
|
136
137
|
|
137
138
|
Notes:
|
139
|
+
* The API is versioned, mounted at `/api/v1` resp. `/api/v2`
|
140
|
+
* While serving the webservice API go to [http://127.0.0.1:8000/api/v1/hello-world](http://127.0.0.1:8000/api/v1/hello-world) to see the respons of the `hello-world` operation.
|
141
|
+
* Interactive documentation is provided at [http://127.0.0.1:8000/api/docs](http://127.0.0.1:8000/api/docs)
|
138
142
|
|
139
|
-
- The API is versioned, mounted at `/api/v1` resp. `/api/v2`
|
140
|
-
- While serving the webservice API go to
|
141
|
-
[http://127.0.0.1:8000/api/v1/hello-world](http://127.0.0.1:8000/api/v1/hello-world)
|
142
|
-
to see the respons of the `hello-world` operation.
|
143
|
-
- Interactive documentation is provided at
|
144
|
-
[http://127.0.0.1:8000/api/docs](http://127.0.0.1:8000/api/docs)
|
145
143
|
|
146
144
|
The CLI provides extensive help:
|
147
145
|
|
@@ -5,13 +5,14 @@
|
|
5
5
|
[](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/blob/main/noxfile.py)
|
6
6
|
[](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/actions/workflows/test-and-report.yml)
|
7
7
|
[](https://oe-python-template-example.readthedocs.io/en/latest/)
|
8
|
-
[](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/security/code-scanning)
|
9
|
-
[](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/security/dependabot)
|
10
8
|
[](https://sonarcloud.io/summary/new_code?id=helmut-hoffer-von-ankershoffen_oe-python-template-example)
|
11
9
|
[](https://sonarcloud.io/summary/new_code?id=helmut-hoffer-von-ankershoffen_oe-python-template-example)
|
12
10
|
[](https://sonarcloud.io/summary/new_code?id=helmut-hoffer-von-ankershoffen_oe-python-template-example)
|
13
11
|
[](https://sonarcloud.io/summary/new_code?id=helmut-hoffer-von-ankershoffen_oe-python-template-example)
|
14
12
|
[](https://sonarcloud.io/summary/new_code?id=helmut-hoffer-von-ankershoffen_oe-python-template-example)
|
13
|
+
[](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/security/code-scanning)
|
14
|
+
[](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/security/dependabot)
|
15
|
+
[](https://renovatebot.com/)
|
15
16
|
[](https://codecov.io/gh/helmut-hoffer-von-ankershoffen/oe-python-template-example)
|
16
17
|
[](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/blob/main/noxfile.py)
|
17
18
|
[](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/blob/main/noxfile.py)
|
@@ -74,13 +75,10 @@ uvx oe-python-template-example serve --port=4711 # serves webservice API on port
|
|
74
75
|
```
|
75
76
|
|
76
77
|
Notes:
|
78
|
+
* The API is versioned, mounted at `/api/v1` resp. `/api/v2`
|
79
|
+
* While serving the webservice API go to [http://127.0.0.1:8000/api/v1/hello-world](http://127.0.0.1:8000/api/v1/hello-world) to see the respons of the `hello-world` operation.
|
80
|
+
* Interactive documentation is provided at [http://127.0.0.1:8000/api/docs](http://127.0.0.1:8000/api/docs)
|
77
81
|
|
78
|
-
- The API is versioned, mounted at `/api/v1` resp. `/api/v2`
|
79
|
-
- While serving the webservice API go to
|
80
|
-
[http://127.0.0.1:8000/api/v1/hello-world](http://127.0.0.1:8000/api/v1/hello-world)
|
81
|
-
to see the respons of the `hello-world` operation.
|
82
|
-
- Interactive documentation is provided at
|
83
|
-
[http://127.0.0.1:8000/api/docs](http://127.0.0.1:8000/api/docs)
|
84
82
|
|
85
83
|
The CLI provides extensive help:
|
86
84
|
|
@@ -0,0 +1,8 @@
|
|
1
|
+
## [0.1.15](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/compare/v0.1.14..v0.1.15) - 2025-03-15
|
2
|
+
|
3
|
+
### ⚙️ Miscellaneous Tasks
|
4
|
+
|
5
|
+
- .gitignore - ([b1fb3fa](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/commit/b1fb3fa01b18031cfa12f3241b62e70dc1419640))
|
6
|
+
|
7
|
+
|
8
|
+
|
@@ -22,12 +22,12 @@ OE Python Template Example employs several automated tools to continuously monit
|
|
22
22
|
|
23
23
|
- **GitHub Dependabot**: Monitors dependencies for known vulnerabilities and automatically creates pull requests to update them when security issues are found. [Dependendabot alerts](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/security/dependabot) published.
|
24
24
|
- **Renovate Bot**: Automatically creates pull requests to update dependencies when new versions are available, with a focus on security patches. [Dependency Dashboard](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/issues) published.
|
25
|
-
- **pip-audit**: Regularly scans Python dependencies for known vulnerabilities using data from the Python Advisory Database.
|
25
|
+
- **pip-audit**: Regularly scans Python dependencies for known vulnerabilities using data from the Python Advisory Database. `vulnerabilities.json` published [per release](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/releases).
|
26
26
|
|
27
27
|
### 2. Dependency Compliance
|
28
28
|
|
29
|
-
- **cyclonedx-py**: Generates a Software Bill of Materials (SBOM) in SPDX format, listing all components and dependencies used in the project.
|
30
|
-
- **pip-licenses**: Exports the licenses of all dependencies to ensure compliance with licensing requirements and avoid using components with problematic licenses.
|
29
|
+
- **cyclonedx-py**: Generates a Software Bill of Materials (SBOM) in SPDX format, listing all components and dependencies used in the project. `sbom.json` (SPDX format) published [per release](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/releases).
|
30
|
+
- **pip-licenses**: Exports the licenses of all dependencies to ensure compliance with licensing requirements and avoid using components with problematic licenses. `licenses.csv`, `licenses.json` and `licenses_grouped.json` published [per release](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/releases).
|
31
31
|
|
32
32
|
### 3. Static Code Analysis
|
33
33
|
|
@@ -0,0 +1 @@
|
|
1
|
+
0.1.15
|
@@ -5,13 +5,14 @@
|
|
5
5
|
[](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/blob/main/noxfile.py)
|
6
6
|
[](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/actions/workflows/test-and-report.yml)
|
7
7
|
[](https://oe-python-template-example.readthedocs.io/en/latest/)
|
8
|
-
[](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/security/code-scanning)
|
9
|
-
[](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/security/dependabot)
|
10
8
|
[](https://sonarcloud.io/summary/new_code?id=helmut-hoffer-von-ankershoffen_oe-python-template-example)
|
11
9
|
[](https://sonarcloud.io/summary/new_code?id=helmut-hoffer-von-ankershoffen_oe-python-template-example)
|
12
10
|
[](https://sonarcloud.io/summary/new_code?id=helmut-hoffer-von-ankershoffen_oe-python-template-example)
|
13
11
|
[](https://sonarcloud.io/summary/new_code?id=helmut-hoffer-von-ankershoffen_oe-python-template-example)
|
14
12
|
[](https://sonarcloud.io/summary/new_code?id=helmut-hoffer-von-ankershoffen_oe-python-template-example)
|
13
|
+
[](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/security/code-scanning)
|
14
|
+
[](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/security/dependabot)
|
15
|
+
[](https://renovatebot.com/)
|
15
16
|
[](https://codecov.io/gh/helmut-hoffer-von-ankershoffen/oe-python-template-example)
|
16
17
|
[](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/blob/main/noxfile.py)
|
17
18
|
[](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/blob/main/noxfile.py)
|
@@ -33,13 +33,10 @@ uvx oe-python-template-example serve --port=4711 # serves webservice API on port
|
|
33
33
|
```
|
34
34
|
|
35
35
|
Notes:
|
36
|
+
* The API is versioned, mounted at `/api/v1` resp. `/api/v2`
|
37
|
+
* While serving the webservice API go to [http://127.0.0.1:8000/api/v1/hello-world](http://127.0.0.1:8000/api/v1/hello-world) to see the respons of the `hello-world` operation.
|
38
|
+
* Interactive documentation is provided at [http://127.0.0.1:8000/api/docs](http://127.0.0.1:8000/api/docs)
|
36
39
|
|
37
|
-
- The API is versioned, mounted at `/api/v1` resp. `/api/v2`
|
38
|
-
- While serving the webservice API go to
|
39
|
-
[http://127.0.0.1:8000/api/v1/hello-world](http://127.0.0.1:8000/api/v1/hello-world)
|
40
|
-
to see the respons of the `hello-world` operation.
|
41
|
-
- Interactive documentation is provided at
|
42
|
-
[http://127.0.0.1:8000/api/docs](http://127.0.0.1:8000/api/docs)
|
43
40
|
|
44
41
|
The CLI provides extensive help:
|
45
42
|
|
@@ -104,9 +104,12 @@ openapi: 3.1.0
|
|
104
104
|
paths:
|
105
105
|
/echo:
|
106
106
|
post:
|
107
|
-
description: "Echo back the provided text.\n\nArgs:\n request
|
108
|
-
|
109
|
-
\
|
107
|
+
description: "Echo back the provided text.\n\nArgs:\n request
|
108
|
+
(EchoRequest):\
|
109
|
+
\ The request containing the text to echo back.\n\nReturns:\n
|
110
|
+
EchoResponse:\
|
111
|
+
\ A response containing the echoed text.\n\nRaises:\n 422
|
112
|
+
Unprocessable\
|
110
113
|
\ Entity: If text is not provided or empty."
|
111
114
|
operationId: echo_echo_post
|
112
115
|
requestBody:
|
@@ -133,12 +136,18 @@ paths:
|
|
133
136
|
- Basics
|
134
137
|
/health:
|
135
138
|
get:
|
136
|
-
description: "Check the health of the service.\n\nThis endpoint returns
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
139
|
+
description: "Check the health of the service.\n\nThis endpoint returns
|
140
|
+
the\
|
141
|
+
\ health status of the service.\nThe health status can be either UP or
|
142
|
+
DOWN.\n\
|
143
|
+
If the service is healthy, the status will be UP.\nIf the service is
|
144
|
+
unhealthy,\
|
145
|
+
\ the status will be DOWN and a reason will be provided.\nThe response
|
146
|
+
will\
|
147
|
+
\ have a 200 OK status code if the service is healthy,\nand a 500
|
148
|
+
Internal\
|
149
|
+
\ Server Error status code if the service is unhealthy.\n\nReturns:\n
|
150
|
+
Health:\
|
142
151
|
\ The health status of the service."
|
143
152
|
operationId: health_health_get
|
144
153
|
responses:
|
@@ -153,12 +162,18 @@ paths:
|
|
153
162
|
- Observability
|
154
163
|
/healthz:
|
155
164
|
get:
|
156
|
-
description: "Check the health of the service.\n\nThis endpoint returns
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
165
|
+
description: "Check the health of the service.\n\nThis endpoint returns
|
166
|
+
the\
|
167
|
+
\ health status of the service.\nThe health status can be either UP or
|
168
|
+
DOWN.\n\
|
169
|
+
If the service is healthy, the status will be UP.\nIf the service is
|
170
|
+
unhealthy,\
|
171
|
+
\ the status will be DOWN and a reason will be provided.\nThe response
|
172
|
+
will\
|
173
|
+
\ have a 200 OK status code if the service is healthy,\nand a 500
|
174
|
+
Internal\
|
175
|
+
\ Server Error status code if the service is unhealthy.\n\nReturns:\n
|
176
|
+
Health:\
|
162
177
|
\ The health status of the service."
|
163
178
|
operationId: health_healthz_get
|
164
179
|
responses:
|
@@ -173,7 +188,8 @@ paths:
|
|
173
188
|
- Observability
|
174
189
|
/hello-world:
|
175
190
|
get:
|
176
|
-
description: "Return a hello world message.\n\nReturns:\n
|
191
|
+
description: "Return a hello world message.\n\nReturns:\n
|
192
|
+
HelloWorldResponse:\
|
177
193
|
\ A response containing the hello world message."
|
178
194
|
operationId: hello_world_hello_world_get
|
179
195
|
responses:
|
@@ -104,9 +104,12 @@ openapi: 3.1.0
|
|
104
104
|
paths:
|
105
105
|
/echo:
|
106
106
|
post:
|
107
|
-
description: "Echo back the provided utterance.\n\nArgs:\n request
|
108
|
-
|
109
|
-
\
|
107
|
+
description: "Echo back the provided utterance.\n\nArgs:\n request
|
108
|
+
(Utterance):\
|
109
|
+
\ The request containing the utterance to echo back.\n\nReturns:\n
|
110
|
+
EchoResponse:\
|
111
|
+
\ A response containing the echoed utterance.\n\nRaises:\n 422
|
112
|
+
Unprocessable\
|
110
113
|
\ Entity: If utterance is not provided or empty."
|
111
114
|
operationId: echo_v2_echo_post
|
112
115
|
requestBody:
|
@@ -133,12 +136,18 @@ paths:
|
|
133
136
|
- Basics
|
134
137
|
/health:
|
135
138
|
get:
|
136
|
-
description: "Check the health of the service.\n\nThis endpoint returns
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
139
|
+
description: "Check the health of the service.\n\nThis endpoint returns
|
140
|
+
the\
|
141
|
+
\ health status of the service.\nThe health status can be either UP or
|
142
|
+
DOWN.\n\
|
143
|
+
If the service is healthy, the status will be UP.\nIf the service is
|
144
|
+
unhealthy,\
|
145
|
+
\ the status will be DOWN and a reason will be provided.\nThe response
|
146
|
+
will\
|
147
|
+
\ have a 200 OK status code if the service is healthy,\nand a 500
|
148
|
+
Internal\
|
149
|
+
\ Server Error status code if the service is unhealthy.\n\nReturns:\n
|
150
|
+
Health:\
|
142
151
|
\ The health status of the service."
|
143
152
|
operationId: health_health_get
|
144
153
|
responses:
|
@@ -153,12 +162,18 @@ paths:
|
|
153
162
|
- Observability
|
154
163
|
/healthz:
|
155
164
|
get:
|
156
|
-
description: "Check the health of the service.\n\nThis endpoint returns
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
165
|
+
description: "Check the health of the service.\n\nThis endpoint returns
|
166
|
+
the\
|
167
|
+
\ health status of the service.\nThe health status can be either UP or
|
168
|
+
DOWN.\n\
|
169
|
+
If the service is healthy, the status will be UP.\nIf the service is
|
170
|
+
unhealthy,\
|
171
|
+
\ the status will be DOWN and a reason will be provided.\nThe response
|
172
|
+
will\
|
173
|
+
\ have a 200 OK status code if the service is healthy,\nand a 500
|
174
|
+
Internal\
|
175
|
+
\ Server Error status code if the service is unhealthy.\n\nReturns:\n
|
176
|
+
Health:\
|
162
177
|
\ The health status of the service."
|
163
178
|
operationId: health_healthz_get
|
164
179
|
responses:
|
@@ -173,7 +188,8 @@ paths:
|
|
173
188
|
- Observability
|
174
189
|
/hello-world:
|
175
190
|
get:
|
176
|
-
description: "Return a hello world message.\n\nReturns:\n
|
191
|
+
description: "Return a hello world message.\n\nReturns:\n
|
192
|
+
HelloWorldResponse:\
|
177
193
|
\ A response containing the hello world message."
|
178
194
|
operationId: hello_world_hello_world_get
|
179
195
|
responses:
|
@@ -29,7 +29,7 @@ extensions = [
|
|
29
29
|
project = "oe-python-template-example"
|
30
30
|
author = "Helmut Hoffer von Ankershoffen"
|
31
31
|
copyright = f" (c) 2025-{datetime.now(UTC).year}, {author}" # noqa: A001
|
32
|
-
version = "0.1.
|
32
|
+
version = "0.1.15"
|
33
33
|
release = version
|
34
34
|
github_username = "helmut-hoffer-von-ankershoffen"
|
35
35
|
github_repository = "oe-python-template-example"
|
@@ -0,0 +1 @@
|
|
1
|
+
.. mdinclude:: ../../SECURITY.md
|
@@ -0,0 +1,27 @@
|
|
1
|
+
#!/bin/sh
|
2
|
+
# Wrapper script for running nox tasks with uv.
|
3
|
+
# Allows simpler commands: `./n <session>` instead of `uv run nox -s <session>`
|
4
|
+
|
5
|
+
if [ $# -lt 1 ]; then
|
6
|
+
echo "Usage: ./n <session_name> [additional_args]"
|
7
|
+
echo "Examples:"
|
8
|
+
echo " ./n setup_dev"
|
9
|
+
echo " ./n lint"
|
10
|
+
echo " ./n docs"
|
11
|
+
echo " ./n audit"
|
12
|
+
echo " ./n test"
|
13
|
+
echo " ./n act"
|
14
|
+
echo " ./n update_from_template"
|
15
|
+
echo " ./n bump patch"
|
16
|
+
echo " ./n bump minor"
|
17
|
+
echo " ./n bump major"
|
18
|
+
echo " ./n bump x.y.z"
|
19
|
+
exit 1
|
20
|
+
fi
|
21
|
+
|
22
|
+
|
23
|
+
session=$1
|
24
|
+
shift # Remove the first argument, remaining args will be passed through
|
25
|
+
|
26
|
+
# Execute the command, forwarding all output
|
27
|
+
exec uv run nox -s "$session" "$@"
|
@@ -2,9 +2,11 @@
|
|
2
2
|
|
3
3
|
import json
|
4
4
|
import os
|
5
|
+
import re
|
5
6
|
from pathlib import Path
|
6
7
|
|
7
8
|
import nox
|
9
|
+
import tomli
|
8
10
|
|
9
11
|
nox.options.reuse_existing_virtualenvs = True
|
10
12
|
nox.options.default_venv_backend = "uv"
|
@@ -80,39 +82,40 @@ def docs(session: nox.Session) -> None:
|
|
80
82
|
@nox.session(python=["3.13"])
|
81
83
|
def audit(session: nox.Session) -> None:
|
82
84
|
"""Run security audit and license checks."""
|
83
|
-
_setup_venv(session)
|
84
|
-
session.run("pip-audit", "-f", "json", "-o", "vulnerabilities.json")
|
85
|
-
session.run("jq", ".", "vulnerabilities.json", external=True)
|
86
|
-
session.run("pip-licenses", "--format=
|
87
|
-
session.run("
|
85
|
+
_setup_venv(session, True)
|
86
|
+
session.run("pip-audit", "-f", "json", "-o", "reports/vulnerabilities.json")
|
87
|
+
session.run("jq", ".", "reports/vulnerabilities.json", external=True)
|
88
|
+
session.run("pip-licenses", "--format=csv", "--order=license", "--output-file=reports/licenses.csv")
|
89
|
+
session.run("pip-licenses", "--format=json", "--output-file=reports/licenses.json")
|
90
|
+
session.run("jq", ".", "reports/licenses.json", external=True)
|
88
91
|
# Read and parse licenses.json
|
89
|
-
licenses_data = json.loads(Path("licenses.json").read_text(encoding="utf-8"))
|
92
|
+
licenses_data = json.loads(Path("reports/licenses.json").read_text(encoding="utf-8"))
|
90
93
|
|
91
|
-
|
92
|
-
|
94
|
+
licenses_grouped: dict[str, list[dict[str, str]]] = {}
|
95
|
+
licenses_grouped = {}
|
93
96
|
for pkg in licenses_data:
|
94
97
|
license_name = pkg["License"]
|
95
98
|
package_info = {"Name": pkg["Name"], "Version": pkg["Version"]}
|
96
99
|
|
97
|
-
if license_name not in
|
98
|
-
|
99
|
-
|
100
|
+
if license_name not in licenses_grouped:
|
101
|
+
licenses_grouped[license_name] = []
|
102
|
+
licenses_grouped[license_name].append(package_info)
|
100
103
|
|
101
|
-
# Write
|
102
|
-
Path("
|
103
|
-
json.dumps(
|
104
|
+
# Write grouped data
|
105
|
+
Path("reports/licenses_grouped.json").write_text(
|
106
|
+
json.dumps(licenses_grouped, indent=2),
|
104
107
|
encoding="utf-8",
|
105
108
|
)
|
106
|
-
session.run("jq", ".", "
|
107
|
-
session.run("cyclonedx-py", "environment", "-o", "sbom.json")
|
108
|
-
session.run("jq", ".", "sbom.json", external=True)
|
109
|
+
session.run("jq", ".", "reports/licenses_grouped.json", external=True)
|
110
|
+
session.run("cyclonedx-py", "environment", "-o", "reports/sbom.json")
|
111
|
+
session.run("jq", ".", "reports/sbom.json", external=True)
|
109
112
|
|
110
113
|
|
111
114
|
@nox.session(python=["3.11", "3.12", "3.13"])
|
112
115
|
def test(session: nox.Session) -> None:
|
113
116
|
"""Run tests with pytest."""
|
114
117
|
_setup_venv(session)
|
115
|
-
pytest_args = ["pytest", "--disable-warnings", "--junitxml=junit.xml", "-n", "auto", "--dist", "loadgroup"]
|
118
|
+
pytest_args = ["pytest", "--disable-warnings", "--junitxml=reports/junit.xml", "-n", "auto", "--dist", "loadgroup"]
|
116
119
|
if _is_act_environment():
|
117
120
|
pytest_args.extend(["-k", NOT_SKIP_WITH_ACT])
|
118
121
|
session.run(*pytest_args)
|
@@ -136,3 +139,57 @@ def setup_dev(session: nox.Session) -> None:
|
|
136
139
|
except Exception: # noqa: BLE001
|
137
140
|
session.log("pre-commit run failed, continuing anyway")
|
138
141
|
session.run("git", "add", ".", external=True)
|
142
|
+
|
143
|
+
|
144
|
+
@nox.session(default=False)
|
145
|
+
def update_from_template(session: nox.Session) -> None:
|
146
|
+
"""Update from copier template."""
|
147
|
+
if Path("copier.yaml").is_file() or Path("copier.yml").is_file():
|
148
|
+
# Read the current version from pyproject.toml
|
149
|
+
with Path("pyproject.toml").open("rb") as f:
|
150
|
+
pyproject = tomli.load(f)
|
151
|
+
current_version = pyproject["tool"]["bumpversion"]["current_version"]
|
152
|
+
# In this case the project itself is the template
|
153
|
+
session.run("copier", "copy", "-r", "HEAD", ".", ".", "--force", "--trust", "--skip-tasks", external=True)
|
154
|
+
# Bump the version using the current version from pyproject.toml
|
155
|
+
session.run("bump-my-version", "replace", "--new-version", current_version, "--allow-dirty", external=True)
|
156
|
+
else:
|
157
|
+
# In this case the template has been generated from a template
|
158
|
+
session.run("copier", "update", "--trust", "--skip-answered", "--skip-tasks", external=True)
|
159
|
+
|
160
|
+
|
161
|
+
@nox.session(default=False)
|
162
|
+
def act(session: nox.Session) -> None:
|
163
|
+
"""Run GitHub Actions workflow locally with act."""
|
164
|
+
session.run(
|
165
|
+
"act",
|
166
|
+
"-j",
|
167
|
+
"test",
|
168
|
+
"--env-file",
|
169
|
+
".act-env-public",
|
170
|
+
"--secret-file",
|
171
|
+
".act-env-secret",
|
172
|
+
"--container-architecture",
|
173
|
+
"linux/amd64",
|
174
|
+
"-P",
|
175
|
+
"ubuntu-latest=catthehacker/ubuntu:act-latest",
|
176
|
+
"--action-offline-mode",
|
177
|
+
"--container-daemon-socket",
|
178
|
+
"-",
|
179
|
+
external=True,
|
180
|
+
)
|
181
|
+
|
182
|
+
|
183
|
+
@nox.session(default=False)
|
184
|
+
def bump(session: nox.Session) -> None:
|
185
|
+
"""Bump version and push changes to git."""
|
186
|
+
version_part = session.posargs[0] if session.posargs else "patch"
|
187
|
+
|
188
|
+
# Check if the version_part is a specific version (e.g., 1.2.3)
|
189
|
+
if re.match(r"^[0-9]+\.[0-9]+\.[0-9]+$", version_part):
|
190
|
+
session.run("bump-my-version", "bump", "--new-version", version_part, external=True)
|
191
|
+
else:
|
192
|
+
session.run("bump-my-version", "bump", version_part, external=True)
|
193
|
+
|
194
|
+
# Push changes to git
|
195
|
+
session.run("git", "push", external=True)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
[project]
|
2
2
|
name = "oe-python-template-example"
|
3
|
-
version = "0.1.
|
3
|
+
version = "0.1.15"
|
4
4
|
description = "🧠 Example project scaffolded and kept up to date with OE Python Template (oe-python-template)."
|
5
5
|
readme = "README.md"
|
6
6
|
authors = [
|
@@ -197,8 +197,8 @@ docstring-code-format = true
|
|
197
197
|
[tool.ruff.lint.pydocstyle]
|
198
198
|
convention = "google"
|
199
199
|
|
200
|
-
[tool.mypy]
|
201
|
-
junit_xml = "
|
200
|
+
[tool.mypy] # https://mypy.readthedocs.io/en/latest/config_file.html
|
201
|
+
junit_xml = "reports/mypy_junit.xml"
|
202
202
|
plugins = "pydantic.mypy"
|
203
203
|
strict = true
|
204
204
|
disallow_subclassing_any = false
|
@@ -217,7 +217,7 @@ warn_required_dynamic_aliases = true
|
|
217
217
|
warn_untyped_fields = true
|
218
218
|
|
219
219
|
[tool.pytest.ini_options]
|
220
|
-
addopts = "-v --cov=oe_python_template_example --cov-report=term-missing --cov-report=xml:coverage.xml --cov-report=html:coverage_html"
|
220
|
+
addopts = "-v --cov=oe_python_template_example --cov-report=term-missing --cov-report=xml:reports/coverage.xml --cov-report=html:reports/coverage_html"
|
221
221
|
testpaths = ["tests"]
|
222
222
|
python_files = ["*_test.py"]
|
223
223
|
asyncio_mode = "auto"
|
@@ -242,7 +242,7 @@ source = ["src/"]
|
|
242
242
|
|
243
243
|
|
244
244
|
[tool.bumpversion]
|
245
|
-
current_version = "0.1.
|
245
|
+
current_version = "0.1.15"
|
246
246
|
parse = "(?P<major>\\d+)\\.(?P<minor>\\d+)\\.(?P<patch>\\d+)"
|
247
247
|
serialize = ["{major}.{minor}.{patch}"]
|
248
248
|
search = "{current_version}"
|
{oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/sonar-project.properties
RENAMED
@@ -1,6 +1,6 @@
|
|
1
1
|
sonar.projectKey=helmut-hoffer-von-ankershoffen_oe-python-template-example
|
2
2
|
sonar.organization=helmut-hoffer-von-ankershoffen
|
3
|
-
sonar.projectVersion=0.1.
|
3
|
+
sonar.projectVersion=0.1.15
|
4
4
|
sonar.projectDescription=🧠 Example project scaffolded and kept up to date with OE Python Template (oe-python-template).
|
5
5
|
sonar.links.homepage=https://oe-python-template-example.readthedocs.io/en/latest/
|
6
6
|
sonar.links.scm=https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example
|
File without changes
|
@@ -1,8 +0,0 @@
|
|
1
|
-
## [0.1.13](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/compare/v0.1.12..v0.1.13) - 2025-03-14
|
2
|
-
|
3
|
-
### 📚 Documentation
|
4
|
-
|
5
|
-
- Adapt - ([6e99c1d](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template-example/commit/6e99c1d604c8e9fe4094b6a21d95619181ea0d14))
|
6
|
-
|
7
|
-
|
8
|
-
|
@@ -1 +0,0 @@
|
|
1
|
-
0.1.13
|
@@ -1,11 +0,0 @@
|
|
1
|
-
$latex = 'xelatex --no-pdf ' . $ENV{'LATEXOPTS'} . ' %O %S';
|
2
|
-
$pdflatex = 'echo "using custom latexmkrc"; '
|
3
|
-
. 'for f in *.tex_; do xelatex -jobname="${f%.*}" -interaction=nonstopmode -recorder "$f"; done; '
|
4
|
-
. 'xelatex ' . $ENV{'LATEXOPTS'} . ' %O %S';
|
5
|
-
$lualatex = 'lualatex ' . $ENV{'LATEXOPTS'} . ' %O %S';
|
6
|
-
$xelatex = 'xelatex --no-pdf ' . $ENV{'LATEXOPTS'} . ' %O %S';
|
7
|
-
$makeindex = 'makeindex -s python.ist %O -o %D %S';
|
8
|
-
add_cus_dep( "glo", "gls", 0, "makeglo" );
|
9
|
-
sub makeglo {
|
10
|
-
return system( "makeindex -s gglo.ist -o '$_[0].gls' '$_[0].glo'" );
|
11
|
-
}
|
@@ -1,11 +0,0 @@
|
|
1
|
-
$latex = 'xelatex --no-pdf ' . $ENV{'LATEXOPTS'} . ' %O %S';
|
2
|
-
$pdflatex = 'echo "using custom latexmkrc"; '
|
3
|
-
. 'for f in *.tex_; do xelatex -jobname="${f%.*}" -interaction=nonstopmode -recorder "$f"; done; '
|
4
|
-
. 'xelatex ' . $ENV{'LATEXOPTS'} . ' %O %S';
|
5
|
-
$lualatex = 'lualatex ' . $ENV{'LATEXOPTS'} . ' %O %S';
|
6
|
-
$xelatex = 'xelatex --no-pdf ' . $ENV{'LATEXOPTS'} . ' %O %S';
|
7
|
-
$makeindex = 'makeindex -s python.ist %O -o %D %S';
|
8
|
-
add_cus_dep( "glo", "gls", 0, "makeglo" );
|
9
|
-
sub makeglo {
|
10
|
-
return system( "makeindex -s gglo.ist -o '$_[0].gls' '$_[0].glo'" );
|
11
|
-
}
|
File without changes
|
{oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/.devcontainer/Dockerfile
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/.github/dependabot.yml
RENAMED
File without changes
|
{oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/.github/workflows/codeql.yml
RENAMED
File without changes
|
File without changes
|
File without changes
|
{oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/.pre-commit-config.yaml
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/.vscode/extensions.json
RENAMED
File without changes
|
{oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/.vscode/settings.json
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/SERVICE_CONNECTIONS.md
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/docs/source/_static/.keep
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/docs/source/api_v1.rst
RENAMED
File without changes
|
{oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/docs/source/api_v2.rst
RENAMED
File without changes
|
{oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/docs/source/contributing.rst
RENAMED
File without changes
|
{oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/docs/source/main.rst
RENAMED
File without changes
|
{oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/docs/source/reference.rst
RENAMED
File without changes
|
File without changes
|
{oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/examples/__init__.py
RENAMED
File without changes
|
{oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/examples/notebook.ipynb
RENAMED
File without changes
|
{oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/examples/notebook.py
RENAMED
File without changes
|
File without changes
|
{oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/examples/streamlit.py
RENAMED
File without changes
|
{oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/git-cliff-2.7.0/CHANGELOG.md
RENAMED
File without changes
|
File without changes
|
{oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/git-cliff-2.7.0/LICENSE-MIT
RENAMED
File without changes
|
{oe_python_template_example-0.1.13 → oe_python_template_example-0.1.15}/git-cliff-2.7.0/README.md
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{oe_python_template_example-0.1.13/tests/fixtures → oe_python_template_example-0.1.15/reports}/.keep
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|