manage.py 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. #!/usr/bin/env python2
  2. # MyServer
  3. import gevent.pywsgi
  4. from gevent import monkey; monkey.patch_all()
  5. import werkzeug.serving
  6. from werkzeug.debug import DebuggedApplication
  7. import os; os.environ.setdefault('FFDNISPDB_SETTINGS', '../settings_dev.py')
  8. from flask.ext.script import (Shell, Server, Manager, Command, Option,
  9. prompt, prompt_bool, prompt_pass)
  10. import ffdnispdb
  11. database_manager = Manager(usage=u'Perform database operations')
  12. @database_manager.command
  13. def create():
  14. "Initialize database, create tables"
  15. ffdnispdb.db.create_all()
  16. @database_manager.command
  17. def drop():
  18. "Drop existing tables"
  19. if prompt_bool("Are you sure you wish to destroy existing database"):
  20. ffdnispdb.db.drop_all()
  21. index_manager = Manager(usage=u'Manage the Whoosh index')
  22. @index_manager.command
  23. def rebuild():
  24. "Rebuild the Whoosh index from SQL datatabase"
  25. from ffdnispdb.models import ISP, ISPWhoosh
  26. from whoosh import writing
  27. import shutil
  28. shutil.rmtree(ISPWhoosh.get_index_dir())
  29. idx=ISPWhoosh.get_index()
  30. with idx.writer() as writer:
  31. for isp in ISP.query.all():
  32. ISPWhoosh.update_document(writer, isp)
  33. writer.mergetype = writing.CLEAR
  34. writer.optimize = True
  35. class MyServer(Server):
  36. def handle(self, app, host, port, use_debugger, use_reloader,
  37. threaded, processes, passthrough_errors):
  38. if use_debugger:
  39. app=DebuggedApplication(app, evalex=True)
  40. ws = gevent.pywsgi.WSGIServer(('', 5000), app)
  41. ws.serve_forever()
  42. def shell_context():
  43. import ffdnispdb
  44. return ffdnispdb.__dict__
  45. class RunTests(Command):
  46. "Run unit-tests"
  47. option_list = (
  48. Option('--verbose', '-v', action='store_true', default=False),
  49. Option('--failfast', '-f', action='store_true', default=False),
  50. )
  51. def run(self, verbose, failfast):
  52. import unittest
  53. import test_ffdnispdb
  54. test=unittest.defaultTestLoader.loadTestsFromModule(test_ffdnispdb)
  55. unittest.TextTestRunner(verbosity=2 if verbose else 1, failfast=bool(failfast)).run(test)
  56. manager = Manager(ffdnispdb.create_app)
  57. manager.add_command("runserver", Server())
  58. manager.add_command("shell", Shell(make_context=shell_context))
  59. manager.add_command("db", database_manager)
  60. manager.add_command("index", index_manager)
  61. manager.add_command("test", RunTests())
  62. if __name__ == "__main__":
  63. manager.run()