Skip to content

Commit

Permalink
Enhance Invoke tasks
Browse files Browse the repository at this point in the history
  • Loading branch information
justinmayer committed Apr 11, 2023
1 parent ad4d2fd commit 2a8f70b
Showing 1 changed file with 44 additions and 26 deletions.
70 changes: 44 additions & 26 deletions tasks.py
@@ -1,79 +1,97 @@
from inspect import cleandoc
import os
from pathlib import Path
from shutil import which
import sys

from invoke import task

PKG_NAME = "pdf"
PKG_PATH = Path(f"pelican/plugins/{PKG_NAME}")

ACTIVE_VENV = os.environ.get("VIRTUAL_ENV", None)
VENV_HOME = Path(os.environ.get("WORKON_HOME", "~/.local/share/virtualenvs"))
VENV_PATH = Path(ACTIVE_VENV) if ACTIVE_VENV else (VENV_HOME / PKG_NAME)
VENV_PATH = Path(ACTIVE_VENV) if ACTIVE_VENV else (VENV_HOME.expanduser() / PKG_NAME)
VENV = str(VENV_PATH.expanduser())
BIN_DIR = "bin" if os.name != "nt" else "Scripts"
VENV_BIN = Path(VENV) / Path(BIN_DIR)

TOOLS = ["poetry", "pre-commit"]
POETRY = which("poetry") if which("poetry") else (VENV / Path("bin") / "poetry")
PRECOMMIT = (
which("pre-commit") if which("pre-commit") else (VENV / Path("bin") / "pre-commit")
)


@task
def tests(c):
"""Run the test suite"""
c.run(f"{VENV}/bin/pytest", pty=True)
TOOLS = ("poetry", "pre-commit")
POETRY = which("poetry") if which("poetry") else (VENV_BIN / "poetry")
CMD_PREFIX = f"{VENV_BIN}/" if ACTIVE_VENV else f"{POETRY} run "
PRECOMMIT = which("pre-commit") if which("pre-commit") else f"{CMD_PREFIX}pre-commit"
PTY = True if os.name != "nt" else False


@task
def black(c, check=False, diff=False):
"""Run Black auto-formatter, optionally with --check or --diff"""
"""Run Black auto-formatter, optionally with `--check` or `--diff`."""
check_flag, diff_flag = "", ""
if check:
check_flag = "--check"
if diff:
diff_flag = "--diff"
c.run(f"{VENV}/bin/black {check_flag} {diff_flag} {PKG_PATH} tasks.py")
c.run(f"{CMD_PREFIX}black {check_flag} {diff_flag} {PKG_PATH} tasks.py")


@task
def isort(c, check=False, diff=False):
"""Ensure imports are sorted according to project standards."""
check_flag, diff_flag = "", ""
if check:
check_flag = "-c"
if diff:
diff_flag = "--diff"
c.run(f"{VENV}/bin/isort {check_flag} {diff_flag} .")
c.run(f"{CMD_PREFIX}isort {check_flag} {diff_flag} .")


@task
def flake8(c):
c.run(f"{VENV}/bin/flake8 {PKG_PATH} tasks.py")
"""Check code for PEP8 compliance via Flake8."""
c.run(f"{CMD_PREFIX}flake8 {PKG_PATH} tasks.py")


@task
def lint(c):
isort(c, check=True)
black(c, check=True)
def lint(c, diff=False):
"""Check code style via linting tools."""
isort(c, check=True, diff=diff)
black(c, check=True, diff=diff)
flake8(c)


@task
def tools(c):
"""Install tools in the virtual environment if not already on PATH"""
"""Install development tools in the virtual environment if not already on PATH."""
for tool in TOOLS:
if not which(tool):
c.run(f"{VENV}/bin/pip install {tool}")
print(f"** Installing {tool}.")
c.run(f"{CMD_PREFIX}pip install {tool}")


@task
def precommit(c):
"""Install pre-commit hooks to .git/hooks/pre-commit"""
"""Install pre-commit hooks to `.git/hooks/pre-commit`."""
print("** Installing pre-commit hooks.")
c.run(f"{PRECOMMIT} install")


@task
def setup(c):
c.run(f"{VENV}/bin/pip install -U pip")
tools(c)
c.run(f"{POETRY} install")
precommit(c)
"""Set up the development environment."""
if which("poetry") or ACTIVE_VENV:
tools(c)
c.run(f"{CMD_PREFIX}python -m pip install --upgrade pip")
c.run(f"{POETRY} install")
precommit(c)
print("\nDevelopment environment should now be set up and ready!\n")
else:
error_message = """
Poetry is not installed, and there is no active virtual environment available.
You can either manually create and activate a virtual environment, or you can
install Poetry via:
curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python -
Once you have taken one of the above two steps, run `invoke setup` again.
""" # noqa: E501
sys.exit(cleandoc(error_message))

0 comments on commit 2a8f70b

Please sign in to comment.