Run comprehensive Python quality checks in parallel (pytest, ruff, mypy, bandit, coverage)
You are helping the user run comprehensive Python quality checks for their project.
The quality check suite runs 5 checks in parallel for maximum speed:
Parallel execution reduces total time by ~60% compared to sequential checks.
Execute all checks in parallel:
python plugins/test-suite/skills/run-quality-checks/scripts/test_runner.py --all
Expected output:
Running Python quality checks in parallel...
[pytest] ━━━━━━━━━━━━━━━━━━━━━ 48/48 tests passed
[ruff] ━━━━━━━━━━━━━━━━━━━━━ 0 issues found
[mypy] ━━━━━━━━━━━━━━━━━━━━━ Type check passed
[bandit] ━━━━━━━━━━━━━━━━━━━━━ 0 security issues
[coverage] ━━━━━━━━━━━━━━━━━━━ 85% coverage
✓ All checks passed in 45s (4x faster than sequential)
Run unit and integration tests:
python plugins/test-suite/skills/run-quality-checks/scripts/test_runner.py --pytest
Options:
--pytest-args="-v" - Verbose output--pytest-args="-k test_auth" - Run specific tests--pytest-args="--maxfail=1" - Stop after first failureCheck code style and common errors:
python plugins/test-suite/skills/run-quality-checks/scripts/test_runner.py --ruff
Options:
--ruff-fix - Auto-fix issues where possible--ruff-args="--select E,F" - Select specific rule categoriesVerify type annotations:
python plugins/test-suite/skills/run-quality-checks/scripts/test_runner.py --mypy
Options:
--mypy-args="--strict" - Strict type checking--mypy-args="--ignore-missing-imports" - Ignore missing type stubsScan for security vulnerabilities:
python plugins/test-suite/skills/run-quality-checks/scripts/test_runner.py --bandit
Options:
--bandit-args="-ll" - Low and low confidence issues--bandit-args="--exclude tests/" - Exclude directoriesGenerate coverage report:
python plugins/test-suite/skills/run-quality-checks/scripts/test_runner.py --coverage
Options:
--coverage-min=80 - Set minimum coverage threshold--coverage-html - Generate HTML coverage report[tool.pytest.ini_options]
testpaths = ["tests"]
python_files = "test_*.py"
python_functions = "test_*"
addopts = "-v --strict-markers"
markers = [
"unit: Unit tests",
"integration: Integration tests",
"slow: Slow tests"
]
[tool.ruff]
line-length = 100
target-version = "py312"
[tool.ruff.lint]
select = ["E", "F", "W", "I", "N", "UP", "S", "B", "A", "C4", "SIM"]
ignore = ["E501"] # Line too long (handled by formatter)
[tool.mypy]
python_version = "3.12"
warn_return_any = true
warn_unused_configs = true
disallow_untyped_defs = true
ignore_missing_imports = false
[tool.bandit]
exclude_dirs = ["tests", "scripts"]
skips = ["B101", "B601"] # Skip specific checks
[tool.coverage.run]
source = ["src"]
omit = ["*/tests/*", "*/scripts/*"]
[tool.coverage.report]
precision = 2
show_missing = true
fail_under = 80
Check:
# Run specific failing test with verbose output
pytest tests/test_auth.py::test_login -v
Solutions:
Check:
# See detailed error with context
ruff check . --show-source
Solutions:
ruff check . --fix# noqa: E501 to ignore specific line (use sparingly)Check:
# Show detailed type error messages
mypy --show-error-codes --pretty
Solutions:
from typing import List, Dict, Optional# type: ignore for third-party library issuesCheck:
# See detailed security issue descriptions
bandit -r src/ -f txt
Solutions:
# nosec comment for false positives (with justification)Check:
# Generate HTML report to see uncovered lines
coverage html
open htmlcov/index.html
Solutions: