manager.py 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. # *************************************************************************
  2. # Copyright © 2015 JiangLin. All rights reserved.
  3. # File Name: db_create.py
  4. # Author:JiangLin
  5. # Mail:xiyang0807@gmail.com
  6. # Created Time: 2016-02-11 13:34:38
  7. # *************************************************************************
  8. # !/usr/bin/env python
  9. # -*- coding=UTF-8 -*-
  10. from flask import url_for
  11. from flask_script import Manager
  12. from flask_migrate import Migrate, MigrateCommand
  13. from maple import app, db
  14. from maple.user.models import User, UserInfor, UserSetting, Role
  15. from getpass import getpass
  16. from werkzeug.security import generate_password_hash
  17. import os
  18. migrate = Migrate(app, db)
  19. manager = Manager(app)
  20. @manager.command
  21. def runserver():
  22. return app.run()
  23. @manager.command
  24. def init_db():
  25. """
  26. Drops and re-creates the SQL schema
  27. """
  28. db.drop_all()
  29. db.configure_mappers()
  30. db.create_all()
  31. db.session.commit()
  32. @manager.command
  33. def babel_init():
  34. pybabel = 'pybabel'
  35. os.system(pybabel +
  36. ' extract -F babel.cfg -k lazy_gettext -o messages.pot maple')
  37. os.system(pybabel + ' init -i messages.pot -d maple/translations -l zh')
  38. os.unlink('messages.pot')
  39. @manager.command
  40. def babel_update():
  41. pybabel = 'pybabel'
  42. os.system(pybabel +
  43. ' extract -F babel.cfg -k lazy_gettext -o messages.pot maple templates')
  44. os.system(pybabel + ' update -i messages.pot -d maple/translations')
  45. os.unlink('messages.pot')
  46. @manager.command
  47. def babel_compile():
  48. pybabel = 'pybabel'
  49. os.system(pybabel + ' compile -d maple/translations')
  50. @manager.option('-u', '--username', dest='username', default='admin')
  51. @manager.option('-e', '--email', dest='email')
  52. @manager.option('-w', '--password', dest='password')
  53. def create_user(username, email, password):
  54. if username == 'admin':
  55. username = input('Username(default admin):')
  56. if email is None:
  57. email = input('Email:')
  58. if password is None:
  59. password = getpass('Password:')
  60. user = User()
  61. user.username = username
  62. user.password = generate_password_hash(password)
  63. user.email = email
  64. user.is_superuser = True
  65. userinfor = UserInfor()
  66. user.infor = userinfor
  67. usersetting = UserSetting()
  68. user.setting = usersetting
  69. role = Role.query.filter_by(name='super').first()
  70. if role is None:
  71. role = Role()
  72. role.rolename = 'super'
  73. user.roles.append(role)
  74. db.session.add(user)
  75. db.session.commit()
  76. @manager.command
  77. def list_routes():
  78. import urllib
  79. output = []
  80. for rule in app.url_map.iter_rules():
  81. options = {}
  82. for arg in rule.arguments:
  83. options[arg] = "<{0}>".format(arg)
  84. methods = ','.join(rule.methods)
  85. url = url_for(rule.endpoint, **options)
  86. line = urllib.parse.unquote("{:50s} {:20s} {}".format(rule.endpoint,
  87. methods, url))
  88. output.append(line)
  89. for line in sorted(output):
  90. print(line)
  91. @manager.option('-h', '--host', dest='host', default='127.0.0.1')
  92. @manager.option('-p', '--port', dest='port', type=int, default=8000)
  93. @manager.option('-w', '--workers', dest='workers', type=int, default=2)
  94. def gunicorn(host, port, workers):
  95. """use gunicorn"""
  96. from gunicorn.app.base import Application
  97. class FlaskApplication(Application):
  98. def init(self, parser, opts, args):
  99. return {'bind': '{0}:{1}'.format(host, port), 'workers': workers}
  100. def load(self):
  101. return app
  102. application = FlaskApplication()
  103. return application.run()
  104. manager.add_command('db', MigrateCommand)
  105. if __name__ == '__main__':
  106. manager.run()