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)