diff options
author | aktersnurra <gustaf.rydholm@gmail.com> | 2020-06-02 22:49:22 +0200 |
---|---|---|
committer | aktersnurra <gustaf.rydholm@gmail.com> | 2020-06-02 22:49:22 +0200 |
commit | 118c02c2730aaac2d10c2b9847339f6ffc83223f (patch) | |
tree | f7e1dc9a7159b63945a19d742a525f20c90c969e /noxfile.py | |
parent | 81d48b6a4da96696afde87a54f9fb7d89dd64cd2 (diff) |
Working on lab 1.
Diffstat (limited to 'noxfile.py')
-rw-r--r-- | noxfile.py | 143 |
1 files changed, 143 insertions, 0 deletions
diff --git a/noxfile.py b/noxfile.py new file mode 100644 index 0000000..d391ff4 --- /dev/null +++ b/noxfile.py @@ -0,0 +1,143 @@ +"""Nox sessions.""" +import tempfile +from typing import Any + + +import nox +from nox.sessions import Session + +package = "text-recognizer" +nox.options.sessions = "lint", "mypy", "pytype", "safety", "tests" +locations = "src", "tests", "noxfile.py", "docs/conf.py" + + +def install_with_constraints(session: Session, *args: str, **kwargs: Any) -> None: + """Install packages constrained by Poetry's lock file. + + This function is a wrapper for nox.sessions.Session.install. It + invokes pip to install packages inside of the session's virtualenv. + Additionally, pip is passed a constraints file generated from + Poetry's lock file, to ensure that the packages are pinned to the + versions specified in poetry.lock. This allows you to manage the + packages as Poetry development dependencies. + + Args: + session: The Session object. + args: Command-line arguments for pip. + kwargs: Additional keyword arguments for Session.install. + + """ + with tempfile.NamedTemporaryFile() as requirements: + session.run( + "poetry", + "export", + "--dev", + "--format=requirements.txt", + f"--output={requirements.name}", + external=True, + ) + session.install(f"--constraint={requirements.name}", *args, **kwargs) + + +@nox.session(python="3.8") +def black(session: Session) -> None: + """Run black code formatter.""" + args = session.posargs or locations + install_with_constraints(session, "black") + session.run("black", *args) + + +@nox.session(python=["3.8", "3.7"]) +def lint(session: Session) -> None: + """Lint using flake8.""" + args = session.posargs or locations + install_with_constraints( + session, + "flake8", + "flake8-annotations", + "flake8-bandit", + "flake8-black", + "flake8-bugbear", + "flake8-docstrings", + "flake8-import-order", + "darglint", + ) + session.run("flake8", *args) + + +@nox.session(python="3.8") +def safety(session: Session) -> None: + """Scan dependencies for insecure packages.""" + with tempfile.NamedTemporaryFile() as requirements: + session.run( + "poetry", + "export", + "--dev", + "--format=requirements.txt", + "--without-hashes", + f"--output={requirements.name}", + external=True, + ) + install_with_constraints(session, "safety") + session.run("safety", "check", f"--file={requirements.name}", "--full-report") + + +@nox.session(python=["3.8", "3.7"]) +def mypy(session: Session) -> None: + """Type-check using mypy.""" + args = session.posargs or locations + install_with_constraints(session, "mypy") + session.run("mypy", *args) + + +@nox.session(python="3.7") +def pytype(session: Session) -> None: + """Type-check using pytype.""" + args = session.posargs or ["--disable=import-error", *locations] + install_with_constraints(session, "pytype") + session.run("pytype", *args) + + +@nox.session(python=["3.8", "3.7"]) +def tests(session: Session) -> None: + """Run the test suite.""" + args = session.posargs or ["--cov", "-m", "not e2e"] + session.run("poetry", "install", "--no-dev", external=True) + install_with_constraints( + session, "coverage[toml]", "pytest", "pytest-cov", "pytest-mock" + ) + session.run("pytest", *args) + + +@nox.session(python=["3.8", "3.7"]) +def typeguard(session: Session) -> None: + """Runtime type checking using Typeguard.""" + args = session.posargs or ["-m", "not e2e"] + session.run("poetry", "install", "--no-dev", external=True) + install_with_constraints(session, "pytest", "pytest-mock", "typeguard") + session.run("pytest", f"--typeguard-packages={package}", *args) + + +@nox.session(python=["3.8", "3.7"]) +def xdoctest(session: Session) -> None: + """Run examples with xdoctest.""" + args = session.posargs or ["all"] + session.run("poetry", "install", "--no-dev", external=True) + install_with_constraints(session, "xdoctest") + session.run("python", "-m", "xdoctest", package, *args) + + +@nox.session(python="3.8") +def coverage(session: Session) -> None: + """Upload coverage data.""" + install_with_constraints(session, "coverage[toml]", "codecov") + session.run("coverage", "xml", "--fail-under=0") + session.run("codecov", *session.posargs) + + +@nox.session(python="3.8") +def docs(session: Session) -> None: + """Build the documentation.""" + session.run("poetry", "install", "--no-dev", external=True) + install_with_constraints(session, "sphinx", "sphinx-autodoc-typehints") + session.run("sphinx-build", "docs", "docs/_build") |