Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/smarlhens/python-boilerplate
Python boilerplate using uv, pre-commit, prettier, pytest, GitHub Actions, mypy, ruff, bandit & docformatter.
https://github.com/smarlhens/python-boilerplate
bandit boilerplate docformatter docker gh-actions mypy pre-commit prettier pytest python renovate ruff uv
Last synced: 6 days ago
JSON representation
Python boilerplate using uv, pre-commit, prettier, pytest, GitHub Actions, mypy, ruff, bandit & docformatter.
- Host: GitHub
- URL: https://github.com/smarlhens/python-boilerplate
- Owner: smarlhens
- License: mit
- Created: 2022-06-16T17:01:38.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2024-10-24T16:22:33.000Z (3 months ago)
- Last Synced: 2024-10-25T12:27:04.675Z (3 months ago)
- Topics: bandit, boilerplate, docformatter, docker, gh-actions, mypy, pre-commit, prettier, pytest, python, renovate, ruff, uv
- Language: Dockerfile
- Homepage:
- Size: 208 KB
- Stars: 52
- Watchers: 3
- Forks: 5
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Python boilerplate
[![CodeQL](https://github.com/smarlhens/python-boilerplate/workflows/codeql/badge.svg)](https://github.com/smarlhens/python-boilerplate/actions/workflows/codeql.yml)
[![GitHub CI](https://github.com/smarlhens/python-boilerplate/workflows/ci/badge.svg)](https://github.com/smarlhens/python-boilerplate/actions/workflows/ci.yml)
[![GitHub license](https://img.shields.io/github/license/smarlhens/python-boilerplate)](https://github.com/smarlhens/python-boilerplate)---
## Table of Contents
- [Prerequisites](#prerequisites)
- [Installation](#installation)
- [What's in the box ?](#whats-in-the-box-)
- [Testing](#testing)
- [Docker](#docker)---
## Prerequisites
- [Python](https://www.python.org/downloads/) **>=3.13.0 <3.14.0** (_tested with 3.13.1_)
- [pre-commit](https://pre-commit.com/#install) **>=3.2.0 <5.0.0** (_tested with 4.0.1_)
- [uv](https://docs.astral.sh/uv/getting-started/installation/) **>=0.5.7** (_tested with 0.5.15_)
- [docker](https://docs.docker.com/get-docker/) (_optional_)---
## Installation
1. Clone the git repository
```bash
git clone https://github.com/smarlhens/python-boilerplate.git
```2. Go into the project directory
```bash
cd python-boilerplate/
```3. Checkout working branch
```bash
git checkout
```4. Enable pre-commit hooks
```bash
pre-commit install
```5. Configure Python environment
```bash
uv python install
uv venv
source .venv/bin/activate
```---
## What's in the box ?
### uv
[uv](https://github.com/astral-sh/uv) is an extremely fast Python package and project manager, written in Rust.
**pyproject.toml file** ([`pyproject.toml`](pyproject.toml)): orchestrate your project and its dependencies
**uv.lock file** ([`uv.lock`](uv.lock)): ensure that the package versions are consistent for everyone
working on your projectFor more configuration options and details, see the [configuration docs](https://docs.astral.sh/uv/).
### pre-commit
[pre-commit](https://pre-commit.com/) is a framework for managing and maintaining multi-language pre-commit hooks.
**.pre-commit-config.yaml file** ([`.pre-commit-config.yaml`](.pre-commit-config.yaml)): describes what repositories and
hooks are installedFor more configuration options and details, see the [configuration docs](https://pre-commit.com/).
### ruff
[ruff](https://github.com/astral-sh/ruff) is an extremely fast Python linter, written in Rust.
Rules are defined in the [`pyproject.toml`](pyproject.toml).
For more configuration options and details, see the [configuration docs](https://github.com/astral-sh/ruff#configuration).
### mypy
[mypy](http://mypy-lang.org/) is an optional static type checker for Python that aims to combine the benefits of
dynamic (or "duck") typing and static typing.Rules are defined in the [`pyproject.toml`](pyproject.toml).
For more configuration options and details, see the [configuration docs](https://mypy.readthedocs.io/).
### bandit
[bandit](https://bandit.readthedocs.io/) is a tool designed to find common security issues in Python code.
Rules are defined in the [`pyproject.toml`](pyproject.toml).
For more configuration options and details, see the [configuration docs](https://bandit.readthedocs.io/).
### docformatter
[docformatter](https://github.com/PyCQA/docformatter) is a tool designed to format docstrings to
follow [PEP 257](https://peps.python.org/pep-0257/).Options are defined in the [`.pre-commit-config.yaml`](.pre-commit-config.yaml).
---
## Testing
We are using [pytest](https://docs.pytest.org/) & [pytest-cov](https://github.com/pytest-dev/pytest-cov) to write tests.
To run tests:
```bash
uv run pytest tests
```Output
```text
collected 1 itemtests/test_myapplication.py::test_hello_world PASSED
```To run tests with coverage:
```bash
uv run pytest tests --cov=src
```Output
```text
collected 1 itemtests/test_myapplication.py::test_hello_world PASSED
---------- coverage: platform linux, python 3.10.4-final-0 -----------
Name Stmts Miss Cover
---------------------------------------------------
src/myapplication/__init__.py 1 0 100%
src/myapplication/main.py 6 2 67%
---------------------------------------------------
TOTAL 7 2 71%
```---
## Docker
### Build
To build the docker `production` image using [`Dockerfile`](Dockerfile):
```bash
docker build . -t my-python-application:latest
```To build the docker `development` image using [`Dockerfile`](Dockerfile):
```bash
docker build . --target development -t my-python-application:dev
```### Run
To run the python app example inside Docker:
```bash
docker run -it --rm my-python-application:latest # or :dev for development
```Output
```text
Hello World
```### Execute command inside container
```bash
docker run -it --rm my-python-application:latest bash
```---