manage.py 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  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. @werkzeug.serving.run_with_reloader
  41. def run():
  42. ws = gevent.pywsgi.WSGIServer(('', 5000), app)
  43. ws.serve_forever()
  44. def shell_context():
  45. import ffdnispdb
  46. return ffdnispdb.__dict__
  47. class RunTests(Command):
  48. "Run unit-tests"
  49. option_list = (
  50. Option('--verbose', '-v', action='store_true', default=False),
  51. Option('--failfast', '-f', action='store_true', default=False),
  52. )
  53. def run(self, verbose, failfast):
  54. import unittest
  55. import test_ffdnispdb
  56. test=unittest.defaultTestLoader.loadTestsFromModule(test_ffdnispdb)
  57. unittest.TextTestRunner(verbosity=2 if verbose else 1, failfast=bool(failfast)).run(test)
  58. manager = Manager(ffdnispdb.create_app)
  59. manager.add_command("runserver", MyServer())
  60. manager.add_command("shell", Shell(make_context=shell_context))
  61. manager.add_command("db", database_manager)
  62. manager.add_command("index", index_manager)
  63. manager.add_command("test", RunTests())
  64. if __name__ == "__main__":
  65. manager.run()