Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
ad4d2fd
commit 2a8f70b
Showing
1 changed file
with
44 additions
and
26 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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)) |