From befca7cdf889717de3a269a8816c080cfa8dd796 Mon Sep 17 00:00:00 2001 From: PhilipTrauner Date: Tue, 8 Mar 2016 08:43:52 +0100 Subject: [PATCH] Added REQUIRE capabilities for Routing --- Shared/Routing.py | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/Shared/Routing.py b/Shared/Routing.py index 53cc8b3..d9d9e04 100644 --- a/Shared/Routing.py +++ b/Shared/Routing.py @@ -1,3 +1,11 @@ +BROADCAST = 0 +ROUTE = 1 +LAST_STOP = 2 + +class InvalidRouteSetup(AttributeError): + def __init__(self, msg): + super(AttributeError, self).__init__(msg) + class ServerRoute: def __init__(self, **kwargs): self.setup(**kwargs) @@ -12,9 +20,24 @@ class ClientRoute: def run(self, data, handler): pass -def create_routes(routes): +def create_routes(routes, handler): routes = routes.copy() + reverse_routes = {} for prefix in routes: if type(routes[prefix]) is tuple or type(routes[prefix]) is list: routes[prefix] = routes[prefix][0](**routes[prefix][1]) + reverse_routes[routes[prefix]] = prefix + for prefix in routes: + attrs = dir(routes[prefix]) + if "REQUIRED" in attrs: + if not "start" in attrs: + raise InvalidRouteSetup("method named 'start' required if 'REQUIRE' is defined") + for required in type(routes[prefix]).REQUIRED: + if required == BROADCAST: + routes[prefix].broadcast = handler.broadcast + elif required == ROUTE: + routes[prefix].route = reverse_routes[routes[prefix]] + elif required == LAST_STOP: + routes[prefix].last_stop = handler.last_stop + routes[prefix].start() return routes \ No newline at end of file