@@ -5,7 +5,7 @@ from collections.abc import Callable, Generator, Iterable, Iterator
55from datetime import datetime
66from decimal import Decimal
77from types import TracebackType
8- from typing import Any , ClassVar , Final , Literal , NamedTuple , NoReturn , TypeVar , overload , type_check_only
8+ from typing import Any , ClassVar , Final , Generic , Literal , NamedTuple , NoReturn , TypeVar , overload , type_check_only
99from typing_extensions import Self , TypeIs
1010from uuid import UUID
1111
@@ -18,6 +18,7 @@ def reraise(tp: Unused, value: BaseException, tb: TracebackType | None = None) -
1818_T = TypeVar ("_T" )
1919_VT = TypeVar ("_VT" )
2020_F = TypeVar ("_F" , bound = Callable [..., Any ])
21+ _TModel = TypeVar ("_TModel" , bound = Model )
2122
2223class attrdict (dict [str , _VT ]):
2324 def __getattr__ (self , attr : str ) -> _VT : ...
@@ -1658,9 +1659,9 @@ class Model(metaclass=ModelBase):
16581659 @classmethod
16591660 def validate_model (cls ) -> None : ...
16601661 @classmethod
1661- def alias (cls , alias = None ) -> ModelAlias : ...
1662+ def alias (cls , alias = None ) -> ModelAlias [ Self ] : ...
16621663 @classmethod
1663- def select (cls , * fields ) -> ModelSelect : ...
1664+ def select (cls , * fields ) -> ModelSelect [ Self ] : ...
16641665 @classmethod
16651666 def update (cls , data = None , / , ** update ) -> ModelUpdate : ...
16661667 @classmethod
@@ -1684,7 +1685,7 @@ class Model(metaclass=ModelBase):
16841685 @classmethod
16851686 def bulk_update (cls , model_list , fields , batch_size = None ): ...
16861687 @classmethod
1687- def noop (cls ) -> NoopModelSelect : ...
1688+ def noop (cls ) -> NoopModelSelect [ Self ] : ...
16881689 @classmethod
16891690 def get (cls , * query , ** filters ): ...
16901691 @classmethod
@@ -1729,12 +1730,12 @@ class Model(metaclass=ModelBase):
17291730 @classmethod
17301731 def add_index (cls , * fields , ** kwargs ) -> None : ...
17311732
1732- class ModelAlias (Node ):
1733- def __init__ (self , model , alias = None ) -> None : ...
1733+ class ModelAlias (Node , Generic [ _TModel ] ):
1734+ def __init__ (self , model : type [ _TModel ] , alias = None ) -> None : ...
17341735 def __getattr__ (self , attr : str ): ...
17351736 def __setattr__ (self , attr : str , value ) -> None : ...
17361737 def get_field_aliases (self ) -> list [Incomplete ]: ...
1737- def select (self , * selection ) -> ModelSelect : ...
1738+ def select (self , * selection ) -> ModelSelect [ _TModel ] : ...
17381739 def __call__ (self , ** kwargs ): ...
17391740 def __sql__ (self , ctx ): ...
17401741
@@ -1782,11 +1783,11 @@ class ModelCompoundSelectQuery(BaseModelSelect, CompoundSelectQuery): # type: i
17821783 model : Incomplete
17831784 def __init__ (self , model , * args , ** kwargs ) -> None : ...
17841785
1785- class ModelSelect (BaseModelSelect , Select ): # type: ignore[misc]
1786- model : Incomplete
1787- def __init__ (self , model , fields_or_models , is_default : bool = False ) -> None : ...
1786+ class ModelSelect (BaseModelSelect , Select , Generic [ _TModel ] ): # type: ignore[misc]
1787+ model : type [ _TModel ]
1788+ def __init__ (self , model : type [ _TModel ] , fields_or_models , is_default : bool = False ) -> None : ...
17881789 def clone (self ) -> Self : ...
1789- def select (self , * fields_or_models ): ...
1790+ def select (self , * fields_or_models ) -> ModelSelect [ _TModel ] : ...
17901791 def select_extend (self , * columns ): ...
17911792 def switch (self , ctx = None ) -> Self : ...
17921793 def join (self , dest , join_type = "INNER JOIN" , on = None , src = None , attr = None ) -> Self : ... # type: ignore[override]
@@ -1798,7 +1799,7 @@ class ModelSelect(BaseModelSelect, Select): # type: ignore[misc]
17981799 def create_table (self , name , safe : bool = True , ** meta ): ...
17991800 def __sql_selection__ (self , ctx , is_subquery : bool = False ): ...
18001801
1801- class NoopModelSelect (ModelSelect ):
1802+ class NoopModelSelect (ModelSelect [ _TModel ] ):
18021803 def __sql__ (self , ctx ): ...
18031804
18041805class _ModelWriteQueryHelper (_ModelQueryHelper ):
@@ -1817,7 +1818,7 @@ class ModelInsert(_ModelWriteQueryHelper, Insert): # type: ignore[misc]
18171818
18181819class ModelDelete (_ModelWriteQueryHelper , Delete ): ... # type: ignore[misc]
18191820
1820- class ManyToManyQuery (ModelSelect ):
1821+ class ManyToManyQuery (ModelSelect [ _TModel ] ):
18211822 def __init__ (self , instance , accessor , rel , * args , ** kwargs ) -> None : ...
18221823 def add (self , value , clear_existing : bool = False ) -> None : ...
18231824 def remove (self , value ): ...
0 commit comments