A minimal Python project demonstrating best practices for testing, documentation, and CI/CD. It implements a mini calculator as a minimal example.
Project description
python-project-template — showcasing good software practices
python-project-template is a small python project to showcase good programming and software practices such as testing, documentation, CI/CD.
This project implements a small dependence-free Calculator API (Operation, OperationRegistry, Calculator) that can register and compose simple mathematical operations.
Table of contents
Features Highlights
- Type-annotated API with runtime argument validation.
- Custom exceptions for clear error reporting.
- Comprehensive unit tests using
pytest. - Google-style documentation auto-generated with Sphinx.
- Pre-commit checks and code formatting tools.
- CI/CD pipelines for testing and docs via GitHub Actions.
See the Documentation for a detailed list of features.
Installation
To install the latest release from PyPI, use:
pip install python-project-template-AS
Alternatively, you can clone the repository and install dependencies and an editable installation of python-project-template-AS with:
git clone <https://github.com/andreascaglioni/python-project-template-AS>
cd python-project-template
pip install -e ".[dev]"
Usage and Testing
The following is a quick example for the Calculator API.
from python_project_template_AS import default_calculator, Operation
# Create a default calculator (pre-populated with common operations)
calc = default_calculator()
# Apply an addition operation
print(calc.apply('add', 2, 3)) # -> 5
# Compose unary operations into a Callable
f = calc.compose(['neg', 'sqr'])
print(f(-3)) # -> 9
# Register a custom operation
def inc(x):
return x + 1
calc.register(Operation('inc', inc, arity=1), replace=True)
print(calc.apply('inc', 4)) # -> 5
Find more examples in examples/.
To run the tests:
pytest tests/
pytest -v tests/ # verbose output
pytest --cov=python_project_template_AS tests/ # show test coverage
Documentation
For detailed documentation, please visit our GitHub Pages.
Contributing
Contributions are welcome. Typical workflow:
git checkout -b feat/your-feature
# make changes
pytest # run tests locally
git add -A && git commit -m "Add feature"
git push --set-upstream origin feat/your-feature
# open a PR
Run pip install -e .[dev] to get development tools (pre-commit, black, ruff, mypy, pytest, ...).
Run the pre-commit routine with pre-commit run --all-files before committing.
License
This project is licensed under the MIT License — see the LICENSE file.
Questions
If you have questions or want help extending the project (docs, CI, or examples), open an issue or drop a message in the repository.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file python_project_template_as-0.1.2.tar.gz.
File metadata
- Download URL: python_project_template_as-0.1.2.tar.gz
- Upload date:
- Size: 15.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4c4206e7c9c9308215dee78d7146eb5bbc500409c727c314526e3e770eff9098
|
|
| MD5 |
de4ad09d4b006a460b77a6e3c899d934
|
|
| BLAKE2b-256 |
368f23d290fb61b13bf69d76a709dddf378ae7d0d5e03cb088765bb66a01feec
|
File details
Details for the file python_project_template_as-0.1.2-py3-none-any.whl.
File metadata
- Download URL: python_project_template_as-0.1.2-py3-none-any.whl
- Upload date:
- Size: 7.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f1b4608d2c9a85eca8800359075c6c0121300d5103067eb8f48f6070e295c257
|
|
| MD5 |
817dda078bb62dee247e339aeb0783e7
|
|
| BLAKE2b-256 |
5f3c5d4da2cb764b7caca4e868fae5db3756573f12cc9e82b5217cc288d50dec
|