1- import itertools
2- import logging
1+ import re
32import threading
4- from _typeshed import Incomplete , SupportsKeysAndGetItem
3+ from _typeshed import Incomplete , SupportsKeysAndGetItem , Unused
54from collections .abc import Callable , Generator , Iterable , Iterator
65from datetime import datetime
76from decimal import Decimal
87from types import TracebackType
9- from typing import Any , ClassVar , Final , Literal , NamedTuple , TypeVar , overload
10- from typing_extensions import Self
8+ from typing import Any , ClassVar , Final , Literal , NamedTuple , NoReturn , TypeVar , overload , type_check_only
9+ from typing_extensions import Self , TypeIs
1110from uuid import UUID
1211
13- class NullHandler (logging .Handler ):
14- def emit (self , record ) -> None : ...
12+ def callable_ (c : object ) -> TypeIs [Callable [..., object ]]: ...
1513
16- text_type = str
17- bytes_type = bytes
18- buffer_type = memoryview
19- basestring = str
20- long = int
21- izip_longest = itertools .zip_longest
14+ multi_types : tuple [type [Incomplete ], ...]
15+
16+ def reraise (tp : Unused , value : BaseException , tb : TracebackType | None = None ) -> NoReturn : ...
2217
2318_T = TypeVar ("_T" )
2419_VT = TypeVar ("_VT" )
@@ -44,8 +39,13 @@ SCOPE_COLUMN: Final = 16
4439CSQ_PARENTHESES_NEVER : Final = 0
4540CSQ_PARENTHESES_ALWAYS : Final = 1
4641CSQ_PARENTHESES_UNNESTED : Final = 2
42+ SNAKE_CASE_STEP1 : Final [re .Pattern [str ]]
43+ SNAKE_CASE_STEP2 : Final [re .Pattern [str ]]
44+ IDENTIFIER_RE : Final [re .Pattern [str ]]
45+ MODEL_BASE : Final = "_metaclass_helper_"
4746
48- def chunked (it , n ) -> Generator [Incomplete ]: ...
47+ def make_identifier (s : str ) -> str : ...
48+ def chunked (it , n ) -> Generator [list [Incomplete ]]: ...
4949
5050class _callable_context_manager :
5151 def __call__ (self , fn ): ...
@@ -347,14 +347,15 @@ class BitwiseMixin:
347347 def __invert__ (self ) -> BitwiseNegated : ...
348348
349349class BitwiseNegated (BitwiseMixin , WrappedNode ):
350+ op : str
350351 def __invert__ (self ): ...
351352 def __sql__ (self , ctx ): ...
352353
353354class Value (ColumnBase ):
354355 value : Incomplete
355356 converter : Incomplete
356- multi : Incomplete
357- values : list [Incomplete ]
357+ multi : bool
358+ values : list [Incomplete ] | None
358359 def __init__ (self , value , converter = None , unpack : bool = True ) -> None : ...
359360 def __sql__ (self , ctx ): ...
360361
@@ -463,7 +464,7 @@ class WindowAlias(Node):
463464 def __sql__ (self , ctx ): ...
464465
465466class ForUpdate (Node ):
466- def __init__ (self , expr , of = None , nowait = None ) -> None : ...
467+ def __init__ (self , expr , of = None , nowait : bool | None = None , skip_locked : bool | None = None ) -> None : ...
467468 def __sql__ (self , ctx ): ...
468469
469470class Case (ColumnBase ):
@@ -476,7 +477,7 @@ class Case(ColumnBase):
476477class NodeList (ColumnBase ):
477478 nodes : Incomplete
478479 glue : Incomplete
479- parens : Incomplete
480+ parens : bool
480481 def __init__ (self , nodes , glue : str = " " , parens : bool = False ) -> None : ...
481482 def __sql__ (self , ctx ): ...
482483
@@ -598,8 +599,6 @@ class Select(SelectBase):
598599 distinct = None ,
599600 windows = None ,
600601 for_update = None ,
601- for_update_of = None ,
602- nowait = None ,
603602 lateral = None ,
604603 ** kwargs ,
605604 ) -> None : ...
@@ -619,7 +618,9 @@ class Select(SelectBase):
619618 def having (self , * expressions ) -> Self : ...
620619 def distinct (self , * columns ) -> Self : ...
621620 def window (self , * windows ) -> Self : ...
622- def for_update (self , for_update : bool = True , of = None , nowait = None ) -> Self : ...
621+ def for_update (
622+ self , for_update : bool = True , of = None , nowait : bool | None = None , skip_locked : bool | None = None
623+ ) -> Self : ...
623624 def lateral (self , lateral : bool = True ) -> Self : ...
624625 def __sql_selection__ (self , ctx , is_subquery : bool = False ): ...
625626 def __sql__ (self , ctx ): ...
@@ -931,7 +932,6 @@ class Psycopg2Adapter(_BasePsycopgAdapter):
931932 def is_connection_usable (self , conn ) -> bool : ...
932933 def is_connection_reusable (self , conn ) -> bool : ...
933934 def is_connection_closed (self , conn ) -> bool : ...
934- def extract_date (self , date_part , date_field ) -> Function : ...
935935
936936class Psycopg3Adapter (_BasePsycopgAdapter ):
937937 json_type : Incomplete
@@ -945,7 +945,6 @@ class Psycopg3Adapter(_BasePsycopgAdapter):
945945 def is_connection_usable (self , conn ) -> bool : ...
946946 def is_connection_reusable (self , conn ) -> bool : ...
947947 def is_connection_closed (self , conn ) -> bool : ...
948- def extract_date (self , date_part , date_field ) -> Function : ...
949948
950949class PostgresqlDatabase (Database ):
951950 field_types : Incomplete
@@ -956,7 +955,6 @@ class PostgresqlDatabase(Database):
956955 for_update : bool
957956 nulls_ordering : bool
958957 returning_clause : bool
959- safe_create_index : bool
960958 sequences : bool
961959 psycopg2_adapter : Incomplete
962960 psycopg3_adapter : Incomplete
@@ -986,6 +984,7 @@ class PostgresqlDatabase(Database):
986984 def conflict_update (self , oc , query ) -> NodeList : ...
987985 def extract_date (self , date_part , date_field ) -> Function : ...
988986 def truncate_date (self , date_part , date_field ) -> Function : ...
987+ def interval (self , val ) -> NodeList : ...
989988 def to_timestamp (self , date_field ) -> Function : ...
990989 def from_timestamp (self , date_field ) -> Function : ...
991990 def get_noop_select (self , ctx ): ...
@@ -1077,8 +1076,11 @@ class CursorWrapper:
10771076 def process_row (self , row ): ...
10781077 def iterator (self ) -> Generator [Incomplete ]: ...
10791078 def fill_cache (self , n : int = 0 ) -> None : ...
1079+ def dedupe_columns (self , columns : Iterable [str ], valid_identifiers : bool = True ) -> list [str ]: ...
10801080
10811081class DictCursorWrapper (CursorWrapper ):
1082+ columns : list [str ]
1083+ ncols : int
10821084 def initialize (self ) -> None : ...
10831085 def process_row (self , row ): ...
10841086
@@ -1089,7 +1091,10 @@ class NamedTupleCursorWrapper(CursorWrapper):
10891091
10901092class ObjectCursorWrapper (DictCursorWrapper ):
10911093 constructor : Incomplete
1094+ columns : list [str ]
1095+ ncols : int
10921096 def __init__ (self , cursor , constructor ) -> None : ...
1097+ def initialize (self ) -> None : ...
10931098 def process_row (self , row ): ...
10941099
10951100class ResultIterator :
@@ -1231,7 +1236,7 @@ class CharField(_StringField):
12311236 def get_modifiers (self ) -> list [int ] | None : ...
12321237
12331238class FixedCharField (CharField ):
1234- def python_value (self , value ): ...
1239+ def adapt (self , value ) -> str : ...
12351240
12361241class TextField (_StringField ): ...
12371242
@@ -1510,6 +1515,7 @@ class SchemaManager:
15101515 def drop_table (self , safe : bool = True , ** options ) -> None : ...
15111516 def truncate_table (self , restart_identity : bool = False , cascade : bool = False ) -> None : ...
15121517 def create_indexes (self , safe : bool = True ) -> None : ...
1518+ def drop_index (self , field = None , index = None , safe : bool = True ): ...
15131519 def drop_indexes (self , safe : bool = True ) -> None : ...
15141520 def create_sequence (self , field ) -> None : ...
15151521 def drop_sequence (self , field ) -> None : ...
@@ -1735,6 +1741,7 @@ class _ModelQueryHelper:
17351741 default_row_type : Incomplete
17361742 def __init__ (self , * args , ** kwargs ) -> None : ...
17371743 def objects (self , constructor = None ) -> Self : ...
1744+ def models (self ) -> Self : ...
17381745
17391746class ModelRaw (_ModelQueryHelper , RawQuery ): # type: ignore[misc]
17401747 model : Incomplete
@@ -1804,41 +1811,63 @@ class ManyToManyQuery(ModelSelect):
18041811class BaseModelCursorWrapper (DictCursorWrapper ):
18051812 model : Incomplete
18061813 select : Incomplete
1814+ ncols : int
1815+ columns : list [str ]
1816+ converters : list [Incomplete ]
1817+ fields : list [Incomplete ]
1818+ no_convert : list [int ]
1819+ convert : list [int ]
18071820 def __init__ (self , cursor , model , columns ) -> None : ...
1808- initialize : Incomplete
1821+ def initialize ( self ) -> None : ...
18091822 def process_row (self , row ): ...
18101823
18111824class ModelDictCursorWrapper (BaseModelCursorWrapper ):
1812- def process_row (self , row ) -> dict [Incomplete , Incomplete ]: ...
1825+ unique_columns : list [str ]
1826+ def initialize (self ) -> None : ...
1827+ def process_row (self , row ) -> dict [str , Incomplete ]: ...
18131828
1814- class ModelTupleCursorWrapper (ModelDictCursorWrapper ):
1829+ class ModelTupleCursorWrapper (BaseModelCursorWrapper ):
18151830 constructor : Incomplete
18161831 def process_row (self , row ) -> tuple [Incomplete , ...]: ... # type: ignore[override]
18171832
18181833class ModelNamedTupleCursorWrapper (ModelTupleCursorWrapper ):
1819- tuple_class : Incomplete
1834+ impl : Incomplete
18201835 constructor : Incomplete
18211836 def initialize (self ) -> None : ...
18221837
18231838class ModelObjectCursorWrapper (ModelDictCursorWrapper ):
18241839 constructor : Incomplete
18251840 is_model : Incomplete
1841+ identifiers : list [str ]
18261842 def __init__ (self , cursor , model , select , constructor ) -> None : ...
1843+ def initialize (self ) -> None : ...
18271844 def process_row (self , row ): ...
18281845
18291846class ModelCursorWrapper (BaseModelCursorWrapper ):
18301847 from_list : Incomplete
18311848 joins : Incomplete
1832- def __init__ (self , cursor , model , select , from_list , joins ) -> None : ...
1849+ dicts : bool
1850+ def __init__ (self , cursor , model , select , from_list , joins , dicts : bool = False ) -> None : ...
18331851 key_to_constructor : Incomplete
1834- src_is_dest : Incomplete
1835- src_to_dest : Incomplete
1836- column_keys : Incomplete
1852+ src_is_dest : dict [ Incomplete , Incomplete ]
1853+ src_to_dest : list [ tuple [ Incomplete , Incomplete , Incomplete , bool , Incomplete , bool ]]
1854+ column_keys : list [ Incomplete ]
18371855 def initialize (self ) -> None : ...
18381856 def process_row (self , row ): ...
18391857
1840- class PrefetchQuery :
1841- def __new__ (cls , query , fields = None , is_backref = None , rel_models = None , field_to_name = None , model = None ) -> Self : ...
1858+ @type_check_only
1859+ class _PrefetchQuery (NamedTuple ):
1860+ query : Incomplete
1861+ fields : Incomplete
1862+ is_backref : bool
1863+ rel_models : Incomplete
1864+ field_to_name : Incomplete
1865+ model : Incomplete
1866+
1867+ class PrefetchQuery (_PrefetchQuery ):
1868+ def __new__ (
1869+ cls , query , fields = None , is_backref : bool | None = None , rel_models = None , field_to_name = None , model = None
1870+ ) -> Self : ...
18421871 def populate_instance (self , instance , id_map ) -> None : ...
18431872 def store_instance (self , instance , id_map ) -> None : ...
18441873
@@ -1878,6 +1907,7 @@ __all__ = [
18781907 "DoesNotExist" ,
18791908 "DoubleField" ,
18801909 "DQ" ,
1910+ "Entity" ,
18811911 "EXCLUDED" ,
18821912 "Field" ,
18831913 "FixedCharField" ,
0 commit comments