Skip to content

Commit

Permalink
Refactor handler invocation into its own file for improved organizati…
Browse files Browse the repository at this point in the history
…on: handler_invoker.py
  • Loading branch information
cicekhayri committed Dec 18, 2023
1 parent 858e6ac commit 77415e6
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 24 deletions.
27 changes: 3 additions & 24 deletions pyblaze/pyblaze.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
from pyblaze.requests import Request, RequestContext
from pyblaze.sessions import encode_session_data, get_or_create_session
from pyblaze.utils.dependency_resolver import resolve_dependencies_automatic
from pyblaze.utils.param_converter import convert_param_type
from pyblaze.utils.handler_invoker import invoke_handler
from pyblaze.websockets import handle_websocket


Expand Down Expand Up @@ -172,7 +172,7 @@ async def handle_dynamic_route(
if match:
try:
params = match.groupdict()
response = await self.invoke_handler(
response = await invoke_handler(
handler, request, scope, params
)
await response(scope, receive, send)
Expand All @@ -194,7 +194,7 @@ async def handle_route(
):
try:
handler = self.routes[method][path]
response = await self.invoke_handler(handler, request, scope)
response = await invoke_handler(handler, request, scope)

if self.session_type:
encoded_and_signed_data = encode_session_data(
Expand All @@ -221,27 +221,6 @@ async def set_request_session(self, request: Request) -> None:
session = get_or_create_session(request, self.secret_key)
request.session = session

async def invoke_handler(
self, handler, request: Request, scope: Dict[str, Any], params=None
):
handler_signature = inspect.signature(handler)
handler_params = {}
for param_name, param in handler_signature.parameters.items():
if param_name == "request":
handler_params["request"] = request
elif param_name == "scope":
handler_params["scope"] = scope
elif param_name in params:
handler_params[param_name] = convert_param_type(
params[param_name], param.annotation
)
elif param.default != inspect.Parameter.empty:
handler_params[param_name] = param.default
else:
handler_params[param_name] = None

return await handler(**handler_params)

async def test_session(self, app, method, path, **kwargs):
async with AsyncClient(app=app, base_url="http://testserver") as client:
return await getattr(client, method.lower())(path, **kwargs)
27 changes: 27 additions & 0 deletions pyblaze/utils/handler_invoker.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import inspect
from typing import Dict, Any

from pyblaze.requests import Request
from pyblaze.utils.param_converter import convert_param_type


async def invoke_handler(
handler, request: Request, scope: Dict[str, Any], params=None
):
handler_signature = inspect.signature(handler)
handler_params = {}
for param_name, param in handler_signature.parameters.items():
if param_name == "request":
handler_params["request"] = request
elif param_name == "scope":
handler_params["scope"] = scope
elif param_name in params:
handler_params[param_name] = convert_param_type(
params[param_name], param.annotation
)
elif param.default != inspect.Parameter.empty:
handler_params[param_name] = param.default
else:
handler_params[param_name] = None

return await handler(**handler_params)

0 comments on commit 77415e6

Please sign in to comment.