12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- #!/usr/bin/env python2
- # MyServer
- import gevent.pywsgi
- from gevent import monkey; monkey.patch_all()
- import werkzeug.serving
- from werkzeug.debug import DebuggedApplication
- import os; os.environ.setdefault('FFDNISPDB_SETTINGS', '../settings_dev.py')
- import sys
- from flask.ext.script import (Shell, Server, Manager, Command, Option,
- prompt, prompt_bool, prompt_pass)
- import ffdnispdb
- class CreateDB(Command):
- "Initialize database, create tables"
- def handle(self, app, *args, **kwargs):
- with app.app_context():
- return self.run(*args, **kwargs)
- def run(self):
- ffdnispdb.db.create_all()
- database_manager = Manager(usage=u'Perform database operations')
- database_manager.add_command("create", CreateDB)
- @database_manager.command
- def drop():
- "Drop existing tables"
- if prompt_bool("Are you sure you wish to destroy existing database"):
- ffdnispdb.db.drop_all()
- index_manager = Manager(usage=u'Manage the Whoosh index')
- @index_manager.command
- def rebuild():
- "Rebuild the Whoosh index from SQL datatabase"
- from ffdnispdb.models import ISP, ISPWhoosh
- from whoosh import writing
- import shutil
- shutil.rmtree(ISPWhoosh.get_index_dir())
- idx=ISPWhoosh.get_index()
- with idx.writer() as writer:
- for isp in ISP.query.all():
- ISPWhoosh.update_document(writer, isp)
- writer.mergetype = writing.CLEAR
- writer.optimize = True
- class MyServer(Server):
- def handle(self, app, host, port, use_debugger, use_reloader,
- threaded, processes, passthrough_errors):
- if os.environ.get('WERKZEUG_RUN_MAIN') != 'true':
- print >>sys.stderr, ' * Running on http://%s:%d/'%(host, port)
- if use_debugger:
- app=DebuggedApplication(app, evalex=True)
- @werkzeug.serving.run_with_reloader
- def run():
- ws = gevent.pywsgi.WSGIServer((host, port), app)
- ws.serve_forever()
- def shell_context():
- import ffdnispdb
- return ffdnispdb.__dict__
- class RunTests(Command):
- "Run unit-tests"
- option_list = (
- Option('--verbose', '-v', action='store_true', default=False),
- Option('--failfast', '-f', action='store_true', default=False),
- )
- def run(self, verbose, failfast):
- import unittest
- import test_ffdnispdb
- test=unittest.defaultTestLoader.loadTestsFromModule(test_ffdnispdb)
- unittest.TextTestRunner(verbosity=2 if verbose else 1, failfast=bool(failfast)).run(test)
- manager = Manager(ffdnispdb.create_app)
- manager.add_command("runserver", MyServer())
- manager.add_command("shell", Shell(make_context=shell_context))
- manager.add_command("db", database_manager)
- manager.add_command("index", index_manager)
- manager.add_command("test", RunTests())
- if __name__ == "__main__":
- manager.run()
|