-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathrouter.py
52 lines (46 loc) · 1.77 KB
/
router.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import aiohttp
import importlib
from traceback import print_exc
@aiohttp.web.middleware
async def error_middleware(r, handler):
import utils
message = ""
try:
response = await handler(r)
if response.status in (200, 302):
return response
code = response.status
message = response.reason
except aiohttp.web.HTTPException as e:
code = e.status
message = e.reason
except Exception as e:
print_exc()
code = 500
message = "Internal Server Error"
return await utils.render_template(r, f"error.html", code=code, message=message)
routes = {"/": "index",
"/users/{id}": "user",
"/rankings": "rankings",
"/level/{levelname}": "level",
"/search": "search",
"_/login": "login",
"/login": "login_post",
"_/register": "register",
"/register": "register_post",
"/admin": "admin/index",
"/admin/users": "admin/users",
"/admin/user/{id}": "admin/user",
"_/admin/user": "admin/user_post",
"/admin/badges": "admin/badges",
"/admin/badges/create": "admin/create_badge",
"/admin/edit_user": "admin/edit_user"}
def add_all_routes(app: aiohttp.web.Application):
for route, modulename in routes.items():
if route.startswith("_"): route = route.lstrip("_")
modulepath = modulename.replace("/", ".")
routesplit = modulename.split("/")
if "_post" in routesplit[-1]:
app.router.add_post(route, getattr(importlib.import_module("handlers." + modulepath.rstrip("_post")), routesplit[-1]))
else:
app.router.add_get(route, getattr(importlib.import_module("handlers." + modulepath), routesplit[-1]))