aboutsummaryrefslogtreecommitdiffstats
path: root/backend/route_manager.py
diff options
context:
space:
mode:
authorGravatar decorator-factory <[email protected]>2020-12-15 08:28:22 +0300
committerGravatar decorator-factory <[email protected]>2020-12-15 08:28:22 +0300
commit7e98943c9d15b2f81f83fc6bfc75e9b3a57eb31c (patch)
treec7d7f209dd28abe1c2182e3fb55ea275fc628cb9 /backend/route_manager.py
parentfix various type annotation issues (diff)
minor refactorings
Diffstat (limited to 'backend/route_manager.py')
-rw-r--r--backend/route_manager.py35
1 files changed, 19 insertions, 16 deletions
diff --git a/backend/route_manager.py b/backend/route_manager.py
index 7427298..437cbf6 100644
--- a/backend/route_manager.py
+++ b/backend/route_manager.py
@@ -4,6 +4,8 @@ Module to dynamically generate a Starlette routing map based on a directory tree
import importlib
import inspect
+import typing as t
+
from pathlib import Path
from starlette.routing import Route as StarletteRoute, BaseRoute, Mount
@@ -26,6 +28,10 @@ def construct_route_map_from_dict(route_dict: dict) -> list[BaseRoute]:
return route_map
+def is_route_class(member: t.Any) -> bool:
+ return inspect.isclass(member) and issubclass(member, Route) and member != Route
+
+
def create_route_map() -> list[BaseRoute]:
routes_directory = Path("backend") / "routes"
@@ -37,24 +43,21 @@ def create_route_map() -> list[BaseRoute]:
route = importlib.import_module(import_name)
for _member_name, member in inspect.getmembers(route):
- if inspect.isclass(member):
- if issubclass(member, Route) and member != Route:
- member.check_parameters()
+ if is_route_class(member):
+ member.check_parameters()
- levels = str(file.parent).split("/")[2:]
+ levels = str(file.parent).split("/")[2:]
- current_level = None
- for level in levels:
- if current_level is None:
- current_level = route_dict[f"/{level}"]
- else:
- current_level = current_level[f"/{level}"]
-
- if current_level is not None:
- current_level[member.path] = member
+ current_level = None
+ for level in levels:
+ if current_level is None:
+ current_level = route_dict[f"/{level}"]
else:
- route_dict[member.path] = member
+ current_level = current_level[f"/{level}"]
- route_map = construct_route_map_from_dict(route_dict.to_dict())
+ if current_level is not None:
+ current_level[member.path] = member
+ else:
+ route_dict[member.path] = member
- return route_map
+ return construct_route_map_from_dict(route_dict.to_dict())