Skip to main content

Invokes Python dev tools at once.

Project description

Invoke Lint

Test CodeQL Test Coverage Maintainability Code Climate technical debt Python versions Twitter URL

Invokes Python dev tools at once.

Attention

  • The development status of this package is Beta now. It may not be able to keep backward compatibility. Be careful to use, especially for CI.
  • Currently, each commands require to run in project home directory.

Advantage

  1. Covers major development tools and they are optional to install
  2. Quick response for developer, slow but detail for CI
  3. Available to place commands into your selected namespace

1. Covers major development tools and they are optional to install

You can choose which dev tool you'll install, this package doesn't force to install each of dev tools. It helps you to avoid conflicts or breaking your project's dependencies.

Supporting tools:

Linters:

Formatters:

For test and coverage:

Package build:

2. Quick response for developer, slow but detailed for CI

The commands for each kind of tasks are designed as unified into 2 main commands:

  • For developer: Runs only quick responsive dev tools at once
  • For CI (or final check): Runs slow but detailed responsive tools at once

3. Available to place commands into your selected namespace

This doesn't pollute your comfortable namespaces of command line tools. Thanks to Invoke, you can place commands into your selected namespace. (See: Quickstart)

Representative commands

(Note that the namespaces of following commands can be changed as you like. See: Quickstart)

inv lint

Runs following fast lints at once:

  1. Ruff
  2. Bandit
  3. dodgy
  4. Flake8
  5. pydocstyle
  6. Xenon

The format task (described later) also run before run above lints. You can skip them by --skip-format option.

inv lint.deep

Runs following slow but detailed lints at once:

  1. Pylint
  2. mypy
  3. Semgrep

inv radon

Reports radon both code complexity and maintainability index.

inv style

Formats code by following tools at once:

  1. docformatter
  2. isort
  3. autoflake
  4. Black
  5. Ruff (optional)
  • inv style --check can only check.
  • inv style --ruff can fix Ruff warnings at once.

inv test

Runs fast tests (which is not marked @pytest.mark.slow) by pytest.

See:

inv test.cov

Runs all tests and report coverage by pytest and Coverage.py.

It also can dump coverage as XML or HTML format.

inv dist

Builds source and wheel packages into dist/ directory by build.
(Currently, not support in Windows)

See:

Quickstart

1. Install

It's better to use one of dependency management tools to resolve dependencies of many dev tools.

For example, in case when use Pipenv, Pipfile:

[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"

[dev-packages]
autoflake = "*"
bandit = {version = "*", markers="python_version >= '3.7'"}
black = {version = "*", markers="python_version >= '3.7'"}
build = "*"
# Hotfix for Pipenv's Bug:
# - Pipenv should prioritize more cross-platform sys_platform condition between packages when lock
#   · Issue #4101 · pypa/pipenv
#   https://github.com/pypa/pipenv/issues/4101
colorama = "*"
coverage = ">=3.5.4"
dlint = "*"
docformatter = {extras = ["tomli"], version = "*"}
dodgy = "*"
# Since Pipenv can't lock for too much combinations to attempt lock:
# pip._vendor.resolvelib.resolvers.ResolutionTooDeep: 2000000
flake8 = {version = "==4.0.1", markers="python_version >= '3.6'"}
# To use flake8 --radon-show-closures
flake8-polyfill = "*"
# Latest hacking depends on legacy version of flake8, and legacy hacking doesn't narrow flake8 version.
# When unpin hacking, it has possibility to install too legacy version of hacking.
hacking = {version = ">=5.0.0", markers="python_version >= '3.8'"}
invokelint = {version = "*", markers="python_version >= '3.7'"}
isort = "*"
mypy = "*"
pydocstyle = {version = "*", markers="python_version >= '3.6'"}
pylint = "*"
pytest = "*"
radon = "*"
ruff = {version = "*", markers="python_version >= '3.7'"}
semgrep = {version = "*", markers="python_version >= '3.6'"}
tomli = {version = "*", markers="python_version >= '3.6'"}
xenon = "*"

then:

pipenv install --dev
pipenv shell

2. Implement

Create tasks.py in project directory:

"""Tasks for maintaining the project.

Execute 'invoke --list' for guidance on using Invoke
"""
from invoke import Collection

from invokelint import _clean, dist, lint, path, style, test

ns = Collection()
ns.add_collection(dist)
ns.add_collection(lint)
ns.add_collection(path)
ns.add_collection(style)
ns.add_collection(test)

Commands may be explicitly place with a different name than they were originally given via a name kwarg (or the 2nd regular arg):

ns.add_collection(lint, 'namespace-you-wish')

See: Constructing namespaces — Invoke documentation

3. Check installation

inv --list

4. Setup target package

This package reuses setuptools settings for package discovery for linting, formatting, and measuring coverage. You can check which package are discovered by setuptools and your project's settings, by following command:

$ inv path
Setuptools detected packages: ['invokelint', 'invokelint.path']
Root packages: ['invokelint']
Setuptools detected Python modules: ['setup', 'tasks']
Existing test packages: ['tests']
Python file or directories to lint: ['invokelint', 'setup.py', 'tasks.py', 'tests']
Python file or directories to lint excluding test packages: ['invokelint', 'setup.py', 'tasks.py']

If result is not your expected, follow official documentation of setuptools to configure pyproject.toml (recommended), setup.cfg, or setup.py.

See: Package Discovery and Namespace Packages - setuptools latest documentation

Credits

This package was created with Cookiecutter and the yukihiko-shinoda/cookiecutter-pypackage project template.

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

invokelint-0.7.0.tar.gz (23.6 kB view details)

Uploaded Source

Built Distribution

invokelint-0.7.0-py3-none-any.whl (16.3 kB view details)

Uploaded Python 3

File details

Details for the file invokelint-0.7.0.tar.gz.

File metadata

  • Download URL: invokelint-0.7.0.tar.gz
  • Upload date:
  • Size: 23.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.11.3

File hashes

Hashes for invokelint-0.7.0.tar.gz
Algorithm Hash digest
SHA256 1237cf1dd3d8f203190e4bb6bebda1ca1703e0860499eccddd5322a26688ea44
MD5 e7f696ff83a43f4cfb54b9e0e49c56c8
BLAKE2b-256 212c51c6af0edcea1da1176aff99426fed41ec3160150b37ab2da0cf52248361

See more details on using hashes here.

Provenance

File details

Details for the file invokelint-0.7.0-py3-none-any.whl.

File metadata

  • Download URL: invokelint-0.7.0-py3-none-any.whl
  • Upload date:
  • Size: 16.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.11.3

File hashes

Hashes for invokelint-0.7.0-py3-none-any.whl
Algorithm Hash digest
SHA256 54119242c74be071606de0b57c23a2ce5b7c228f065af9cb7127a424b9282be2
MD5 dc0983dc61a13d4cc22ee6631081a220
BLAKE2b-256 496e43fde9181eaaac2f6833e87f6aaf753820bab1c86a5c346f543b29c64f72

See more details on using hashes here.

Provenance

Supported by

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