Advertisement
Guest User

Untitled

a guest
Jul 21st, 2018
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.56 KB | None | 0 0
  1. from typing import TypeVar, Type, Iterable, Tuple, overload
  2.  
  3. T_DBModel = TypeVar('TDBModel', bound='Base')
  4.  
  5. M1 = TypeVar('M1')
  6. M2 = TypeVar('M2')
  7. M3 = TypeVar('M3')
  8. M4 = TypeVar('M4')
  9.  
  10.  
  11. class Base:
  12.     @classmethod
  13.     def qwith_entities2(cls: Type[T_DBModel], retval: Type[M1]) -> \
  14.             Iterable[Tuple[T_DBModel, M1]]:
  15.         return []
  16.  
  17.     @classmethod
  18.     @overload
  19.     def qwith_entities(cls: Type[T_DBModel], retval: Type[M1],
  20.             *filters) -> Iterable[Tuple[T_DBModel, M1]]: ...
  21.  
  22.     @classmethod
  23.     @overload
  24.     def qwith_entities(
  25.             cls: Type[T_DBModel], retvals: Tuple[Type[M1], Type[M2]],
  26.             *filters) -> Iterable[Tuple[M1, M2]]: ...
  27.  
  28.     @classmethod
  29.     @overload
  30.     def qwith_entities(
  31.             cls: Type[T_DBModel], retvals: Tuple[Type[M1], Type[M2], Type[M3]],
  32.             *filters) -> Iterable[Tuple[M1, M2, M3]]: ...
  33.  
  34.     @classmethod
  35.     @overload
  36.     def qwith_entities(
  37.             cls: Type[T_DBModel],
  38.             retvals: Tuple[Type[M1], Type[M2], Type[M3], Type[M4]],
  39.             *filters) -> Iterable[Tuple[M1, M2, M3, M4]]: ...
  40.  
  41.     @classmethod
  42.     def qwith_entities(cls, retvals, *filters):
  43.         return []
  44.  
  45.  
  46. class User(Base):
  47.     pass
  48.  
  49.  
  50. class Role(Base):
  51.     pass
  52.  
  53.  
  54. # incorrectly inferred as Iterable[Tuple[Any, Role]]
  55. users_roles = User.qwith_entities(Role)
  56.  
  57. # correctly inferred as Iterable[Tuple[User, Role]]
  58. base_users_roles = Base.qwith_entities((User, Role))
  59.  
  60. # correcly inferred as Iterable[Tuple[User, Role]]
  61. users_roles2 = User.qwith_entities2(Role)
  62.  
  63. #
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement