waschmarken/main.py
2020-08-13 12:31:25 +02:00

85 lines
2.4 KiB
Python

import aiohttp.web
import traceback
import urllib.parse
import os
import json
import asyncio
from model import Model
routes = aiohttp.web.RouteTableDef()
routes.static('/static', 'static')
@routes.post('/api/token{authtoken}/{method}')
async def handler(request: aiohttp.web.Request):
method = request.match_info.get('method', None)
token = request.match_info.get('authtoken', None)
model = request.app['model']
data = await request.json()
try:
assert method in model.ApiMethod.dict
value = await model.ApiMethod.dict[method](model, token, **data)
if value:
return aiohttp.web.json_response(value)
else:
return aiohttp.web.Response(status=200)
except Exception as e:
traceback.print_exc()
resp = {"error": e.args[0]}
return aiohttp.web.json_response(resp, status=400)
@routes.post('/api/{method}')
async def handler(request: aiohttp.web.Request):
method = request.match_info.get('method', None)
model = request.app['model']
data = await request.json()
try:
assert method in model.ApiMethod.dict
value = await model.ApiMethod.dict[method](model, **data)
if value:
return aiohttp.web.json_response(value)
else:
return aiohttp.web.Response(status=200)
except Exception as e:
traceback.print_exc()
resp = {"error": e.args[0]}
return aiohttp.web.json_response(resp, status=400)
@routes.get('/dealer/{usertoken}')
async def handler(request):
del request # unused
return aiohttp.web.FileResponse('user.html')
@routes.get('/dealerdealer/{usertoken}')
async def handler(request):
del request # unused
return aiohttp.web.FileResponse('admin.html')
@routes.get('/favicon.ico')
async def handler(request):
del request # unused
return aiohttp.web.FileResponse('static/coin.png')
@routes.get('/')
async def handler(request):
del request # unused
return aiohttp.web.FileResponse('index.html')
if __name__ == '__main__':
app = aiohttp.web.Application()
app.add_routes(routes)
data = {}
filename = "scoreboard.json"
if os.path.isfile(filename):
with open(filename) as f:
data = json.load(f)
app['model'] = Model(model = data)
async def on_shutdown(app):
app['model'].save()
app.on_shutdown.append(on_shutdown)
aiohttp.web.run_app(app, port=42042)