Developer Guide#
This guide provides an overview of the tooling this project uses and how to execute developer workflows using the developer CLI.
Python Environments#
This Python project is tested against different Python versions. For local development, it is a good idea to have those versions installed so that tests can be run against each.
There are libraries that can help with this. Which tools to use is largely a matter of preference, but below are a few recommendations.
For managing multiple Python versions:
OS package manager (e.g. apt, yum, homebrew, etc)
Build from source
For managing Python virtualenvs:
Tooling#
The following tools are used by this project:
Tool |
Description |
Configuration |
---|---|---|
Code formatter |
|
|
Import statement formatter |
|
|
Docstring formatter |
|
|
Code linter |
|
|
Code linter |
|
|
Type checker |
|
|
Test framework |
|
|
Test environment manager |
|
|
CLI task execution library |
|
Workflows#
The following workflows use developer CLI commands via invoke and are defined in tasks.py
.
Autoformat Code#
To run all autoformatters:
inv fmt
This is the same as running each autoformatter individually:
inv black
inv isort
inv docformatter
Lint#
To run all linters:
inv lint
This is the same as running each linter individually:
inv flake8
inv pylint
inv mypy
Test#
To run all unit tests:
inv unit
To run unit tests and builds:
inv test
Test on All Supported Python Versions#
To run tests on all supported Python versions:
tox
This requires that the supported versions are available on the PATH.
Build Package#
To build the package:
inv build
This will output the source and binary distributions under dist/
.
Build Docs#
To build documentation:
inv docs
This will output the documentation under docs/_build/
.
Serve Docs#
To serve docs over HTTP:
inv docs -s|--server [-b|--bind 127.0.0.1] [-p|--port 8000]
inv docs -s
inv docs -s -p 8080
inv docs -s -b 0.0.0.0 -p 8080
Delete Build Files#
To remove all build and temporary files:
inv clean
This will remove Python bytecode files, egg files, build output folders, caches, and tox folders.
Release Package#
To release a new version of the package to https://pypi.org:
inv release
CI/CD#
This project uses Github Actions for CI/CD: