Some past commits might have contained Cursor's IP or accidentally commited API keys. Before making the repository public, all the history has been squashed into a single commit with.
94 lines
2.3 KiB
Python
94 lines
2.3 KiB
Python
"""Click commands."""
|
|
|
|
import os
|
|
from glob import glob
|
|
from subprocess import call
|
|
|
|
import click
|
|
|
|
HERE = os.path.abspath(os.path.dirname(__file__))
|
|
PROJECT_ROOT = os.path.join(HERE, os.pardir)
|
|
TEST_PATH = os.path.join(PROJECT_ROOT, "tests")
|
|
|
|
|
|
@click.command()
|
|
@click.option(
|
|
"-c/-C",
|
|
"--coverage/--no-coverage",
|
|
default=True,
|
|
is_flag=True,
|
|
help="Show coverage report",
|
|
)
|
|
@click.option(
|
|
"-k",
|
|
"--filter",
|
|
default=None,
|
|
help="Filter tests by keyword expressions",
|
|
)
|
|
def test(coverage, filter):
|
|
"""Run the tests."""
|
|
import pytest
|
|
|
|
args = [TEST_PATH, "--verbose"]
|
|
if coverage:
|
|
args.append("--cov=app")
|
|
args.append("--cov-branch")
|
|
args.append("--cov-report=xml")
|
|
args.append("--cov-report=html")
|
|
args.append("--cov-report=term")
|
|
if filter:
|
|
args.extend(["-k", filter])
|
|
rv = pytest.main(args=args)
|
|
exit(rv)
|
|
|
|
|
|
@click.command()
|
|
@click.option(
|
|
"-f",
|
|
"--fix-imports",
|
|
default=True,
|
|
is_flag=True,
|
|
help="Fix imports using isort, before linting",
|
|
)
|
|
@click.option(
|
|
"-c",
|
|
"--check",
|
|
default=False,
|
|
is_flag=True,
|
|
help="Don't make any changes to files, just confirm they are formatted correctly",
|
|
)
|
|
def lint(fix_imports, check):
|
|
"""Lint and check code style with black, flake8 and isort."""
|
|
skip = [
|
|
"requirements",
|
|
"migrations",
|
|
"supervisord",
|
|
"htmlcov",
|
|
"__pycache__",
|
|
]
|
|
root_files = glob("*.py")
|
|
root_directories = [
|
|
name for name in next(os.walk("."))[1] if not name.startswith(".")
|
|
]
|
|
files_and_directories = [
|
|
arg for arg in root_files + root_directories if arg not in skip
|
|
]
|
|
|
|
def execute_tool(description, *args):
|
|
"""Execute a checking tool with its arguments."""
|
|
command_line = list(args) + files_and_directories
|
|
click.echo(f"{description}: {' '.join(command_line)}")
|
|
rv = call(command_line)
|
|
if rv != 0:
|
|
exit(rv)
|
|
|
|
isort_args = []
|
|
black_args = []
|
|
if check:
|
|
isort_args.append("--check")
|
|
black_args.append("--check")
|
|
if fix_imports:
|
|
execute_tool("Fixing import order", "isort", *isort_args)
|
|
execute_tool("Formatting style", "black", *black_args)
|
|
execute_tool("Checking code style", "flake8")
|