- Update Flask to 0.11 (with built-in Click integration) - Remove manage.py - Add autoapp.py per Flask doc's new recommendations for using Click with an app factory - Define cookiecutter-flask's commands in cli.py - Register shell context and shell commands as part of factory-based app creation - Update README instructions with examples for running commands in new Click stylemaster
parent
b600aa2907
commit
3d8f8c3c9e
@ -1,77 +0,0 @@ |
|||||||
#!/usr/bin/env python |
|
||||||
# -*- coding: utf-8 -*- |
|
||||||
"""Management script.""" |
|
||||||
import os |
|
||||||
from glob import glob |
|
||||||
from subprocess import call |
|
||||||
|
|
||||||
from flask_migrate import Migrate, MigrateCommand |
|
||||||
from flask_script import Command, Manager, Option, Server, Shell |
|
||||||
from flask_script.commands import Clean, ShowUrls |
|
||||||
|
|
||||||
from {{cookiecutter.app_name}}.app import create_app |
|
||||||
from {{cookiecutter.app_name}}.database import db |
|
||||||
from {{cookiecutter.app_name}}.settings import DevConfig, ProdConfig |
|
||||||
from {{cookiecutter.app_name}}.user.models import User |
|
||||||
|
|
||||||
CONFIG = ProdConfig if os.environ.get('{{cookiecutter.app_name | upper}}_ENV') == 'prod' else DevConfig |
|
||||||
HERE = os.path.abspath(os.path.dirname(__file__)) |
|
||||||
TEST_PATH = os.path.join(HERE, 'tests') |
|
||||||
|
|
||||||
app = create_app(CONFIG) |
|
||||||
manager = Manager(app) |
|
||||||
migrate = Migrate(app, db) |
|
||||||
|
|
||||||
|
|
||||||
def _make_context(): |
|
||||||
"""Return context dict for a shell session so you can access app, db, and the User model by default.""" |
|
||||||
return {'app': app, 'db': db, 'User': User} |
|
||||||
|
|
||||||
|
|
||||||
@manager.command |
|
||||||
def test(): |
|
||||||
"""Run the tests.""" |
|
||||||
import pytest |
|
||||||
exit_code = pytest.main([TEST_PATH, '--verbose']) |
|
||||||
return exit_code |
|
||||||
|
|
||||||
|
|
||||||
class Lint(Command): |
|
||||||
"""Lint and check code style with flake8 and isort.""" |
|
||||||
|
|
||||||
def get_options(self): |
|
||||||
"""Command line options.""" |
|
||||||
return ( |
|
||||||
Option('-f', '--fix-imports', action='store_true', dest='fix_imports', default=False, |
|
||||||
help='Fix imports using isort, before linting'), |
|
||||||
) |
|
||||||
|
|
||||||
def run(self, fix_imports): |
|
||||||
"""Run command.""" |
|
||||||
skip = ['requirements'] |
|
||||||
root_files = glob('*.py') |
|
||||||
root_directories = [name for name in next(os.walk('.'))[1] if not name.startswith('.')] |
|
||||||
files_and_directories = [arg for arg in root_files + root_directories if arg not in skip] |
|
||||||
|
|
||||||
def execute_tool(description, *args): |
|
||||||
"""Execute a checking tool with its arguments.""" |
|
||||||
command_line = list(args) + files_and_directories |
|
||||||
print('{}: {}'.format(description, ' '.join(command_line))) |
|
||||||
rv = call(command_line) |
|
||||||
if rv is not 0: |
|
||||||
exit(rv) |
|
||||||
|
|
||||||
if fix_imports: |
|
||||||
execute_tool('Fixing import order', 'isort', '-rc') |
|
||||||
execute_tool('Checking code style', 'flake8') |
|
||||||
|
|
||||||
|
|
||||||
manager.add_command('server', Server()) |
|
||||||
manager.add_command('shell', Shell(make_context=_make_context)) |
|
||||||
manager.add_command('db', MigrateCommand) |
|
||||||
manager.add_command('urls', ShowUrls()) |
|
||||||
manager.add_command('clean', Clean()) |
|
||||||
manager.add_command('lint', Lint()) |
|
||||||
|
|
||||||
if __name__ == '__main__': |
|
||||||
manager.run() |
|
@ -0,0 +1,10 @@ |
|||||||
|
# -*- coding: utf-8 -*- |
||||||
|
"""Create an application instance.""" |
||||||
|
import os |
||||||
|
|
||||||
|
from {{cookiecutter.app_name}}.app import create_app |
||||||
|
from {{cookiecutter.app_name}}.settings import DevConfig, ProdConfig |
||||||
|
|
||||||
|
CONFIG = ProdConfig if os.environ.get('{{cookiecutter.app_name | upper}}_ENV') == 'prod' else DevConfig |
||||||
|
|
||||||
|
app = create_app(CONFIG) |
@ -0,0 +1,17 @@ |
|||||||
|
# -*- coding: utf-8 -*- |
||||||
|
"""Click commands.""" |
||||||
|
import click |
||||||
|
import os |
||||||
|
from flask.cli import with_appcontext |
||||||
|
|
||||||
|
HERE = os.path.abspath(os.path.dirname(__file__)) |
||||||
|
PROJECT_ROOT = os.path.join(HERE, os.pardir) |
||||||
|
TEST_PATH = os.path.join(PROJECT_ROOT, 'tests') |
||||||
|
|
||||||
|
|
||||||
|
@click.command('test') |
||||||
|
@with_appcontext |
||||||
|
def test_command(): |
||||||
|
"""Run the tests.""" |
||||||
|
import pytest |
||||||
|
pytest.main([TEST_PATH, '--verbose']) |
Loading…
Reference in new issue