import eventlet
eventlet.monkey_patch()  # noqa
from app import create_app, db, socketio
from app.models import (Corpus, CorpusFile, Job, JobInput, JobResult,
                        NotificationData, NotificationEmailData, QueryResult,
                        Role, User)
from flask_migrate import Migrate, upgrade

app = create_app()
migrate = Migrate(app, db, compare_type=True)


@app.shell_context_processor
def make_shell_context():
    return {'Corpus': Corpus,
            'CorpusFile': CorpusFile,
            'db': db,
            'Job': Job,
            'JobInput': JobInput,
            'JobResult': JobResult,
            'NotificationData': NotificationData,
            'NotificationEmailData': NotificationEmailData,
            'QueryResult': QueryResult,
            'Role': Role,
            'User': User}


@app.cli.command()
def deploy():
    """Run deployment tasks."""
    # migrate database to latest revision
    upgrade()

    # create or update user roles
    Role.insert_roles()


@app.cli.command()
def test():
    """Run the unit tests."""
    import unittest
    tests = unittest.TestLoader().discover('tests')
    unittest.TextTestRunner(verbosity=2).run(tests)


if __name__ == '__main__':
    socketio.run(app, host='0.0.0.0')