python-template-project 0.1.15__tar.gz → 0.1.19__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.
- python_template_project-0.1.19/.github/rename_project.sh +78 -0
- python_template_project-0.1.19/.github/template.yml +2 -0
- python_template_project-0.1.19/.github/workflows/build-macos.yml +42 -0
- {python_template_project-0.1.15 → python_template_project-0.1.19}/.github/workflows/build.yml +1 -7
- python_template_project-0.1.19/.github/workflows/rename_project.yml +62 -0
- {python_template_project-0.1.15 → python_template_project-0.1.19}/HISTORY.md +35 -0
- {python_template_project-0.1.15 → python_template_project-0.1.19}/Makefile +36 -0
- {python_template_project-0.1.15 → python_template_project-0.1.19}/PKG-INFO +33 -43
- python_template_project-0.1.19/README.md +57 -0
- python_template_project-0.1.19/docs/develop/01_getting_started_dev.md +29 -0
- python_template_project-0.1.19/docs/develop/naming_convention.md +46 -0
- {python_template_project-0.1.15 → python_template_project-0.1.19}/docs/getting-started/install.md +35 -14
- python_template_project-0.1.19/docs/index.md +55 -0
- {python_template_project-0.1.15 → python_template_project-0.1.19}/pyproject.toml +1 -0
- python_template_project-0.1.15/scripts/show-filelist.ps1 → python_template_project-0.1.19/scripts/show_filelist.ps1 +1 -1
- python_template_project-0.1.15/scripts/show-tree.ps1 → python_template_project-0.1.19/scripts/show_tree.ps1 +1 -0
- python_template_project-0.1.19/scripts/update_readme.py +21 -0
- python_template_project-0.1.19/src/firewall_handler.py +198 -0
- {python_template_project-0.1.15 → python_template_project-0.1.19}/src/python_template_project/_version.py +2 -2
- {python_template_project-0.1.15 → python_template_project-0.1.19}/src/python_template_project/cli/cli.py +1 -1
- {python_template_project-0.1.15 → python_template_project-0.1.19}/src/python_template_project/config/config.py +1 -1
- python_template_project-0.1.19/src/python_template_project/core/base.py +549 -0
- {python_template_project-0.1.15 → python_template_project-0.1.19}/src/python_template_project/gui/gui.py +2 -2
- {python_template_project-0.1.15 → python_template_project-0.1.19}/src/python_template_project.egg-info/PKG-INFO +33 -43
- {python_template_project-0.1.15 → python_template_project-0.1.19}/src/python_template_project.egg-info/SOURCES.txt +9 -4
- {python_template_project-0.1.15 → python_template_project-0.1.19}/src/python_template_project.egg-info/top_level.txt +1 -0
- python_template_project-0.1.19/template.yml.url +6 -0
- python_template_project-0.1.15/.github/rename_project.sh +0 -36
- python_template_project-0.1.15/.github/workflows/build-macos.yml +0 -93
- python_template_project-0.1.15/README.md +0 -64
- python_template_project-0.1.15/docs/index.md +0 -65
- python_template_project-0.1.15/scripts/update_readme.py +0 -11
- python_template_project-0.1.15/src/VERSION +0 -1
- python_template_project-0.1.15/src/python_template_project/core/base.py +0 -397
- {python_template_project-0.1.15 → python_template_project-0.1.19}/.github/FUNDING.yml +0 -0
- {python_template_project-0.1.15 → python_template_project-0.1.19}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {python_template_project-0.1.15 → python_template_project-0.1.19}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {python_template_project-0.1.15 → python_template_project-0.1.19}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {python_template_project-0.1.15 → python_template_project-0.1.19}/.github/actions/setup-environment/action.yml +0 -0
- {python_template_project-0.1.15 → python_template_project-0.1.19}/.github/dependabot.yml +0 -0
- {python_template_project-0.1.15 → python_template_project-0.1.19}/.github/init.sh +0 -0
- {python_template_project-0.1.15 → python_template_project-0.1.19}/.github/release_message.sh +0 -0
- {python_template_project-0.1.15 → python_template_project-0.1.19}/.github/workflows/main.yml +0 -0
- {python_template_project-0.1.15 → python_template_project-0.1.19}/.github/workflows/release.yml +0 -0
- /python_template_project-0.1.15/.github/workflows/update-readme.yml → /python_template_project-0.1.19/.github/workflows/update_readme.yml +0 -0
- {python_template_project-0.1.15 → python_template_project-0.1.19}/.gitignore +0 -0
- {python_template_project-0.1.15 → python_template_project-0.1.19}/.idea/runConfigurations/config_generate.xml +0 -0
- {python_template_project-0.1.15 → python_template_project-0.1.19}/.idea/runConfigurations/module_cli.xml +0 -0
- {python_template_project-0.1.15 → python_template_project-0.1.19}/.idea/runConfigurations/module_gui.xml +0 -0
- {python_template_project-0.1.15 → python_template_project-0.1.19}/.pre-commit-config.yaml +0 -0
- {python_template_project-0.1.15 → python_template_project-0.1.19}/.readthedocs.yaml +0 -0
- {python_template_project-0.1.15 → python_template_project-0.1.19}/LICENSE +0 -0
- {python_template_project-0.1.15 → python_template_project-0.1.19}/config.yaml +0 -0
- {python_template_project-0.1.15 → python_template_project-0.1.19}/docs/.nav.yml +0 -0
- {python_template_project-0.1.15 → python_template_project-0.1.19}/docs/_static/img/favicon.png +0 -0
- {python_template_project-0.1.15 → python_template_project-0.1.19}/docs/_static/img/logo.png +0 -0
- {python_template_project-0.1.15 → python_template_project-0.1.19}/docs/css/custom.css +0 -0
- {python_template_project-0.1.15 → python_template_project-0.1.19}/docs/develop/contributing.md +0 -0
- {python_template_project-0.1.15 → python_template_project-0.1.19}/docs/develop/make_windows.md +0 -0
- {python_template_project-0.1.15 → python_template_project-0.1.19}/docs/develop/pypi_release.md +0 -0
- {python_template_project-0.1.15 → python_template_project-0.1.19}/docs/getting-started/virtual-environment.md +0 -0
- {python_template_project-0.1.15 → python_template_project-0.1.19}/docs/usage/cli.md +0 -0
- {python_template_project-0.1.15 → python_template_project-0.1.19}/docs/usage/config.md +0 -0
- {python_template_project-0.1.15 → python_template_project-0.1.19}/examples/kuhkopfsteig.gpx +0 -0
- {python_template_project-0.1.15 → python_template_project-0.1.19}/examples/rother_lilienstein.gpx +0 -0
- {python_template_project-0.1.15 → python_template_project-0.1.19}/examples/teneriffa.gpx +0 -0
- {python_template_project-0.1.15 → python_template_project-0.1.19}/mkdocs.yml +0 -0
- {python_template_project-0.1.15 → python_template_project-0.1.19}/setup.cfg +0 -0
- {python_template_project-0.1.15 → python_template_project-0.1.19}/src/__init__.py +0 -0
- {python_template_project-0.1.15 → python_template_project-0.1.19}/src/main.py +0 -0
- {python_template_project-0.1.15 → python_template_project-0.1.19}/src/python_template_project/__init__.py +0 -0
- {python_template_project-0.1.15 → python_template_project-0.1.19}/src/python_template_project/__main__.py +0 -0
- {python_template_project-0.1.15 → python_template_project-0.1.19}/src/python_template_project/cli/__init__.py +0 -0
- {python_template_project-0.1.15 → python_template_project-0.1.19}/src/python_template_project/cli/__main__.py +0 -0
- {python_template_project-0.1.15 → python_template_project-0.1.19}/src/python_template_project/config/__init__.py +0 -0
- {python_template_project-0.1.15 → python_template_project-0.1.19}/src/python_template_project/core/__init__.py +0 -0
- {python_template_project-0.1.15 → python_template_project-0.1.19}/src/python_template_project/core/logging.py +0 -0
- {python_template_project-0.1.15 → python_template_project-0.1.19}/src/python_template_project/gui/__init__.py +0 -0
- {python_template_project-0.1.15 → python_template_project-0.1.19}/src/python_template_project/gui/__main__.py +0 -0
- {python_template_project-0.1.15 → python_template_project-0.1.19}/src/python_template_project.egg-info/dependency_links.txt +0 -0
- {python_template_project-0.1.15 → python_template_project-0.1.19}/src/python_template_project.egg-info/entry_points.txt +0 -0
- {python_template_project-0.1.15 → python_template_project-0.1.19}/src/python_template_project.egg-info/requires.txt +0 -0
- {python_template_project-0.1.15 → python_template_project-0.1.19}/tests/__init__.py +0 -0
- {python_template_project-0.1.15 → python_template_project-0.1.19}/tests/test_generic_cli.py +0 -0
- {python_template_project-0.1.15 → python_template_project-0.1.19}/tests/test_gpx.py +0 -0
- {python_template_project-0.1.15 → python_template_project-0.1.19}/uv.lock +0 -0
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
|
|
3
|
+
# Hilfsfunktion für Fehlermeldungen und Beenden
|
|
4
|
+
function die { echo "$*" >&2; exit 1; }
|
|
5
|
+
|
|
6
|
+
# parse args
|
|
7
|
+
while getopts a:p:n:d: flag
|
|
8
|
+
do
|
|
9
|
+
case "${flag}" in
|
|
10
|
+
a) author=${OPTARG};;
|
|
11
|
+
p) package_name=${OPTARG};; # The new internal Python package name (snake_case)
|
|
12
|
+
n) project_name=${OPTARG};; # The new external project name (kebab-case)
|
|
13
|
+
d) description=${OPTARG};;
|
|
14
|
+
*) die "Unknown Flag: $flag";;
|
|
15
|
+
esac
|
|
16
|
+
done
|
|
17
|
+
|
|
18
|
+
# Check whether all required arguments have been passed
|
|
19
|
+
[[ -z "$author" ]] && die "Missing Argument: -a (author)"
|
|
20
|
+
[[ -z "$package_name" ]] && die "Missing Argument: -p (package_name)"
|
|
21
|
+
[[ -z "$project_name" ]] && die "Missing Argument: -n (project_name)"
|
|
22
|
+
[[ -z "$description" ]] && die "Missing Argument: -d (description)"
|
|
23
|
+
|
|
24
|
+
echo "Author: $author";
|
|
25
|
+
echo "New Python Package Name (internal): $package_name";
|
|
26
|
+
echo "New Project Name (external/PyPI): $project_name";
|
|
27
|
+
echo "Description: $description";
|
|
28
|
+
|
|
29
|
+
echo "Renaming project content..."
|
|
30
|
+
|
|
31
|
+
# Old identifiers
|
|
32
|
+
original_author="pamagister"
|
|
33
|
+
original_project_name="python-template-project"
|
|
34
|
+
original_package_name="python_template_project"
|
|
35
|
+
original_description="Feature-rich Python project template designed for robustness and ease of use."
|
|
36
|
+
|
|
37
|
+
# Customize all file contents first
|
|
38
|
+
# Use 'git ls-files' to edit only versioned files
|
|
39
|
+
# Note the order: Replace more specific with more specific first,
|
|
40
|
+
# then more general ones.
|
|
41
|
+
# Important: Escape special characters in the variables if they could occur in the replacements.
|
|
42
|
+
# Here the variables are relatively safe as they only contain alphanumeric characters and hyphens/underscores.
|
|
43
|
+
|
|
44
|
+
for filename in $(git ls-files)
|
|
45
|
+
do
|
|
46
|
+
# Skip files in the .github/ directory
|
|
47
|
+
if [[ "$filename" == ".github"* ]]; then
|
|
48
|
+
echo "Skipping .github file: $filename"
|
|
49
|
+
continue
|
|
50
|
+
fi
|
|
51
|
+
# Replace the old internal package name with the new internal package name
|
|
52
|
+
sed -i "s/$original_package_name/$package_name/g" "$filename"
|
|
53
|
+
# Replace the old external project name with the new external project name
|
|
54
|
+
sed -i "s/$original_project_name/$project_name/g" "$filename"
|
|
55
|
+
# Replace the old author
|
|
56
|
+
sed -i "s/$original_author/$author/g" "$filename"
|
|
57
|
+
# Replace the old description with the new one
|
|
58
|
+
sed -i "s/$original_description/$description/g" "$filename"
|
|
59
|
+
echo "Processed: $filename"
|
|
60
|
+
done
|
|
61
|
+
|
|
62
|
+
# Then rename the directory
|
|
63
|
+
# Check if the directory exists before renaming it
|
|
64
|
+
OLD_PACKAGE_DIR="src/$original_package_name"
|
|
65
|
+
NEW_PACKAGE_DIR="src/$package_name"
|
|
66
|
+
|
|
67
|
+
if [ -d "$OLD_PACKAGE_DIR" ]; then
|
|
68
|
+
echo "Renaming directory: $OLD_PACKAGE_DIR to $NEW_PACKAGE_DIR"
|
|
69
|
+
mv "$OLD_PACKAGE_DIR" "$NEW_PACKAGE_DIR"
|
|
70
|
+
else
|
|
71
|
+
echo "Warning: Directory $OLD_PACKAGE_DIR not found. Skipping directory rename."
|
|
72
|
+
fi
|
|
73
|
+
|
|
74
|
+
# Remove the template.yml to indicate that the template has been applied
|
|
75
|
+
echo "Removing .github/template.yml"
|
|
76
|
+
rm -f .github/template.yml
|
|
77
|
+
|
|
78
|
+
echo "Project renaming complete!"
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
name: Build macOS App
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- '*' # Triggers for tags like 0.1 or v0.1.3
|
|
7
|
+
workflow_dispatch: # Allows manual triggering
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
build:
|
|
11
|
+
strategy:
|
|
12
|
+
fail-fast: false
|
|
13
|
+
matrix:
|
|
14
|
+
python-version: [ 3.11 ]
|
|
15
|
+
os: [ macos-latest ]
|
|
16
|
+
runs-on: ${{ matrix.os }}
|
|
17
|
+
|
|
18
|
+
steps:
|
|
19
|
+
- name: Checkout repository
|
|
20
|
+
uses: actions/checkout@v4
|
|
21
|
+
|
|
22
|
+
- name: Set up Python
|
|
23
|
+
uses: actions/setup-python@v5
|
|
24
|
+
with:
|
|
25
|
+
python-version: '3.11'
|
|
26
|
+
|
|
27
|
+
- name: Setup Environment # Composite Action
|
|
28
|
+
uses: ./.github/actions/setup-environment
|
|
29
|
+
with:
|
|
30
|
+
python-version: ${{ matrix.python-version }}
|
|
31
|
+
|
|
32
|
+
- name: Build Unified Executable and App Bundle with PyInstaller
|
|
33
|
+
run: |
|
|
34
|
+
run: make build-win
|
|
35
|
+
|
|
36
|
+
- name: Upload ZIP to GitHub Release
|
|
37
|
+
uses: softprops/action-gh-release@v2
|
|
38
|
+
if: startsWith(github.ref, 'refs/tags/')
|
|
39
|
+
with:
|
|
40
|
+
files: package-macOS.zip
|
|
41
|
+
env:
|
|
42
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
{python_template_project-0.1.15 → python_template_project-0.1.19}/.github/workflows/build.yml
RENAMED
|
@@ -29,16 +29,10 @@ jobs:
|
|
|
29
29
|
python-version: ${{ matrix.python-version }}
|
|
30
30
|
|
|
31
31
|
- name: Build Unified EXE with PyInstaller
|
|
32
|
-
run:
|
|
33
|
-
echo "Building unified CLI/GUI application"
|
|
34
|
-
uv run pyinstaller --onefile src/main.py --name python-template-project --add-data "config.yaml;." --hidden-import python_template_project.cli.cli --hidden-import python_template_project.gui.gui
|
|
32
|
+
run: make build-win
|
|
35
33
|
|
|
36
34
|
- name: Prepare ZIP file for release
|
|
37
35
|
run: |
|
|
38
|
-
mkdir release
|
|
39
|
-
copy dist\python-template-project.exe release\
|
|
40
|
-
copy config.yaml release\
|
|
41
|
-
copy README.md release\
|
|
42
36
|
echo " - Double-click to start GUI" >> release\USAGE.txt
|
|
43
37
|
echo " - Run from command line for CLI options" >> release\USAGE.txt
|
|
44
38
|
powershell Compress-Archive -Path release\* -DestinationPath installer-win.zip
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
name: Rename the project from template
|
|
2
|
+
|
|
3
|
+
on: [push]
|
|
4
|
+
|
|
5
|
+
permissions: write-all
|
|
6
|
+
|
|
7
|
+
jobs:
|
|
8
|
+
rename-project:
|
|
9
|
+
if: ${{ !contains (github.repository, 'python-template-project') }}
|
|
10
|
+
runs-on: ubuntu-latest
|
|
11
|
+
steps:
|
|
12
|
+
- uses: actions/checkout@v3
|
|
13
|
+
with:
|
|
14
|
+
# by default, it uses a depth of 1
|
|
15
|
+
# this fetches all history so that we can read each commit
|
|
16
|
+
fetch-depth: 0
|
|
17
|
+
ref: ${{ github.head_ref }}
|
|
18
|
+
|
|
19
|
+
# The repository name (e.g. "my-new-repo" or "my_new_repo")
|
|
20
|
+
- run: echo "NEW_REPO_BASE_NAME=$(echo '${{ github.repository }}' | awk -F '/' '{print $2}')" >> $GITHUB_ENV
|
|
21
|
+
shell: bash
|
|
22
|
+
|
|
23
|
+
# The name for internal Python packages (always with underscores)
|
|
24
|
+
- run: echo "NEW_PACKAGE_NAME=$(echo '${{ env.NEW_REPO_BASE_NAME }}' | tr '-' '_')" >> $GITHUB_ENV
|
|
25
|
+
shell: bash
|
|
26
|
+
|
|
27
|
+
# The name for external designations (remains as in the repo name)
|
|
28
|
+
- run: echo "NEW_PROJECT_NAME=$(echo '${{ env.NEW_REPO_BASE_NAME }}' | tr '_' '-')" >> $GITHUB_ENV
|
|
29
|
+
shell: bash
|
|
30
|
+
|
|
31
|
+
- run: echo "REPOSITORY_OWNER=$(echo '${{ github.repository }}' | awk -F '/' '{print $1}')" >> $GITHUB_ENV
|
|
32
|
+
shell: bash
|
|
33
|
+
|
|
34
|
+
- name: Check if this is still a template
|
|
35
|
+
id: is_template
|
|
36
|
+
# Check whether the template.yml still exists
|
|
37
|
+
run: echo "::set-output name=is_template::$(test -f .github/template.yml && echo 'true' || echo 'false')"
|
|
38
|
+
|
|
39
|
+
- name: Rename the project
|
|
40
|
+
# Execute only if the template.yml exists (indicator for template repo)
|
|
41
|
+
if: steps.is_template.outputs.is_template == 'true'
|
|
42
|
+
run: |
|
|
43
|
+
echo "Renaming the project with author: ${{ env.REPOSITORY_OWNER }}, package name: ${{ env.NEW_PACKAGE_NAME }}, project name: ${{ env.NEW_PROJECT_NAME }}"
|
|
44
|
+
.github/rename_project.sh \
|
|
45
|
+
-a "${{ env.REPOSITORY_OWNER }}" \
|
|
46
|
+
-p "${{ env.NEW_PACKAGE_NAME }}" \
|
|
47
|
+
-n "${{ env.NEW_PROJECT_NAME }}" \
|
|
48
|
+
-d "Feature-rich Python project template for ${{ env.NEW_PROJECT_NAME }}." # Customized description
|
|
49
|
+
|
|
50
|
+
- name: Configure Git # it is good practiceto configure git bot
|
|
51
|
+
run: |
|
|
52
|
+
git config user.name "github-actions[bot]"
|
|
53
|
+
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
|
|
54
|
+
# 'git config --global credential.helper store'
|
|
55
|
+
shell: bash
|
|
56
|
+
|
|
57
|
+
- name: Commit and Push Changes
|
|
58
|
+
run: |
|
|
59
|
+
git add .
|
|
60
|
+
git commit -m "✅ Project renamed from template."
|
|
61
|
+
git push --force
|
|
62
|
+
shell: bash
|
|
@@ -4,6 +4,41 @@ Changelog
|
|
|
4
4
|
|
|
5
5
|
(unreleased)
|
|
6
6
|
------------
|
|
7
|
+
- Feat #30: do not track _version.py. [Paul Magister]
|
|
8
|
+
- Feat #30: fix version. [Paul Magister]
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
0.1.17 (2025-06-20)
|
|
12
|
+
-------------------
|
|
13
|
+
- Feat #30: fix link issue by modifying link in README.md. [Paul
|
|
14
|
+
Magister]
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
0.1.16 (2025-06-20)
|
|
18
|
+
-------------------
|
|
19
|
+
- Fix #29: more rubust usage of srtm in case of connection issues. [Paul
|
|
20
|
+
Magister]
|
|
21
|
+
- Feat #30: exclude _version.py from check. [Paul Magister]
|
|
22
|
+
- Feat #31: doc on how to generate. [Paul Magister]
|
|
23
|
+
- Feat #30: exclude _version.py from check. [Paul Magister]
|
|
24
|
+
- Feat #31: enable project to be copied #31. [Paul Magister]
|
|
25
|
+
- Feat #27: move build logic into make file #27. [Paul Magister]
|
|
26
|
+
- Feat #30: improve README.md, fix utf8-issues on copying. [Paul
|
|
27
|
+
Magister]
|
|
28
|
+
- Feat #30: correct doc how to install and use this project. [Paul
|
|
29
|
+
Magister]
|
|
30
|
+
- Feat #30: add _version.py instead of VERSION. [Paul Magister]
|
|
31
|
+
- Update README.md from docs/index.md. [github-actions]
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
0.1.15 (2025-06-20)
|
|
35
|
+
-------------------
|
|
36
|
+
- Feat #30: switch build system to setuptools_scm. [Paul Magister]
|
|
37
|
+
- Feat #30: add some links to the doc. [Paul Magister]
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
0.1.14 (2025-06-20)
|
|
41
|
+
-------------------
|
|
7
42
|
- Feat #30: release project on pypi: deploy section in release.yml.
|
|
8
43
|
[Paul Magister]
|
|
9
44
|
- Feat #30: release project on pypi: rename contributing section, add
|
|
@@ -55,6 +55,42 @@ test: lint ## Run tests and generate coverage report.
|
|
|
55
55
|
uv run coverage xml
|
|
56
56
|
uv run coverage html
|
|
57
57
|
|
|
58
|
+
.PHONY: build-win
|
|
59
|
+
build-win: ## Build the Windows executable.
|
|
60
|
+
echo "Building unified CLI/GUI application"
|
|
61
|
+
uv run pyinstaller --onefile src/main.py --name python-template-project --add-data "config.yaml;." --hidden-import python_template_project.cli.cli --hidden-import python_template_project.gui.gui
|
|
62
|
+
rm -rf release
|
|
63
|
+
mkdir release
|
|
64
|
+
cp dist/python-template-project.exe release
|
|
65
|
+
cp config.yaml release
|
|
66
|
+
cp README.md release
|
|
67
|
+
|
|
68
|
+
.PHONY: build-macos
|
|
69
|
+
build-macos: ## Build the macOS executable.
|
|
70
|
+
echo "Building unified CLI/GUI application as executable"
|
|
71
|
+
uv run pyinstaller --onefile src/main.py --name python-template-project --add-data "config.yaml:." --hidden-import python_template_project.cli.cli --hidden-import python_template_project.gui.gui
|
|
72
|
+
|
|
73
|
+
echo "Building unified CLI/GUI application as .app bundle"
|
|
74
|
+
# --windowed is important to hide the console for GUI mode
|
|
75
|
+
# The name "TemplateApp" becomes the name of the .app
|
|
76
|
+
uv run pyinstaller --windowed --name "TemplateApp" src/main.py --add-data "config.yaml:." --hidden-import python_template_project.cli.cli --hidden-import python_template_project.gui.gui
|
|
77
|
+
|
|
78
|
+
# Prepare ZIP file for release
|
|
79
|
+
rm -rf release
|
|
80
|
+
mkdir release
|
|
81
|
+
echo "Copy the CLI/GUI executable"
|
|
82
|
+
cp dist/python-template-project release/
|
|
83
|
+
echo "Copy the .app bundle (directory) recursively"
|
|
84
|
+
cp -R "dist/TemplateApp.app" release/
|
|
85
|
+
echo "Copy configuration and documentation"
|
|
86
|
+
cp config.yaml release/
|
|
87
|
+
cp README.md release/
|
|
88
|
+
echo "Create usage instructions"
|
|
89
|
+
|
|
90
|
+
echo "Create the ZIP archive from the contents of the release folder"
|
|
91
|
+
cd release
|
|
92
|
+
zip -r ../package-macOS.zip .
|
|
93
|
+
|
|
58
94
|
.PHONY: watch
|
|
59
95
|
watch: ## Run tests on every change.
|
|
60
96
|
ls **/**.py | entr uv run pytest -s -vvv -l --tb=long --maxfail=1 tests/
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: python-template-project
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.19
|
|
4
4
|
Summary: Feature-rich Python project template designed for robustness and ease of use.
|
|
5
5
|
Author: pamagister
|
|
6
6
|
Requires-Python: <3.12,>=3.10
|
|
@@ -43,54 +43,44 @@ A feature-rich Python project template with with auto-generated CLI, GUI and par
|
|
|
43
43
|
|
|
44
44
|
This template provides a solid foundation for your next Python project, incorporating best practices for testing, automation, and distribution. It streamlines the development process with a comprehensive set of pre-configured tools and workflows, allowing you to focus on writing code.
|
|
45
45
|
|
|
46
|
+
## Installation
|
|
46
47
|
|
|
47
|
-
|
|
48
|
+
Download from [PyPI](https://pypi.org/).
|
|
48
49
|
|
|
49
|
-
|
|
50
|
-
* **CI/CD:** [GitHub Actions](https://github.com/features/actions) for automated builds (Windows, macOS), unit tests, and code checks.
|
|
51
|
-
* **Code Formatting and Linting:** Pre-commit hook with the [RUFF auto-formatter](https://docs.astral.sh/ruff/) to ensure consistent code style.
|
|
52
|
-
* **Automated Builds:** GitHub pipeline for automatically building a Windows executable and a macOS installer.
|
|
53
|
-
* **Package Management:** Utilizes [uv](https://docs.astral.sh/uv/getting-started/), an extremely fast Python package manager, with dependencies managed in `pyproject.toml`.
|
|
54
|
-
* **Parameter-Driven Automation:**
|
|
55
|
-
* Automatic generation of a configuration file from parameter definitions.
|
|
56
|
-
* Automatic generation of a Command-Line Interface (CLI) from the same parameters.
|
|
57
|
-
* Automatic generation of CLI API documentation.
|
|
58
|
-
* **Documentation:** Configuration for publishing documentation on [Read the Docs](https://about.readthedocs.com/) using [mkdocs](https://www.mkdocs.org/) .
|
|
59
|
-
* **Workflow Automation:** A `Makefile` is included to simplify and automate common development tasks.
|
|
60
|
-
* **Minimalist GUI:** Comes with a basic GUI based on [tkinker](https://tkdocs.com/tutorial/index.html) that includes an auto-generated settings menu based on your defined parameters.
|
|
61
|
-
* **Release pipeline:** Automated releases unsing the Makefile `make release` command, which creates a new tag and pushes it to the remote repo. The `release` pipeline will automatically create a new release on GitHub and trigger a release on PyPI.
|
|
62
|
-
* **[setuptools](https://pypi.org/project/setuptools/)** is used to package the project and manage dependencies.
|
|
63
|
-
* **[setuptools-scm](https://pypi.org/project/setuptools-scm/)** is used to automatically generate the `_version.py` file from the `pyproject.toml` file.
|
|
50
|
+
💾 For more installation options see [install](getting-started/install.md).
|
|
64
51
|
|
|
65
|
-
## Getting started
|
|
66
|
-
|
|
67
|
-
1. **Create** a new [github repository](https://docs.github.com/en/repositories/creating-and-managing-repositories/creating-a-new-repository).
|
|
68
|
-
2. **Clone** [github repository](https://docs.github.com/en/repositories/creating-and-managing-repositories/cloning-a-repository) the into your local file system.
|
|
69
|
-
```bash
|
|
70
|
-
git clone https://github.com/YOUR-USERNAME/YOUR-REPOSITORY
|
|
71
|
-
```
|
|
72
|
-
4. **Install** [uv package and project manager](https://docs.astral.sh/uv/getting-started/installation/)
|
|
73
|
-
```bash
|
|
74
|
-
pip install uv
|
|
75
|
-
```
|
|
76
|
-
5. **Generate** [a sample project](https://docs.astral.sh/uv/guides/projects/#creating-a-new-project) with uv
|
|
77
|
-
6. Add and **push** the artifacts to your github repository
|
|
78
|
-
```bash
|
|
79
|
-
git push
|
|
80
|
-
```
|
|
81
|
-
8. Copy the content of this repository into your repository
|
|
82
|
-
|
|
83
|
-
## Troubleshooting
|
|
84
|
-
|
|
85
|
-
### Problems with release pipeline
|
|
86
|
-
|
|
87
|
-
If you get this error below:
|
|
88
52
|
```bash
|
|
89
|
-
|
|
53
|
+
pip install python-template-project
|
|
90
54
|
```
|
|
91
55
|
|
|
92
|
-
|
|
56
|
+
Run GUI from command line
|
|
57
|
+
|
|
93
58
|
```bash
|
|
94
|
-
|
|
59
|
+
python-template-project-gui
|
|
95
60
|
```
|
|
96
61
|
|
|
62
|
+
## How to use this template
|
|
63
|
+
|
|
64
|
+
🐍 For details, see the [Getting Started](develop/01_getting_started_dev.md) guide.
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
## Feature overview
|
|
68
|
+
|
|
69
|
+
* 📦 **Package Management:** Utilizes [uv](https://docs.astral.sh/uv/getting-started/), an extremely fast Python package manager, with dependencies managed in `pyproject.toml`.
|
|
70
|
+
* ✅ **Code Formatting and Linting:** Pre-commit hook with the [RUFF auto-formatter](https://docs.astral.sh/ruff/) to ensure consistent code style.
|
|
71
|
+
* 🧪 **Testing:** Unit testing framework with [pytest](https://docs.pytest.org/en/latest/).
|
|
72
|
+
* 📊 **Code coverage reports** using [codecov](https://about.codecov.io/sign-up/)
|
|
73
|
+
* 🔄 **CI/CD:** [GitHub Actions](https://github.com/features/actions) for automated builds (Windows, macOS), unit tests, and code checks.
|
|
74
|
+
* 💾 **Automated Builds:** GitHub pipeline for automatically building a Windows executable and a macOS installer.
|
|
75
|
+
* 💬 **Parameter-Driven Automation:**
|
|
76
|
+
* Automatic generation of a configuration file from parameter definitions.
|
|
77
|
+
* Automatic generation of a Command-Line Interface (CLI) from the same parameters.
|
|
78
|
+
* Automatic generation of CLI API documentation.
|
|
79
|
+
* Automatic generation of change log using **gitchangelog** to keep a HISTORY.md file up to date.
|
|
80
|
+
* 📃 **Documentation:** Configuration for publishing documentation on [Read the Docs](https://about.readthedocs.com/) using [mkdocs](https://www.mkdocs.org/) .
|
|
81
|
+
* 🖼️ **Minimalist GUI:** Comes with a basic GUI based on [tkinker](https://tkdocs.com/tutorial/index.html) that includes an auto-generated settings menu based on your defined parameters.
|
|
82
|
+
* 🖥️ **Workflow Automation:** A `Makefile` is included to simplify and automate common development tasks.
|
|
83
|
+
* 🛳️ **Release pipeline:** Automated releases unsing the Makefile `make release` command, which creates a new tag and pushes it to the remote repo. The `release` pipeline will automatically create a new release on GitHub and trigger a release on [PyPI](https://pypi.org.
|
|
84
|
+
* **[setuptools](https://pypi.org/project/setuptools/)** is used to package the project and manage dependencies.
|
|
85
|
+
* **[setuptools-scm](https://pypi.org/project/setuptools-scm/)** is used to automatically generate the `_version.py` file from the `pyproject.toml` file.
|
|
86
|
+
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
<!-- This README.md is auto-generated from docs/index.md -->
|
|
2
|
+
|
|
3
|
+
# Welcome to python-template-project
|
|
4
|
+
|
|
5
|
+
A feature-rich Python project template with with auto-generated CLI, GUI and parameterized configuration.
|
|
6
|
+
|
|
7
|
+
[](https://github.com/pamagister/python-template-project/actions)
|
|
8
|
+
[](https://github.com/pamagister/python-template-project/releases)
|
|
9
|
+
[](https://python-template-project.readthedocs.io/en/stable/)
|
|
10
|
+
[](https://github.com/pamagister/python-template-project/blob/main/LICENSE)
|
|
11
|
+
[](https://github.com/pamagister/python-template-project/issues)
|
|
12
|
+
[](https://pypi.org/project/python-template-project/)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
This template provides a solid foundation for your next Python project, incorporating best practices for testing, automation, and distribution. It streamlines the development process with a comprehensive set of pre-configured tools and workflows, allowing you to focus on writing code.
|
|
16
|
+
|
|
17
|
+
## Installation
|
|
18
|
+
|
|
19
|
+
Download from [PyPI](https://pypi.org/).
|
|
20
|
+
|
|
21
|
+
💾 For more installation options see [install](docs/getting-started/install.md).
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
pip install python-template-project
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Run GUI from command line
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
python-template-project-gui
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## How to use this template
|
|
34
|
+
|
|
35
|
+
🐍 For details, see the [Getting Started](docs/develop/01_getting_started_dev.md) guide.
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
## Feature overview
|
|
39
|
+
|
|
40
|
+
* 📦 **Package Management:** Utilizes [uv](https://docs.astral.sh/uv/getting-started/), an extremely fast Python package manager, with dependencies managed in `pyproject.toml`.
|
|
41
|
+
* ✅ **Code Formatting and Linting:** Pre-commit hook with the [RUFF auto-formatter](https://docs.astral.sh/ruff/) to ensure consistent code style.
|
|
42
|
+
* 🧪 **Testing:** Unit testing framework with [pytest](https://docs.pytest.org/en/latest/).
|
|
43
|
+
* 📊 **Code coverage reports** using [codecov](https://about.codecov.io/sign-up/)
|
|
44
|
+
* 🔄 **CI/CD:** [GitHub Actions](https://github.com/features/actions) for automated builds (Windows, macOS), unit tests, and code checks.
|
|
45
|
+
* 💾 **Automated Builds:** GitHub pipeline for automatically building a Windows executable and a macOS installer.
|
|
46
|
+
* 💬 **Parameter-Driven Automation:**
|
|
47
|
+
* Automatic generation of a configuration file from parameter definitions.
|
|
48
|
+
* Automatic generation of a Command-Line Interface (CLI) from the same parameters.
|
|
49
|
+
* Automatic generation of CLI API documentation.
|
|
50
|
+
* Automatic generation of change log using **gitchangelog** to keep a HISTORY.md file up to date.
|
|
51
|
+
* 📃 **Documentation:** Configuration for publishing documentation on [Read the Docs](https://about.readthedocs.com/) using [mkdocs](https://www.mkdocs.org/) .
|
|
52
|
+
* 🖼️ **Minimalist GUI:** Comes with a basic GUI based on [tkinker](https://tkdocs.com/tutorial/index.html) that includes an auto-generated settings menu based on your defined parameters.
|
|
53
|
+
* 🖥️ **Workflow Automation:** A `Makefile` is included to simplify and automate common development tasks.
|
|
54
|
+
* 🛳️ **Release pipeline:** Automated releases unsing the Makefile `make release` command, which creates a new tag and pushes it to the remote repo. The `release` pipeline will automatically create a new release on GitHub and trigger a release on [PyPI](https://pypi.org.
|
|
55
|
+
* **[setuptools](https://pypi.org/project/setuptools/)** is used to package the project and manage dependencies.
|
|
56
|
+
* **[setuptools-scm](https://pypi.org/project/setuptools-scm/)** is used to automatically generate the `_version.py` file from the `pyproject.toml` file.
|
|
57
|
+
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
|
|
2
|
+
# Getting started developing
|
|
3
|
+
|
|
4
|
+
## Setup your project development environment
|
|
5
|
+
|
|
6
|
+
Getting started on developing your own project based on this template
|
|
7
|
+
|
|
8
|
+
> **DO NOT FORK** this is meant to be used from **[Use this template](https://github.com/pamagister/python-template-project/generate)** feature.
|
|
9
|
+
|
|
10
|
+
1. Click on **[Use this template](https://github.com/pamagister/python-template-project/generate)**
|
|
11
|
+
3. Give a name to your project
|
|
12
|
+
(e.g. `my_python_project` recommendation is to use all lowercase and underscores separation for repo names.)
|
|
13
|
+
3. Wait until the first run of CI finishes
|
|
14
|
+
(Github Actions will process the template and commit to your new repo)
|
|
15
|
+
|
|
16
|
+
## Troubleshooting
|
|
17
|
+
|
|
18
|
+
### Problems with release pipeline
|
|
19
|
+
|
|
20
|
+
If you get this error below:
|
|
21
|
+
```bash
|
|
22
|
+
/home/runner/work/_temp/xxxx_xxx.sh: line 1: .github/release_message.sh: Permission denied
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
You have to run these commands in your IDE Terminal or the git bash and then push the changes.
|
|
26
|
+
```bash
|
|
27
|
+
git update-index --chmod=+x ./.github/release_message.sh
|
|
28
|
+
```
|
|
29
|
+
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Naming Conventions in Python Projects
|
|
2
|
+
|
|
3
|
+
In Python projects, it's crucial to use consistent naming conventions to ensure code readability and maintainability. The choice between underscores (`_`) and hyphens (`-`) largely depends on the context.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Underscores (`_`) – Snake_case
|
|
8
|
+
|
|
9
|
+
Primarily use underscores **within your Python code** for multi-word names. This is known as `snake_case`.
|
|
10
|
+
|
|
11
|
+
* **Python Package Names (Internal):** The importable name of your Python package (e.g., the folder under `src/`) should use underscores.
|
|
12
|
+
* **Example:** `src/my_python_package` is imported as `import my_python_package`.
|
|
13
|
+
* **Module Names (.py files):** Python file names that are modules should also use underscores.
|
|
14
|
+
* **Example:** `my_module.py`, `data_processing.py`.
|
|
15
|
+
* **Variables, Functions, and Methods:** Within your code, these names should follow `snake_case`.
|
|
16
|
+
* **Example:** `my_variable`, `calculate_total()`, `_private_function()`.
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## Hyphens (`-`) – Kebab-case
|
|
21
|
+
|
|
22
|
+
Primarily use hyphens **outside of your Python code** for filesystem, URL, and human-readable names. This is often referred to as `kebab-case`.
|
|
23
|
+
|
|
24
|
+
* **PyPI Package Name (Project Name):** The name under which your project is published on PyPI and installed with `pip install` should use hyphens.
|
|
25
|
+
* **Example:** In `pyproject.toml`: `name = "my-python-project"`. Installation: `pip install my-python-project`.
|
|
26
|
+
* **Main Project Folder / Repository Name:** The root folder of your project in the file system.
|
|
27
|
+
* **Example:** `my-python-project/`.
|
|
28
|
+
* **Documentation Folders and Files (MkDocs, ReadTheDocs):** Folders and Markdown files within your documentation.
|
|
29
|
+
* **Example:** `docs/getting-started/installation-guide.md`.
|
|
30
|
+
* **Command-Line Tools / Scripts:** Names for executable scripts you define in your `pyproject.toml` under `[project.scripts]`.
|
|
31
|
+
* **Example:** `my-cli-tool = "my_python_package.cli:main"`.
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## Summary of Recommendations
|
|
36
|
+
|
|
37
|
+
| Context | Recommended Convention | Example |
|
|
38
|
+
| :---------------------------- | :--------------------- |:---------------------------------|
|
|
39
|
+
| **Internal Python Name** | Underscores (`_`) | `my_python_package` |
|
|
40
|
+
| **PyPI / Project Name** | Hyphens (`-`) | `my-python-package` |
|
|
41
|
+
| **Module Filename** | Underscores (`_`) | `my_module.py` |
|
|
42
|
+
| **Repository/Root Folder** | Hyphens (`-`) | `my-python-project/` |
|
|
43
|
+
| **Docs Folders/Files** | Hyphens (`-`) | `getting-started/cli-usage.md` |
|
|
44
|
+
| **CLI Commands** | Hyphens (`-`) | `my-cli-tool` |
|
|
45
|
+
|
|
46
|
+
Consistently applying these rules significantly improves the clarity and professionalism of your Python project.
|
{python_template_project-0.1.15 → python_template_project-0.1.19}/docs/getting-started/install.md
RENAMED
|
@@ -1,45 +1,66 @@
|
|
|
1
1
|
# Installation
|
|
2
2
|
|
|
3
3
|
|
|
4
|
+
## 🐍 PyPI
|
|
4
5
|
|
|
5
|
-
|
|
6
|
+
### Install the package from PyPI
|
|
7
|
+
|
|
8
|
+
Download from [PyPI](https://pypi.org/):
|
|
6
9
|
|
|
7
10
|
```bash
|
|
8
|
-
|
|
11
|
+
pip install python-template-project
|
|
9
12
|
```
|
|
10
13
|
|
|
14
|
+
### Run CLI from command line
|
|
15
|
+
```bash
|
|
16
|
+
python-template-project [OPTIONS] path/to/file
|
|
17
|
+
```
|
|
11
18
|
|
|
12
|
-
|
|
19
|
+
### Run GUI from command line
|
|
20
|
+
```bash
|
|
21
|
+
python-template-project-gui
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## 🔽 Executable
|
|
25
|
+
|
|
26
|
+
Download the latest executable:
|
|
13
27
|
|
|
14
28
|
- [⬇️ Download for Windows](https://github.com/pamagister/python-template-project/releases/latest/download/installer-win.zip)
|
|
15
29
|
- [⬇️ Download for macOS](https://github.com/pamagister/python-template-project/releases/latest/download/package-macos.zip)
|
|
16
30
|
|
|
17
31
|
|
|
32
|
+
## 👩🏼💻 Run from source
|
|
18
33
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
### Run with CLI from source
|
|
34
|
+
### Clone the repository
|
|
22
35
|
|
|
23
36
|
```bash
|
|
24
|
-
|
|
37
|
+
git clone
|
|
25
38
|
```
|
|
26
39
|
|
|
40
|
+
### Navigate to the project directory
|
|
27
41
|
|
|
28
|
-
|
|
42
|
+
```bash
|
|
43
|
+
cd python-template-project
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### Install dependencies
|
|
29
47
|
|
|
30
48
|
```bash
|
|
31
|
-
|
|
49
|
+
uv venv
|
|
50
|
+
uv pip install -e .[dev,docs]
|
|
32
51
|
```
|
|
33
52
|
|
|
34
53
|
|
|
35
|
-
|
|
54
|
+
### Run with CLI from source
|
|
36
55
|
|
|
37
|
-
### Run CLI from command line
|
|
38
56
|
```bash
|
|
39
|
-
python-
|
|
57
|
+
python -m python_template_project.cli [OPTIONS] path/to/file
|
|
40
58
|
```
|
|
41
59
|
|
|
42
|
-
|
|
60
|
+
|
|
61
|
+
### Run with GUI from source
|
|
62
|
+
|
|
43
63
|
```bash
|
|
44
|
-
python-
|
|
64
|
+
python -m python_template_project.gui
|
|
45
65
|
```
|
|
66
|
+
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# Welcome to python-template-project
|
|
2
|
+
|
|
3
|
+
A feature-rich Python project template with with auto-generated CLI, GUI and parameterized configuration.
|
|
4
|
+
|
|
5
|
+
[](https://github.com/pamagister/python-template-project/actions)
|
|
6
|
+
[](https://github.com/pamagister/python-template-project/releases)
|
|
7
|
+
[](https://python-template-project.readthedocs.io/en/stable/)
|
|
8
|
+
[](https://github.com/pamagister/python-template-project/blob/main/LICENSE)
|
|
9
|
+
[](https://github.com/pamagister/python-template-project/issues)
|
|
10
|
+
[](https://pypi.org/project/python-template-project/)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
This template provides a solid foundation for your next Python project, incorporating best practices for testing, automation, and distribution. It streamlines the development process with a comprehensive set of pre-configured tools and workflows, allowing you to focus on writing code.
|
|
14
|
+
|
|
15
|
+
## Installation
|
|
16
|
+
|
|
17
|
+
Download from [PyPI](https://pypi.org/).
|
|
18
|
+
|
|
19
|
+
💾 For more installation options see [install](getting-started/install.md).
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
pip install python-template-project
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Run GUI from command line
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
python-template-project-gui
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## How to use this template
|
|
32
|
+
|
|
33
|
+
🐍 For details, see the [Getting Started](develop/01_getting_started_dev.md) guide.
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
## Feature overview
|
|
37
|
+
|
|
38
|
+
* 📦 **Package Management:** Utilizes [uv](https://docs.astral.sh/uv/getting-started/), an extremely fast Python package manager, with dependencies managed in `pyproject.toml`.
|
|
39
|
+
* ✅ **Code Formatting and Linting:** Pre-commit hook with the [RUFF auto-formatter](https://docs.astral.sh/ruff/) to ensure consistent code style.
|
|
40
|
+
* 🧪 **Testing:** Unit testing framework with [pytest](https://docs.pytest.org/en/latest/).
|
|
41
|
+
* 📊 **Code coverage reports** using [codecov](https://about.codecov.io/sign-up/)
|
|
42
|
+
* 🔄 **CI/CD:** [GitHub Actions](https://github.com/features/actions) for automated builds (Windows, macOS), unit tests, and code checks.
|
|
43
|
+
* 💾 **Automated Builds:** GitHub pipeline for automatically building a Windows executable and a macOS installer.
|
|
44
|
+
* 💬 **Parameter-Driven Automation:**
|
|
45
|
+
* Automatic generation of a configuration file from parameter definitions.
|
|
46
|
+
* Automatic generation of a Command-Line Interface (CLI) from the same parameters.
|
|
47
|
+
* Automatic generation of CLI API documentation.
|
|
48
|
+
* Automatic generation of change log using **gitchangelog** to keep a HISTORY.md file up to date.
|
|
49
|
+
* 📃 **Documentation:** Configuration for publishing documentation on [Read the Docs](https://about.readthedocs.com/) using [mkdocs](https://www.mkdocs.org/) .
|
|
50
|
+
* 🖼️ **Minimalist GUI:** Comes with a basic GUI based on [tkinker](https://tkdocs.com/tutorial/index.html) that includes an auto-generated settings menu based on your defined parameters.
|
|
51
|
+
* 🖥️ **Workflow Automation:** A `Makefile` is included to simplify and automate common development tasks.
|
|
52
|
+
* 🛳️ **Release pipeline:** Automated releases unsing the Makefile `make release` command, which creates a new tag and pushes it to the remote repo. The `release` pipeline will automatically create a new release on GitHub and trigger a release on [PyPI](https://pypi.org.
|
|
53
|
+
* **[setuptools](https://pypi.org/project/setuptools/)** is used to package the project and manage dependencies.
|
|
54
|
+
* **[setuptools-scm](https://pypi.org/project/setuptools-scm/)** is used to automatically generate the `_version.py` file from the `pyproject.toml` file.
|
|
55
|
+
|