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.
Files changed (86) hide show
  1. python_template_project-0.1.19/.github/rename_project.sh +78 -0
  2. python_template_project-0.1.19/.github/template.yml +2 -0
  3. python_template_project-0.1.19/.github/workflows/build-macos.yml +42 -0
  4. {python_template_project-0.1.15 → python_template_project-0.1.19}/.github/workflows/build.yml +1 -7
  5. python_template_project-0.1.19/.github/workflows/rename_project.yml +62 -0
  6. {python_template_project-0.1.15 → python_template_project-0.1.19}/HISTORY.md +35 -0
  7. {python_template_project-0.1.15 → python_template_project-0.1.19}/Makefile +36 -0
  8. {python_template_project-0.1.15 → python_template_project-0.1.19}/PKG-INFO +33 -43
  9. python_template_project-0.1.19/README.md +57 -0
  10. python_template_project-0.1.19/docs/develop/01_getting_started_dev.md +29 -0
  11. python_template_project-0.1.19/docs/develop/naming_convention.md +46 -0
  12. {python_template_project-0.1.15 → python_template_project-0.1.19}/docs/getting-started/install.md +35 -14
  13. python_template_project-0.1.19/docs/index.md +55 -0
  14. {python_template_project-0.1.15 → python_template_project-0.1.19}/pyproject.toml +1 -0
  15. python_template_project-0.1.15/scripts/show-filelist.ps1 → python_template_project-0.1.19/scripts/show_filelist.ps1 +1 -1
  16. python_template_project-0.1.15/scripts/show-tree.ps1 → python_template_project-0.1.19/scripts/show_tree.ps1 +1 -0
  17. python_template_project-0.1.19/scripts/update_readme.py +21 -0
  18. python_template_project-0.1.19/src/firewall_handler.py +198 -0
  19. {python_template_project-0.1.15 → python_template_project-0.1.19}/src/python_template_project/_version.py +2 -2
  20. {python_template_project-0.1.15 → python_template_project-0.1.19}/src/python_template_project/cli/cli.py +1 -1
  21. {python_template_project-0.1.15 → python_template_project-0.1.19}/src/python_template_project/config/config.py +1 -1
  22. python_template_project-0.1.19/src/python_template_project/core/base.py +549 -0
  23. {python_template_project-0.1.15 → python_template_project-0.1.19}/src/python_template_project/gui/gui.py +2 -2
  24. {python_template_project-0.1.15 → python_template_project-0.1.19}/src/python_template_project.egg-info/PKG-INFO +33 -43
  25. {python_template_project-0.1.15 → python_template_project-0.1.19}/src/python_template_project.egg-info/SOURCES.txt +9 -4
  26. {python_template_project-0.1.15 → python_template_project-0.1.19}/src/python_template_project.egg-info/top_level.txt +1 -0
  27. python_template_project-0.1.19/template.yml.url +6 -0
  28. python_template_project-0.1.15/.github/rename_project.sh +0 -36
  29. python_template_project-0.1.15/.github/workflows/build-macos.yml +0 -93
  30. python_template_project-0.1.15/README.md +0 -64
  31. python_template_project-0.1.15/docs/index.md +0 -65
  32. python_template_project-0.1.15/scripts/update_readme.py +0 -11
  33. python_template_project-0.1.15/src/VERSION +0 -1
  34. python_template_project-0.1.15/src/python_template_project/core/base.py +0 -397
  35. {python_template_project-0.1.15 → python_template_project-0.1.19}/.github/FUNDING.yml +0 -0
  36. {python_template_project-0.1.15 → python_template_project-0.1.19}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  37. {python_template_project-0.1.15 → python_template_project-0.1.19}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  38. {python_template_project-0.1.15 → python_template_project-0.1.19}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  39. {python_template_project-0.1.15 → python_template_project-0.1.19}/.github/actions/setup-environment/action.yml +0 -0
  40. {python_template_project-0.1.15 → python_template_project-0.1.19}/.github/dependabot.yml +0 -0
  41. {python_template_project-0.1.15 → python_template_project-0.1.19}/.github/init.sh +0 -0
  42. {python_template_project-0.1.15 → python_template_project-0.1.19}/.github/release_message.sh +0 -0
  43. {python_template_project-0.1.15 → python_template_project-0.1.19}/.github/workflows/main.yml +0 -0
  44. {python_template_project-0.1.15 → python_template_project-0.1.19}/.github/workflows/release.yml +0 -0
  45. /python_template_project-0.1.15/.github/workflows/update-readme.yml → /python_template_project-0.1.19/.github/workflows/update_readme.yml +0 -0
  46. {python_template_project-0.1.15 → python_template_project-0.1.19}/.gitignore +0 -0
  47. {python_template_project-0.1.15 → python_template_project-0.1.19}/.idea/runConfigurations/config_generate.xml +0 -0
  48. {python_template_project-0.1.15 → python_template_project-0.1.19}/.idea/runConfigurations/module_cli.xml +0 -0
  49. {python_template_project-0.1.15 → python_template_project-0.1.19}/.idea/runConfigurations/module_gui.xml +0 -0
  50. {python_template_project-0.1.15 → python_template_project-0.1.19}/.pre-commit-config.yaml +0 -0
  51. {python_template_project-0.1.15 → python_template_project-0.1.19}/.readthedocs.yaml +0 -0
  52. {python_template_project-0.1.15 → python_template_project-0.1.19}/LICENSE +0 -0
  53. {python_template_project-0.1.15 → python_template_project-0.1.19}/config.yaml +0 -0
  54. {python_template_project-0.1.15 → python_template_project-0.1.19}/docs/.nav.yml +0 -0
  55. {python_template_project-0.1.15 → python_template_project-0.1.19}/docs/_static/img/favicon.png +0 -0
  56. {python_template_project-0.1.15 → python_template_project-0.1.19}/docs/_static/img/logo.png +0 -0
  57. {python_template_project-0.1.15 → python_template_project-0.1.19}/docs/css/custom.css +0 -0
  58. {python_template_project-0.1.15 → python_template_project-0.1.19}/docs/develop/contributing.md +0 -0
  59. {python_template_project-0.1.15 → python_template_project-0.1.19}/docs/develop/make_windows.md +0 -0
  60. {python_template_project-0.1.15 → python_template_project-0.1.19}/docs/develop/pypi_release.md +0 -0
  61. {python_template_project-0.1.15 → python_template_project-0.1.19}/docs/getting-started/virtual-environment.md +0 -0
  62. {python_template_project-0.1.15 → python_template_project-0.1.19}/docs/usage/cli.md +0 -0
  63. {python_template_project-0.1.15 → python_template_project-0.1.19}/docs/usage/config.md +0 -0
  64. {python_template_project-0.1.15 → python_template_project-0.1.19}/examples/kuhkopfsteig.gpx +0 -0
  65. {python_template_project-0.1.15 → python_template_project-0.1.19}/examples/rother_lilienstein.gpx +0 -0
  66. {python_template_project-0.1.15 → python_template_project-0.1.19}/examples/teneriffa.gpx +0 -0
  67. {python_template_project-0.1.15 → python_template_project-0.1.19}/mkdocs.yml +0 -0
  68. {python_template_project-0.1.15 → python_template_project-0.1.19}/setup.cfg +0 -0
  69. {python_template_project-0.1.15 → python_template_project-0.1.19}/src/__init__.py +0 -0
  70. {python_template_project-0.1.15 → python_template_project-0.1.19}/src/main.py +0 -0
  71. {python_template_project-0.1.15 → python_template_project-0.1.19}/src/python_template_project/__init__.py +0 -0
  72. {python_template_project-0.1.15 → python_template_project-0.1.19}/src/python_template_project/__main__.py +0 -0
  73. {python_template_project-0.1.15 → python_template_project-0.1.19}/src/python_template_project/cli/__init__.py +0 -0
  74. {python_template_project-0.1.15 → python_template_project-0.1.19}/src/python_template_project/cli/__main__.py +0 -0
  75. {python_template_project-0.1.15 → python_template_project-0.1.19}/src/python_template_project/config/__init__.py +0 -0
  76. {python_template_project-0.1.15 → python_template_project-0.1.19}/src/python_template_project/core/__init__.py +0 -0
  77. {python_template_project-0.1.15 → python_template_project-0.1.19}/src/python_template_project/core/logging.py +0 -0
  78. {python_template_project-0.1.15 → python_template_project-0.1.19}/src/python_template_project/gui/__init__.py +0 -0
  79. {python_template_project-0.1.15 → python_template_project-0.1.19}/src/python_template_project/gui/__main__.py +0 -0
  80. {python_template_project-0.1.15 → python_template_project-0.1.19}/src/python_template_project.egg-info/dependency_links.txt +0 -0
  81. {python_template_project-0.1.15 → python_template_project-0.1.19}/src/python_template_project.egg-info/entry_points.txt +0 -0
  82. {python_template_project-0.1.15 → python_template_project-0.1.19}/src/python_template_project.egg-info/requires.txt +0 -0
  83. {python_template_project-0.1.15 → python_template_project-0.1.19}/tests/__init__.py +0 -0
  84. {python_template_project-0.1.15 → python_template_project-0.1.19}/tests/test_generic_cli.py +0 -0
  85. {python_template_project-0.1.15 → python_template_project-0.1.19}/tests/test_gpx.py +0 -0
  86. {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,2 @@
1
+ author: pamagister
2
+ # Thanks and credits to rochacbruno, but i wanted to extend the functionality
@@ -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 }}
@@ -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.15
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
- ## Feature overview
48
+ Download from [PyPI](https://pypi.org/).
48
49
 
49
- * **Testing:** Unit testing setup with `pytest`.
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
- /home/runner/work/_temp/xxxx_xxx.sh: line 1: .github/release_message.sh: Permission denied
53
+ pip install python-template-project
90
54
  ```
91
55
 
92
- You have to run these commands in your IDE Terminal or the git bash and then push the changes.
56
+ Run GUI from command line
57
+
93
58
  ```bash
94
- git update-index --chmod=+x ./.github/release_message.sh
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
+ [![Github CI Status](https://github.com/pamagister/python-template-project/actions/workflows/main.yml/badge.svg)](https://github.com/pamagister/python-template-project/actions)
8
+ [![GitHub release](https://img.shields.io/github/v/release/pamagister/python-template-project)](https://github.com/pamagister/python-template-project/releases)
9
+ [![Read the Docs](https://readthedocs.org/projects/python-template-project/badge/?version=stable)](https://python-template-project.readthedocs.io/en/stable/)
10
+ [![License](https://img.shields.io/github/license/pamagister/python-template-project)](https://github.com/pamagister/python-template-project/blob/main/LICENSE)
11
+ [![GitHub issues](https://img.shields.io/github/issues/pamagister/python-template-project)](https://github.com/pamagister/python-template-project/issues)
12
+ [![PyPI](https://img.shields.io/pypi/v/python-template-project)](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.
@@ -1,45 +1,66 @@
1
1
  # Installation
2
2
 
3
3
 
4
+ ## 🐍 PyPI
4
5
 
5
- ## 🐍 Install from PyPI
6
+ ### Install the package from PyPI
7
+
8
+ Download from [PyPI](https://pypi.org/):
6
9
 
7
10
  ```bash
8
- python -m pip install python_template_project
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
- ## 🔽 Download installer
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
- ## Run from source
20
-
21
- ### Run with CLI from source
34
+ ### Clone the repository
22
35
 
23
36
  ```bash
24
- python -m python_template_project.cli [OPTIONS] path/to/file
37
+ git clone
25
38
  ```
26
39
 
40
+ ### Navigate to the project directory
27
41
 
28
- ### Run with GUI from source
42
+ ```bash
43
+ cd python-template-project
44
+ ```
45
+
46
+ ### Install dependencies
29
47
 
30
48
  ```bash
31
- python -m python_template_project.gui
49
+ uv venv
50
+ uv pip install -e .[dev,docs]
32
51
  ```
33
52
 
34
53
 
35
- ## Run from command line:
54
+ ### Run with CLI from source
36
55
 
37
- ### Run CLI from command line
38
56
  ```bash
39
- python-template-project [OPTIONS] path/to/file
57
+ python -m python_template_project.cli [OPTIONS] path/to/file
40
58
  ```
41
59
 
42
- ### Run GUI from command line
60
+
61
+ ### Run with GUI from source
62
+
43
63
  ```bash
44
- python-template-project-gui
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
+ [![Github CI Status](https://github.com/pamagister/python-template-project/actions/workflows/main.yml/badge.svg)](https://github.com/pamagister/python-template-project/actions)
6
+ [![GitHub release](https://img.shields.io/github/v/release/pamagister/python-template-project)](https://github.com/pamagister/python-template-project/releases)
7
+ [![Read the Docs](https://readthedocs.org/projects/python-template-project/badge/?version=stable)](https://python-template-project.readthedocs.io/en/stable/)
8
+ [![License](https://img.shields.io/github/license/pamagister/python-template-project)](https://github.com/pamagister/python-template-project/blob/main/LICENSE)
9
+ [![GitHub issues](https://img.shields.io/github/issues/pamagister/python-template-project)](https://github.com/pamagister/python-template-project/issues)
10
+ [![PyPI](https://img.shields.io/pypi/v/python-template-project)](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
+