|
|
|
#!/usr/bin/env python
|
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
"""Invoke tasks."""
|
|
|
|
import json
|
|
|
|
import os
|
|
|
|
import shutil
|
|
|
|
import webbrowser
|
|
|
|
|
|
|
|
from invoke import task
|
|
|
|
|
|
|
|
HERE = os.path.abspath(os.path.dirname(__file__))
|
|
|
|
with open(os.path.join(HERE, "cookiecutter.json"), "r") as fp:
|
|
|
|
COOKIECUTTER_SETTINGS = json.load(fp)
|
|
|
|
# Match default value of app_name from cookiecutter.json
|
|
|
|
COOKIECUTTER_SETTINGS["app_name"] = "my_flask_app"
|
|
|
|
COOKIE = os.path.join(HERE, COOKIECUTTER_SETTINGS["app_name"])
|
|
|
|
REQUIREMENTS = os.path.join(COOKIE, "requirements", "dev.txt")
|
|
|
|
|
|
|
|
|
|
|
|
def _run_npm_command(ctx, command):
|
|
|
|
os.chdir(COOKIE)
|
|
|
|
ctx.run("npm {0}".format(command), echo=True)
|
|
|
|
os.chdir(HERE)
|
|
|
|
|
|
|
|
|
|
|
|
@task
|
|
|
|
def build(ctx):
|
|
|
|
"""Build the cookiecutter."""
|
|
|
|
ctx.run("cookiecutter {0} --no-input".format(HERE))
|
|
|
|
_run_npm_command(ctx, "install")
|
|
|
|
_run_npm_command(ctx, "run build")
|
|
|
|
|
|
|
|
|
|
|
|
@task
|
|
|
|
def clean(ctx):
|
|
|
|
"""Clean out generated cookiecutter."""
|
|
|
|
if os.path.exists(COOKIE):
|
|
|
|
shutil.rmtree(COOKIE)
|
|
|
|
print("Removed {0}".format(COOKIE))
|
|
|
|
else:
|
|
|
|
print("App directory does not exist. Skipping.")
|
|
|
|
|
|
|
|
|
|
|
|
def _run_flask_command(ctx, command, *args):
|
|
|
|
os.chdir(COOKIE)
|
|
|
|
flask_command = "flask {0}".format(command)
|
|
|
|
if args:
|
|
|
|
flask_command = "{0} {1}".format(flask_command, " ".join(args))
|
|
|
|
ctx.run(flask_command, echo=True)
|
|
|
|
|
|
|
|
|
|
|
|
@task(pre=[clean, build])
|
|
|
|
def test(ctx):
|
|
|
|
"""Run lint commands and tests."""
|
|
|
|
ctx.run("pip install -r {0} --ignore-installed".format(REQUIREMENTS), echo=True)
|
|
|
|
_run_npm_command(ctx, "run lint")
|
|
|
|
os.chdir(COOKIE)
|
|
|
|
shutil.copyfile(os.path.join(COOKIE, ".env.example"), os.path.join(COOKIE, ".env"))
|
|
|
|
os.environ["FLASK_ENV"] = "production"
|
|
|
|
os.environ["FLASK_DEBUG"] = "0"
|
|
|
|
_run_flask_command(ctx, "lint", "--check")
|
|
|
|
_run_flask_command(ctx, "test")
|
|
|
|
|
|
|
|
|
|
|
|
@task
|
|
|
|
def readme(ctx, browse=False):
|
|
|
|
ctx.run("rst2html.py README.rst > README.html")
|
|
|
|
if browse:
|
|
|
|
webbrowser.open_new_tab("README.html")
|