Codebase list python-webargs / debian/4.0.0-0kali1 tasks.py
debian/4.0.0-0kali1

Tree @debian/4.0.0-0kali1 (Download .tar.gz)

tasks.py @debian/4.0.0-0kali1raw · history · blame

# -*- coding: utf-8 -*-
import os
import sys
import webbrowser

from invoke import task

docs_dir = "docs"
build_dir = os.path.join(docs_dir, "_build")


@task
def test(ctx, syntax=True, coverage=False, browse=False):
    import pytest

    if syntax:
        precommit(ctx)
        flake(ctx)
    args = []
    if coverage:
        args.extend(["--cov=webargs", "--cov-report=term", "--cov-report=html"])

    ignores = []
    if sys.version_info < (3,):
        ignores += [
            os.path.join("tests", "test_aiohttpparser.py"),
            os.path.join("tests", "test_aiohttpparser_async_functions.py"),
        ]
    if ignores:
        for each in ignores:
            args.append("--ignore={0}".format(each))
    retcode = pytest.main(args)
    if coverage and browse:
        webbrowser.open_new_tab(os.path.join("htmlcov", "index.html"))
    sys.exit(retcode)


@task
def precommit(ctx):
    ctx.run("pre-commit run --all-files --show-diff-on-failure", echo=True)


@task
def flake(ctx):
    """Run flake8 on codebase."""
    cmd = "flake8 ."
    excludes = []
    if sys.version_info < (3,):
        excludes += [
            os.path.join("webargs", "async_decorators.py"),
            os.path.join("tests", "test_aiohttpparser_async_functions.py"),
            os.path.join("tests", "apps", "aiohttp_app.py"),
            os.path.join("tests", "test_aiohttparser.py"),
            os.path.join("webargs", "asyncparser.py"),
            os.path.join("webargs", "aiohttpparser.py"),
            os.path.join("examples", "annotations_example.py"),
            "build",
        ]
    if excludes:
        cmd += " --exclude={0}".format(",".join(excludes))
    ctx.run(cmd, echo=True)


@task
def clean(ctx):
    ctx.run("rm -rf build")
    ctx.run("rm -rf dist")
    ctx.run("rm -rf webargs.egg-info")
    clean_docs(ctx)
    print("Cleaned up.")


@task
def readme(ctx, browse=False):
    ctx.run("rst2html.py README.rst > README.html")
    if browse:
        webbrowser.open_new_tab("README.html")


@task
def clean_docs(ctx):
    ctx.run("rm -rf %s" % build_dir)


@task
def browse_docs(ctx):
    path = os.path.join(build_dir, "index.html")
    webbrowser.open_new_tab(path)


def build_docs(ctx, browse):
    ctx.run("sphinx-build %s %s" % (docs_dir, build_dir), echo=True)
    if browse:
        browse_docs(ctx)


@task
def docs(ctx, clean=False, browse=False, watch=False):
    """Build the docs."""
    if clean:
        clean_docs(ctx)
    if watch:
        watch_docs(ctx, browse=browse)
    else:
        build_docs(ctx, browse=browse)


@task
def watch_docs(ctx, browse=False):
    """Run build the docs when a file changes."""
    try:
        import sphinx_autobuild  # noqa
    except ImportError:
        print("ERROR: watch task requires the sphinx_autobuild package.")
        print("Install it with:")
        print("    pip install sphinx-autobuild")
        sys.exit(1)
    ctx.run(
        "sphinx-autobuild {0} {1} {2} -z webargs".format(
            "--open-browser" if browse else "", docs_dir, build_dir
        ),
        echo=True,
        pty=True,
    )