Skip to main content

A template for a python package.

Project description

Pytemplates Banner

Test status Linting status Release status pre-commit.ci status Code coverage status PyPI version

Description

A production ready python library template

  • Metadata and dependency information is stored in the pyproject.toml for compatibility with both pip and poetry.
  • Flake8, pylint, isort, and pytest configurations are defined to be compatible with the black autoformatter.
  • Pylint settings are based on the Google Python Style Guide and adapted for black compatibility.
  • Linting tools run automatically before each commit using pre-commit, black, and isort.
  • Test coverage reports are generated during every commit and pull request using coverage and pytest-cov. All reports are automatically uploaded and archived on codecov.io.
  • Unit tests are written using pytest and static type checking is provided by mypy.
  • Package releases to PyPI with dynamic versioning provided by bump2version begin automatically whenever a new tag is created in github.
  • Sphinx documentation is automatically generated and deployed to github pages during every release.
  • Release notes are automatically generated during every release using github actions.

Source code documentation

Installation

To install the package using pip:

pip install pytemplates_pypackage

To add the package as a dependency using poetry:

poetry add pytemplates_pypackage

Usage

From a .py file:

import pytemplates_pypackage
print(pytemplates_pypackage.__version__)
pytemplates_pypackage.greet(user="Jacob")

from pytemplates_pypackage import wish_farewell
wish_farewell(user="Jacob")

Developer Setup

Install the package using poetry:

poetry install

Install optional dependencies using the --extras flag:

poetry install --extras={environment}

Environments

test = [
    "pytest",
    "pytest-cov",
]

lint = [
    "black",
    "isort",
    "flake8",
    "pylint",
    "mypy",
    "pre-commit",
]

docs = [
    "Sphinx",
    "sphinx-rtd-theme",
]

# Includes all optional dependencies
dev = [
    "pytest",
    "pytest-cov",
    "black",
    "isort",
    "flake8",
    "pylint",
    "mypy",
    "pre-commit",
    "Sphinx",
    "sphinx-rtd-theme",
    "bump2version",
]

Commands

  • make clean - Remove all build, testing, and static documentation files.

  • make lint - Run the linting tools. Includes pre-commit hooks, black, isort, flake8, pylint, and mypy.

  • make test - Run the tests using pytest.

  • make check - Run the lint and test commands, followed by the clean command.

  • make gen-docs - Generate Sphinx HTML documentation.

  • make docs - Generate Sphinx HTML documentation and serve it to the browser.

  • make pre-release increment={major/minor/patch} - Bump the version and create a release tag. Should only be run from the main branch. Passes the increment value to bump2version to create a new version number dynamically. The new version number will be added to _version_.py and pyproject.toml and a new commit will be logged. The tag will be created from the new commit.

Workflows

  • lint - Run the linting tools on every push/pull_request to the main branch. Includes pre-commit hooks, black, isort, flake8, pylint, and mypy.

  • test - Run the tests on every push/pull_request to the main branch. Writes a coverage report using pytest-cov and uploads it to codecov.io.

  • release - Build a package distribution, create a github release, and publish the distribution to PyPI whenever a new tag is created. Linting and testing steps must pass before the release steps can begin. Sphinx documentation is automatically published to the sphinx-docs branch and hosted on github pages.

Releases

A release should consist of the following three steps from a clean, up to date, copy of the main branch:

  1. make pre-release increment={major/minor/patch} - Commit the version number bump and create a new tag locally. The version number follows semantic versioning standards (major.minor.patch) and the tag is simply the version number prepended with a 'v'.

  2. git push - Update the main branch with only the changes from the version bump. Wait until the test and lint workflows have completed successfully before starting the release workflow.

  3. git push --tags - Publish the new tag to kick off the release workflow.

File Tree

.
├── docs/
├── LICENSE
├── Makefile
├── poetry.lock
├── pyproject.toml
├── README.md
├── src
│   └── pytemplates_pypackage
│       ├── core
│          ├── __init__.py
│          ├── module1.py
│          └── module2.py
│       ├── __init__.py
│       └── __version__.py
└── tests
    ├── __init__.py
    ├── test_module1.py
    └── test_module2.py

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pytemplates_pypackage-0.0.7.tar.gz (6.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pytemplates_pypackage-0.0.7-py3-none-any.whl (5.8 kB view details)

Uploaded Python 3

File details

Details for the file pytemplates_pypackage-0.0.7.tar.gz.

File metadata

  • Download URL: pytemplates_pypackage-0.0.7.tar.gz
  • Upload date:
  • Size: 6.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.13

File hashes

Hashes for pytemplates_pypackage-0.0.7.tar.gz
Algorithm Hash digest
SHA256 59699d9fc78690e537129a550c93003a8aa2b88b9952d7a9105d2484cea30544
MD5 c2703c6fd5b0c2cb1615013b8794e131
BLAKE2b-256 cb4aa0c05df4dd82cf4caf6313628cc028f569eb84d5f669c4be1932c3e850ac

See more details on using hashes here.

File details

Details for the file pytemplates_pypackage-0.0.7-py3-none-any.whl.

File metadata

File hashes

Hashes for pytemplates_pypackage-0.0.7-py3-none-any.whl
Algorithm Hash digest
SHA256 76f799b3f19eb99a78c8b7157ef50c8c6cf3ee2c03acc87d724472e8c7ec0357
MD5 a5ba71ca9a3f4e133234871d645e62f5
BLAKE2b-256 062b0aec63c7f09f18386a5b337624895f5a9c59e3cbf9926a4f5c84c34f31e1

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page