44from typing import Any , Callable , Iterable , List , Optional , Tuple , Type
55
66from loguru import logger
7+ from requests import Session as RequestsSession
78from socks import method
9+ from wsgiadapter import WSGIAdapter as RequestsWSGIAdapter
810
911from pyechonext .cache import InMemoryCache
1012from pyechonext .config import Settings
@@ -115,6 +117,11 @@ def __init__(
115117
116118 logger .debug (f"Application { self .application_type .value } : { self .app_name } " )
117119
120+ def test_session (self , host : str = "echonext" ):
121+ session = RequestsSession ()
122+ session .mount (prefix = f"http://{ host } " , adapter = RequestsWSGIAdapter (self ))
123+ return session
124+
118125 def _get_request (self , environ : dict ) -> Request :
119126 """
120127 Gets the request.
@@ -136,6 +143,20 @@ def _get_response(self, request: Request) -> Response:
136143 """
137144 return Response (request , content_type = self .application_type .value )
138145
146+ def add_route (self , page_path : str , handler : Callable ):
147+ """
148+ Adds a route.
149+
150+ :param page_path: The page path
151+ :type page_path: str
152+ :param handler: The handler
153+ :type handler: Callable
154+ """
155+ if inspect .isclass (handler ):
156+ self .router .add_url (URL (path = page_path , controller = handler ))
157+ else :
158+ self .router .add_page_route (page_path , handler )
159+
139160 def route_page (self , page_path : str ) -> Callable :
140161 """
141162 Creating a New Page Route
@@ -314,6 +335,8 @@ def _handle_request(self, request: Request) -> Response:
314335
315336 if isinstance (result , Response ):
316337 result = result .body
338+ elif result is None :
339+ return response
317340
318341 if route .route_type == RoutesTypes .URL_BASED :
319342 view = route .handler .get_rendered_view (request , result , self )
0 commit comments