Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from typing import TypeVar, Type, Iterable, Tuple, overload
- T_DBModel = TypeVar('TDBModel', bound='Base')
- M1 = TypeVar('M1')
- M2 = TypeVar('M2')
- M3 = TypeVar('M3')
- M4 = TypeVar('M4')
- class Base:
- @classmethod
- def qwith_entities2(cls: Type[T_DBModel], retval: Type[M1]) -> \
- Iterable[Tuple[T_DBModel, M1]]:
- return []
- @classmethod
- @overload
- def qwith_entities(cls: Type[T_DBModel], retval: Type[M1],
- *filters) -> Iterable[Tuple[T_DBModel, M1]]: ...
- @classmethod
- @overload
- def qwith_entities(
- cls: Type[T_DBModel], retvals: Tuple[Type[M1], Type[M2]],
- *filters) -> Iterable[Tuple[M1, M2]]: ...
- @classmethod
- @overload
- def qwith_entities(
- cls: Type[T_DBModel], retvals: Tuple[Type[M1], Type[M2], Type[M3]],
- *filters) -> Iterable[Tuple[M1, M2, M3]]: ...
- @classmethod
- @overload
- def qwith_entities(
- cls: Type[T_DBModel],
- retvals: Tuple[Type[M1], Type[M2], Type[M3], Type[M4]],
- *filters) -> Iterable[Tuple[M1, M2, M3, M4]]: ...
- @classmethod
- def qwith_entities(cls, retvals, *filters):
- return []
- class User(Base):
- pass
- class Role(Base):
- pass
- # incorrectly inferred as Iterable[Tuple[Any, Role]]
- users_roles = User.qwith_entities(Role)
- # correctly inferred as Iterable[Tuple[User, Role]]
- base_users_roles = Base.qwith_entities((User, Role))
- # correcly inferred as Iterable[Tuple[User, Role]]
- users_roles2 = User.qwith_entities2(Role)
- #
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement