elstat/run.py

67 lines
1.6 KiB
Python
Raw Normal View History

2018-07-07 22:46:28 +00:00
import logging
import sqlite3
import aiohttp
from sanic import Sanic, response
from sanic_cors import CORS
from sanic.exceptions import NotFound, FileNotFound
import config
from elstat.manager import ServiceManager
from elstat.blueprints import api, streaming, incidents
from elstat.blueprints.errors import ApiError
2018-07-07 22:46:28 +00:00
logging.basicConfig(level=logging.INFO)
log = logging.getLogger(__name__)
2018-07-07 22:46:28 +00:00
app = Sanic()
app.cfg = config
CORS(app, automatic_options=True)
app.blueprint(api)
app.blueprint(incidents)
app.blueprint(streaming)
2018-07-07 22:46:28 +00:00
@app.listener('before_server_start')
async def _app_start(refapp, loop):
refapp.session = aiohttp.ClientSession(loop=loop)
refapp.conn = sqlite3.connect('elstat.db')
refapp.manager = ServiceManager(app)
2018-07-07 22:46:28 +00:00
@app.listener('after_server_stop')
async def _app_stop(refapp, _loop):
refapp.manager.close()
2018-07-07 22:46:28 +00:00
refapp.conn.close()
@app.exception(ApiError)
async def _handle_api_err(request, exception):
return response.json({
'error': True,
'code': exception.status_code,
'message': exception.message
}, status=exception.status_code)
2018-07-07 22:46:28 +00:00
@app.exception(Exception)
async def _handle_exc(request, exception):
log.exception('oopsie woopsie')
2018-07-07 22:46:28 +00:00
status_code = 404 if isinstance(exception, (NotFound, FileNotFound)) \
else 500
2018-07-07 22:46:28 +00:00
return response.json({
'error': True,
'message': repr(exception)
}, status=status_code)
if __name__ == '__main__':
app.static('/', './priv/frontend/build')
app.static('/', './priv/frontend/build/index.html')
2018-07-09 20:24:11 +00:00
app.run(port=config.PORT, host='0.0.0.0')