From ac17c3e0edb1366526498e1067e3c624e2a41ae8 Mon Sep 17 00:00:00 2001 From: Vishnu Sanal T Date: Fri, 18 Oct 2024 14:56:32 +0530 Subject: [PATCH 01/11] add route_type to add_auth_middleware functions --- robyn/__init__.py | 2 +- robyn/processpool.py | 8 ++++---- robyn/robyn.pyi | 1 + robyn/router.py | 7 +++++-- 4 files changed, 11 insertions(+), 7 deletions(-) diff --git a/robyn/__init__.py b/robyn/__init__.py index 268be447d..08c085991 100644 --- a/robyn/__init__.py +++ b/robyn/__init__.py @@ -110,7 +110,7 @@ def add_route( injected_dependencies = self.dependencies.get_dependency_map(self) if auth_required: - self.middleware_router.add_auth_middleware(endpoint)(handler) + self.middleware_router.add_auth_middleware(endpoint, route_type)(handler) if isinstance(route_type, str): http_methods = { diff --git a/robyn/processpool.py b/robyn/processpool.py index 85de6683e..619a91aae 100644 --- a/robyn/processpool.py +++ b/robyn/processpool.py @@ -174,14 +174,14 @@ def spawn_process( server.apply_response_headers(response_headers) for route in routes: - route_type, endpoint, function, is_const = route - server.add_route(route_type, endpoint, function, is_const) + middleware_type, endpoint, function, is_const = route + server.add_route(middleware_type, endpoint, function, is_const) for middleware_type, middleware_function in global_middlewares: server.add_global_middleware(middleware_type, middleware_function) - for route_type, endpoint, function in route_middlewares: - server.add_middleware_route(route_type, endpoint, function) + for middleware_type, endpoint, route_type, function in route_middlewares: + server.add_middleware_route(middleware_type, endpoint, route_type, function) if Events.STARTUP in event_handlers: server.add_startup_handler(event_handlers[Events.STARTUP]) diff --git a/robyn/robyn.pyi b/robyn/robyn.pyi index f354f99bd..dd0e992c3 100644 --- a/robyn/robyn.pyi +++ b/robyn/robyn.pyi @@ -342,6 +342,7 @@ class Server: self, middleware_type: MiddlewareType, route: str, + route_type: HttpMethod, function: FunctionInfo, ) -> None: pass diff --git a/robyn/router.py b/robyn/router.py index d63017768..41962525e 100644 --- a/robyn/router.py +++ b/robyn/router.py @@ -29,6 +29,7 @@ class Route(NamedTuple): class RouteMiddleware(NamedTuple): middleware_type: MiddlewareType route: str + route_type: HttpMethod function: FunctionInfo @@ -263,6 +264,7 @@ def add_route( self, middleware_type: MiddlewareType, endpoint: str, + route_type: HttpMethod, handler: Callable, injected_dependencies: dict, ) -> Callable: @@ -283,10 +285,10 @@ def add_route( params, new_injected_dependencies, ) - self.route_middlewares.append(RouteMiddleware(middleware_type, endpoint, function)) + self.route_middlewares.append(RouteMiddleware(middleware_type, endpoint, route_type, function)) return handler - def add_auth_middleware(self, endpoint: str): + def add_auth_middleware(self, endpoint: str, route_type: HttpMethod): """ This method adds an authentication middleware to the specified endpoint. """ @@ -308,6 +310,7 @@ def inner_handler(request: Request, *args): self.add_route( MiddlewareType.BEFORE_REQUEST, endpoint, + route_type, inner_handler, injected_dependencies, ) From bacc27d22f58464afe8495b93c9025d7f35b119f Mon Sep 17 00:00:00 2001 From: Vishnu Sanal T Date: Fri, 18 Oct 2024 14:56:42 +0530 Subject: [PATCH 02/11] fix #982 --- src/server.rs | 19 ++++++++++++++++--- src/types/mod.rs | 7 +++++++ 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/src/server.rs b/src/server.rs index 7d7771986..285ed9faf 100644 --- a/src/server.rs +++ b/src/server.rs @@ -364,14 +364,24 @@ impl Server { &self, middleware_type: &MiddlewareType, route: &str, + http_method: HttpMethod, function: FunctionInfo, ) { + let mut endpoint = http_method.to_string().to_owned(); + + if !route.starts_with('/') { + endpoint.push('/'); + } + + endpoint.push_str(route); + debug!( "MiddleWare Route added for {:?} {} ", - middleware_type, route + middleware_type, &endpoint ); + self.middleware_router - .add_route(middleware_type, route, function, None) + .add_route(middleware_type, &endpoint, function, None) .unwrap(); } @@ -420,13 +430,16 @@ async fn index( ) -> impl Responder { let mut request = Request::from_actix_request(&req, payload, &global_request_headers).await; + let mut route = req.method().as_str().to_owned(); + route.push_str(req.uri().path()); + // Before middleware // Global let mut before_middlewares = middleware_router.get_global_middlewares(&MiddlewareType::BeforeRequest); // Route specific if let Some((function, route_params)) = - middleware_router.get_route(&MiddlewareType::BeforeRequest, req.uri().path()) + middleware_router.get_route(&MiddlewareType::BeforeRequest, &route) { before_middlewares.push(function); request.path_params = route_params; diff --git a/src/types/mod.rs b/src/types/mod.rs index a272ee682..60932c537 100644 --- a/src/types/mod.rs +++ b/src/types/mod.rs @@ -50,6 +50,13 @@ impl HttpMethod { } } +// for: https://stackoverflow.com/a/32712140/9652621 +impl std::fmt::Display for HttpMethod { + fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + write!(f, "{:?}", self) + } +} + #[pyclass] #[derive(Default, Debug, Clone)] pub struct Url { From 2b1b5b2bde898e33504faa34326fe51dfc5e3e84 Mon Sep 17 00:00:00 2001 From: Vishnu Sanal T Date: Fri, 18 Oct 2024 19:00:41 +0530 Subject: [PATCH 03/11] fix(ci) --- robyn/processpool.py | 2 +- robyn/robyn.pyi | 2 +- robyn/router.py | 5 +++-- src/server.rs | 18 ++++++++++++------ 4 files changed, 17 insertions(+), 10 deletions(-) diff --git a/robyn/processpool.py b/robyn/processpool.py index 619a91aae..6af6cbe92 100644 --- a/robyn/processpool.py +++ b/robyn/processpool.py @@ -181,7 +181,7 @@ def spawn_process( server.add_global_middleware(middleware_type, middleware_function) for middleware_type, endpoint, route_type, function in route_middlewares: - server.add_middleware_route(middleware_type, endpoint, route_type, function) + server.add_middleware_route(middleware_type, endpoint, function, route_type) if Events.STARTUP in event_handlers: server.add_startup_handler(event_handlers[Events.STARTUP]) diff --git a/robyn/robyn.pyi b/robyn/robyn.pyi index dd0e992c3..9402be920 100644 --- a/robyn/robyn.pyi +++ b/robyn/robyn.pyi @@ -342,8 +342,8 @@ class Server: self, middleware_type: MiddlewareType, route: str, - route_type: HttpMethod, function: FunctionInfo, + route_type: HttpMethod, ) -> None: pass def add_startup_handler(self, function: FunctionInfo) -> None: diff --git a/robyn/router.py b/robyn/router.py index 41962525e..c761ad391 100644 --- a/robyn/router.py +++ b/robyn/router.py @@ -264,7 +264,7 @@ def add_route( self, middleware_type: MiddlewareType, endpoint: str, - route_type: HttpMethod, + route_type: Optional[HttpMethod], handler: Callable, injected_dependencies: dict, ) -> Callable: @@ -339,11 +339,12 @@ def inner_handler(*args, **kwargs): self.add_route( middleware_type, endpoint, + None, async_inner_handler, injected_dependencies, ) else: - self.add_route(middleware_type, endpoint, inner_handler, injected_dependencies) + self.add_route(middleware_type, endpoint, None, inner_handler, injected_dependencies) else: params = dict(inspect.signature(handler).parameters) diff --git a/src/server.rs b/src/server.rs index 285ed9faf..2dbf51045 100644 --- a/src/server.rs +++ b/src/server.rs @@ -364,16 +364,22 @@ impl Server { &self, middleware_type: &MiddlewareType, route: &str, - http_method: HttpMethod, function: FunctionInfo, + http_method: Option, ) { - let mut endpoint = http_method.to_string().to_owned(); - if !route.starts_with('/') { - endpoint.push('/'); - } + let mut endpoint = route.to_string(); + + if let Some(method) = http_method { + + endpoint = method.to_string().to_owned(); - endpoint.push_str(route); + if !route.starts_with('/') { + endpoint.push('/'); + } + + endpoint.push_str(route); + } debug!( "MiddleWare Route added for {:?} {} ", From f82baff7e3d8615b2863776dd74f635620621685 Mon Sep 17 00:00:00 2001 From: Vishnu Sanal T Date: Tue, 22 Oct 2024 10:54:14 +0530 Subject: [PATCH 04/11] rename --- robyn/processpool.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/robyn/processpool.py b/robyn/processpool.py index 6af6cbe92..f4c5491ad 100644 --- a/robyn/processpool.py +++ b/robyn/processpool.py @@ -174,8 +174,8 @@ def spawn_process( server.apply_response_headers(response_headers) for route in routes: - middleware_type, endpoint, function, is_const = route - server.add_route(middleware_type, endpoint, function, is_const) + route_type, endpoint, function, is_const = route + server.add_route(route_type, endpoint, function, is_const) for middleware_type, middleware_function in global_middlewares: server.add_global_middleware(middleware_type, middleware_function) From b75e145f90e5d1e409b1d94b6e5cf601a4392d1f Mon Sep 17 00:00:00 2001 From: Vishnu Sanal T Date: Thu, 24 Oct 2024 19:24:36 +0530 Subject: [PATCH 05/11] fix tests wip --- src/server.rs | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/server.rs b/src/server.rs index 2dbf51045..3f8d48e01 100644 --- a/src/server.rs +++ b/src/server.rs @@ -368,26 +368,26 @@ impl Server { http_method: Option, ) { - let mut endpoint = route.to_string(); - - if let Some(method) = http_method { - - endpoint = method.to_string().to_owned(); - - if !route.starts_with('/') { - endpoint.push('/'); - } + let mut method_endpoint = + if let Some(method) = http_method { + method.to_string().to_owned() + } else { + "GET".to_string() + }; - endpoint.push_str(route); + if !route.starts_with('/') { + method_endpoint.push('/'); } + method_endpoint.push_str(route); + debug!( "MiddleWare Route added for {:?} {} ", - middleware_type, &endpoint + middleware_type, &method_endpoint ); self.middleware_router - .add_route(middleware_type, &endpoint, function, None) + .add_route(middleware_type, &method_endpoint, function, None) .unwrap(); } From 995ca3dddaaf4b6d2c0040026fd3296fe1cad75f Mon Sep 17 00:00:00 2001 From: Vishnu Sanal T Date: Thu, 24 Oct 2024 19:31:47 +0530 Subject: [PATCH 06/11] fix tests --- src/server.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/server.rs b/src/server.rs index 3f8d48e01..e886d570b 100644 --- a/src/server.rs +++ b/src/server.rs @@ -368,7 +368,7 @@ impl Server { http_method: Option, ) { - let mut method_endpoint = + let mut method_endpoint = if let Some(method) = http_method { method.to_string().to_owned() } else { @@ -507,7 +507,7 @@ async fn index( middleware_router.get_global_middlewares(&MiddlewareType::AfterRequest); // Route specific if let Some((function, _)) = - middleware_router.get_route(&MiddlewareType::AfterRequest, req.uri().path()) + middleware_router.get_route(&MiddlewareType::AfterRequest, &route) { after_middlewares.push(function); } From 40b6ff8d3d0e12e931d266d0506b850f94e08cf1 Mon Sep 17 00:00:00 2001 From: Vishnu Sanal T Date: Thu, 24 Oct 2024 19:32:57 +0530 Subject: [PATCH 07/11] chore: rustfmt --- src/server.rs | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/src/server.rs b/src/server.rs index e886d570b..65fbf4ad3 100644 --- a/src/server.rs +++ b/src/server.rs @@ -367,13 +367,11 @@ impl Server { function: FunctionInfo, http_method: Option, ) { - - let mut method_endpoint = - if let Some(method) = http_method { - method.to_string().to_owned() - } else { - "GET".to_string() - }; + let mut method_endpoint = if let Some(method) = http_method { + method.to_string().to_owned() + } else { + "GET".to_string() + }; if !route.starts_with('/') { method_endpoint.push('/'); @@ -506,8 +504,7 @@ async fn index( let mut after_middlewares = middleware_router.get_global_middlewares(&MiddlewareType::AfterRequest); // Route specific - if let Some((function, _)) = - middleware_router.get_route(&MiddlewareType::AfterRequest, &route) + if let Some((function, _)) = middleware_router.get_route(&MiddlewareType::AfterRequest, &route) { after_middlewares.push(function); } From 36c409dd800ad860cf6c3f80f8ef81766b96be24 Mon Sep 17 00:00:00 2001 From: Vishnu Sanal T <50027064+VishnuSanal@users.noreply.github.com> Date: Thu, 31 Oct 2024 10:22:19 +0530 Subject: [PATCH 08/11] Apply suggestions from code review Co-authored-by: Sanskar Jethi <29942790+sansyrox@users.noreply.github.com> --- src/server.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/server.rs b/src/server.rs index 65fbf4ad3..2356941f4 100644 --- a/src/server.rs +++ b/src/server.rs @@ -434,8 +434,7 @@ async fn index( ) -> impl Responder { let mut request = Request::from_actix_request(&req, payload, &global_request_headers).await; - let mut route = req.method().as_str().to_owned(); - route.push_str(req.uri().path()); + let route = format!("{}{}", req.method(), req.uri().path()); // Before middleware // Global From 77231d002ba94bc7bcf56acf8433bfd614fb4980 Mon Sep 17 00:00:00 2001 From: Vishnu Sanal T Date: Thu, 31 Oct 2024 10:35:26 +0530 Subject: [PATCH 09/11] remove optional type --- robyn/router.py | 6 +++--- src/server.rs | 16 ++++++---------- 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/robyn/router.py b/robyn/router.py index c761ad391..4588d7e28 100644 --- a/robyn/router.py +++ b/robyn/router.py @@ -264,7 +264,7 @@ def add_route( self, middleware_type: MiddlewareType, endpoint: str, - route_type: Optional[HttpMethod], + route_type: HttpMethod, handler: Callable, injected_dependencies: dict, ) -> Callable: @@ -339,12 +339,12 @@ def inner_handler(*args, **kwargs): self.add_route( middleware_type, endpoint, - None, + HttpMethod.GET, async_inner_handler, injected_dependencies, ) else: - self.add_route(middleware_type, endpoint, None, inner_handler, injected_dependencies) + self.add_route(middleware_type, endpoint, HttpMethod.GET, inner_handler, injected_dependencies) else: params = dict(inspect.signature(handler).parameters) diff --git a/src/server.rs b/src/server.rs index 2356941f4..1ca5a117e 100644 --- a/src/server.rs +++ b/src/server.rs @@ -365,27 +365,23 @@ impl Server { middleware_type: &MiddlewareType, route: &str, function: FunctionInfo, - http_method: Option, + http_method: HttpMethod, ) { - let mut method_endpoint = if let Some(method) = http_method { - method.to_string().to_owned() - } else { - "GET".to_string() - }; + let mut endpoint_prefixed_with_method = http_method.to_string(); if !route.starts_with('/') { - method_endpoint.push('/'); + endpoint_prefixed_with_method.push('/'); } - method_endpoint.push_str(route); + endpoint_prefixed_with_method.push_str(route); debug!( "MiddleWare Route added for {:?} {} ", - middleware_type, &method_endpoint + middleware_type, &endpoint_prefixed_with_method ); self.middleware_router - .add_route(middleware_type, &method_endpoint, function, None) + .add_route(middleware_type, &endpoint_prefixed_with_method, function, None) .unwrap(); } From 42c1540c680cfb79ae8b576a5167fdd8e1f1b161 Mon Sep 17 00:00:00 2001 From: Vishnu Sanal T Date: Thu, 31 Oct 2024 10:42:28 +0530 Subject: [PATCH 10/11] chore: reorder --- robyn/processpool.py | 2 +- robyn/router.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/robyn/processpool.py b/robyn/processpool.py index f4c5491ad..2878387c0 100644 --- a/robyn/processpool.py +++ b/robyn/processpool.py @@ -180,7 +180,7 @@ def spawn_process( for middleware_type, middleware_function in global_middlewares: server.add_global_middleware(middleware_type, middleware_function) - for middleware_type, endpoint, route_type, function in route_middlewares: + for middleware_type, endpoint, function, route_type in route_middlewares: server.add_middleware_route(middleware_type, endpoint, function, route_type) if Events.STARTUP in event_handlers: diff --git a/robyn/router.py b/robyn/router.py index 4588d7e28..c777214cc 100644 --- a/robyn/router.py +++ b/robyn/router.py @@ -29,8 +29,8 @@ class Route(NamedTuple): class RouteMiddleware(NamedTuple): middleware_type: MiddlewareType route: str - route_type: HttpMethod function: FunctionInfo + route_type: HttpMethod class GlobalMiddleware(NamedTuple): @@ -285,7 +285,7 @@ def add_route( params, new_injected_dependencies, ) - self.route_middlewares.append(RouteMiddleware(middleware_type, endpoint, route_type, function)) + self.route_middlewares.append(RouteMiddleware(middleware_type, endpoint, function, route_type)) return handler def add_auth_middleware(self, endpoint: str, route_type: HttpMethod): From 691528d42e19995792a8a60766521bb9d93f465a Mon Sep 17 00:00:00 2001 From: Vishnu Sanal T Date: Sun, 3 Nov 2024 00:01:42 +0530 Subject: [PATCH 11/11] chore: cargo fmt --- src/server.rs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/server.rs b/src/server.rs index 1ca5a117e..09fd9e430 100644 --- a/src/server.rs +++ b/src/server.rs @@ -381,7 +381,12 @@ impl Server { ); self.middleware_router - .add_route(middleware_type, &endpoint_prefixed_with_method, function, None) + .add_route( + middleware_type, + &endpoint_prefixed_with_method, + function, + None, + ) .unwrap(); } @@ -430,7 +435,7 @@ async fn index( ) -> impl Responder { let mut request = Request::from_actix_request(&req, payload, &global_request_headers).await; - let route = format!("{}{}", req.method(), req.uri().path()); + let route = format!("{}{}", req.method(), req.uri().path()); // Before middleware // Global