Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import dataclasses
import typing

from faststream import StreamMessage
from modern_di import Group, Scope, providers
Expand All @@ -14,7 +15,7 @@ class DependentCreator:
dep1: SimpleCreator


def fetch_message_is_processed_from_request(message: StreamMessage) -> bool: # type:ignore[type-arg]
def fetch_message_is_processed_from_request(message: StreamMessage[typing.Any]) -> bool:
return message.processed


Expand Down
5 changes: 3 additions & 2 deletions packages/modern-di-litestar/tests_litestar/dependencies.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import dataclasses
import typing

import litestar
from modern_di import Group, Scope, providers
Expand All @@ -14,12 +15,12 @@ class DependentCreator:
dep1: SimpleCreator


def fetch_method_from_request(request: litestar.Request) -> str: # type: ignore[type-arg]
def fetch_method_from_request(request: litestar.Request[typing.Any, typing.Any, typing.Any]) -> str:
assert isinstance(request, litestar.Request)
return request.method


def fetch_url_from_websocket(websocket: litestar.WebSocket) -> str: # type: ignore[type-arg]
def fetch_url_from_websocket(websocket: litestar.WebSocket[typing.Any, typing.Any, typing.Any]) -> str:
assert isinstance(websocket, litestar.WebSocket)
return websocket.url.path

Expand Down
9 changes: 5 additions & 4 deletions packages/modern-di/modern_di/types_parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,7 @@ def from_type(cls, type_: type, default: object = UNSET) -> "SignatureItem":
type_ = type_.__args__[0]

result: dict[str, typing.Any] = {"default": default}
if isinstance(type_, types.GenericAlias):
result["arg_type"] = type_.__origin__
result["args"] = list(type_.__args__)
elif isinstance(type_, (types.UnionType, typing._UnionGenericAlias)): # type: ignore[attr-defined] # noqa: SLF001
if isinstance(type_, (types.UnionType, typing._UnionGenericAlias)): # type: ignore[attr-defined] # noqa: SLF001
args = [x.__origin__ if isinstance(x, types.GenericAlias) else x for x in type_.__args__]
if types.NoneType in args:
result["is_nullable"] = True
Expand All @@ -34,6 +31,10 @@ def from_type(cls, type_: type, default: object = UNSET) -> "SignatureItem":
result["args"] = args
elif args:
result["arg_type"] = args[0]
elif isinstance(type_, (types.GenericAlias, typing._GenericAlias)): # type: ignore[attr-defined] # noqa: SLF001
result["arg_type"] = type_.__origin__
result["args"] = list(type_.__args__)

elif isinstance(type_, type):
result["arg_type"] = type_
return cls(**result)
Expand Down
5 changes: 5 additions & 0 deletions packages/modern-di/tests_core/test_types_parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,13 @@
import typing

import pytest
from modern_di import types
from modern_di.types_parser import SignatureItem, parse_creator


class GenericClass(typing.Generic[types.T]): ...


@pytest.mark.parametrize(
("type_", "result"),
[
Expand All @@ -17,6 +21,7 @@
(str | int, SignatureItem(args=[str, int])),
(typing.Union[str | int], SignatureItem(args=[str, int])), # noqa: UP007
(list[str] | None, SignatureItem(arg_type=list, is_nullable=True)),
(GenericClass[str], SignatureItem(arg_type=GenericClass, args=[str])),
],
)
def test_signature_item_parser(type_: type, result: SignatureItem) -> None:
Expand Down