Skip to content

Commit 8181574

Browse files
authored
Merge pull request #18 from taskiq-python/feature/ordinary-handlers
2 parents d1c5c23 + 234f68c commit 8181574

3 files changed

Lines changed: 26 additions & 3 deletions

File tree

aiohttp_deps/initializer.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,15 @@ def __init__(
3030
) -> None:
3131
self.original_handler = copy.copy(original_route)
3232
self.graph = DependencyGraph(self.original_handler)
33+
signature = inspect.signature(self.original_handler)
34+
# This flag means that the function requires one argument and
35+
# doesn't depend on any other dependencies.
36+
# We assume that such functions should be treated as ordinary
37+
# aiohttp handlers and therefore we don't inject any dependencies
38+
# and pass request object directly to the handler.
39+
self.is_ordinary = False
40+
if self.graph.is_empty() and len(signature.parameters) == 1:
41+
self.is_ordinary = True
3342

3443
async def __call__(self, request: web.Request) -> web.StreamResponse:
3544
"""
@@ -41,6 +50,8 @@ async def __call__(self, request: web.Request) -> web.StreamResponse:
4150
:param request: current request.
4251
:return: response.
4352
"""
53+
if self.is_ordinary:
54+
return await self.original_handler(request)
4455
# Hack for mypy to work
4556
values_overrides = request.app.get(VALUES_OVERRIDES_KEY)
4657
if values_overrides is None:

pyproject.toml

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,12 +47,9 @@ ruff = "^0.1.7"
4747
[tool.mypy]
4848
strict = true
4949
ignore_missing_imports = true
50-
allow_subclassing_any = true
51-
allow_untyped_calls = true
5250
pretty = true
5351
show_error_codes = true
5452
implicit_reexport = true
55-
allow_untyped_decorators = true
5653
warn_return_any = false
5754
warn_unused_ignores = false
5855

tests/test_func_dependencies.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,3 +79,18 @@ async def handler(num: int = Depends(original_dep)) -> web.Response:
7979
resp = await client.get("/")
8080
assert resp.status == 200
8181
assert (await resp.json())["request"] == 2
82+
83+
84+
@pytest.mark.anyio
85+
async def test_ordinary_functions_support(
86+
my_app: web.Application,
87+
aiohttp_client: ClientGenerator,
88+
) -> None:
89+
async def handler(request: web.Request) -> web.Response:
90+
return web.json_response({"request": "ordinary"})
91+
92+
my_app.router.add_get("/", handler)
93+
client = await aiohttp_client(my_app)
94+
resp = await client.get("/")
95+
assert resp.status == 200
96+
assert await resp.json() == {"request": "ordinary"}

0 commit comments

Comments
 (0)