manage.py 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import os
  2. COV = None
  3. if os.environ.get('FLASK_COVERAGE'):
  4. import coverage
  5. COV = coverage.coverage(branch=True, include='app/*')
  6. COV.start()
  7. if os.path.exists('.env'):
  8. print('Importing environment from .env...')
  9. for line in open('.env'):
  10. var = line.strip().split('=')
  11. if len(var) == 2:
  12. os.environ[var[0]] = var[1]
  13. from app import create_app, db
  14. from app.models import *
  15. from flask_script import Manager, Shell
  16. from flask_migrate import Migrate, MigrateCommand
  17. app = create_app(os.getenv('FLASK_CONFIG') or 'default')
  18. manager = Manager(app)
  19. migrate = Migrate(app, db)
  20. def make_shell_context():
  21. return dict(app=app, db=db)
  22. manager.add_command('shell', Shell(make_context=make_shell_context))
  23. manager.add_command('db', MigrateCommand)
  24. @manager.command
  25. def test(coverage=False):
  26. if coverage and not os.environ.get('FLASK_COVERAGE'):
  27. import sys
  28. os.environ['FLASK_COVERAGE'] = '1'
  29. os.execvp(sys.executable, [sys.executable] + sys.argv)
  30. import unittest
  31. tests = unittest.TestLoader().discover('test')
  32. unittest.TextTestRunner(verbosity=2).run(tests)
  33. if COV:
  34. COV.stop()
  35. COV.save()
  36. print('Coverage Summary:')
  37. COV.report()
  38. basedir = os.path.abspath(os.path.dirname(__file__))
  39. covdir = os.path.join(basedir, 'tmp/coverage')
  40. COV.html_report(directory=covdir)
  41. print(f'HTML version: file://{covdir}/index.html')
  42. COV.erase()
  43. @manager.command
  44. def profile(length=25, profile_dir=None):
  45. from werkzeug.contrib.profiler import ProfilerMiddleware
  46. app.wsgi_app = ProfilerMiddleware(app.wsgi_app, restrictions=[length],
  47. profile_dir=profile_dir)
  48. app.run()
  49. @manager.command
  50. def deploy():
  51. from flask.ext.migrate import upgrade
  52. from app.models import Role, User
  53. upgrade()
  54. Role.insert_roles()
  55. User.add_self_follows()
  56. if __name__ == '__main__':
  57. manager.run()