From 5b47e97ffad7050c60284cedaceb870c1a8fcc21 Mon Sep 17 00:00:00 2001 From: donbarbos Date: Sun, 6 Sep 2026 16:39:26 +0400 Subject: [PATCH 1/2] [peewee] Update to 4.5.0 Closes: #16349 --- stubs/peewee/METADATA.toml | 2 +- stubs/peewee/peewee.pyi | 71 +++++++++++++++++++++++++++++--------- 2 files changed, 55 insertions(+), 18 deletions(-) diff --git a/stubs/peewee/METADATA.toml b/stubs/peewee/METADATA.toml index 95601b145da8..e82b8a3ad85b 100644 --- a/stubs/peewee/METADATA.toml +++ b/stubs/peewee/METADATA.toml @@ -1,4 +1,4 @@ -version = "4.4.0" +version = "4.5.0" upstream-repository = "https://github.com/coleifer/peewee" # We're not providing stubs for all playhouse modules right now # https://github.com/python/typeshed/pull/11731#issuecomment-2065729058 diff --git a/stubs/peewee/peewee.pyi b/stubs/peewee/peewee.pyi index 29fa0abbe76a..db012eaf8c52 100644 --- a/stubs/peewee/peewee.pyi +++ b/stubs/peewee/peewee.pyi @@ -92,6 +92,7 @@ def make_identifier(s: str) -> str: ... def chunked(it: Iterable[_T], n: int) -> Generator[list[_T]]: ... class _callable_context_manager: + __slots__ = () def __call__(self, fn): ... class Proxy: @@ -131,7 +132,11 @@ class AliasManager: def pop(self) -> None: ... class State: - def __new__(cls, scope=1, parentheses: bool = False, **kwargs) -> Self: ... + __slots__ = ("settings", "scope", "parentheses") + settings: dict[str, Incomplete] + scope: Incomplete + parentheses: bool + def __init__(self, scope=1, parentheses: bool = False, settings=None) -> None: ... def __call__(self, scope=None, parentheses=None, **kwargs) -> State: ... def __getattr__(self, attr_name: str): ... @@ -433,6 +438,7 @@ class Expression(ColumnBase): def __sql__(self, ctx): ... class StringExpression(Expression): + def __sql__(self, ctx): ... def __add__(self, rhs) -> StringExpression: ... def __radd__(self, lhs) -> StringExpression: ... @@ -784,12 +790,19 @@ class ViewMetadata(NamedTuple): name: Incomplete sql: Incomplete +class QueryEvent(NamedTuple): + sql: str + params: Incomplete + duration: float + exception: BaseException | None + class _ConnectionState: def __init__(self, **kwargs) -> None: ... closed: bool conn: Incomplete ctx: Incomplete transactions: Incomplete + commit_callbacks: list[Incomplete] def reset(self) -> None: ... def set_connection(self, conn) -> None: ... @@ -816,6 +829,7 @@ class Database(_callable_context_manager): json_methods: Incomplete field_types: Incomplete operations: Incomplete + use_concat_function: bool param: str quote: str server_version: Incomplete @@ -833,6 +847,7 @@ class Database(_callable_context_manager): truncate_table: bool autoconnect: Incomplete thread_safe: Incomplete + query_hooks: list[Callable[[QueryEvent], Incomplete]] connect_params: Incomplete def __deepcopy__(self, memo: Any) -> Self: ... def __init__( @@ -856,6 +871,7 @@ class Database(_callable_context_manager): def connection_context(self) -> ConnectionContext: ... def connect(self, reuse_if_open: bool = False) -> bool: ... def close(self) -> bool: ... + def dispose(self) -> None: ... def is_closed(self) -> bool: ... def is_connection_usable(self) -> bool: ... def connection(self): ... @@ -877,6 +893,7 @@ class Database(_callable_context_manager): def pop_transaction(self): ... def transaction_depth(self) -> int: ... def top_transaction(self): ... + def after_commit(self, fn: Callable[[], _R]) -> Callable[[], _R]: ... def atomic(self, *args, **kwargs) -> _atomic: ... def manual_commit(self) -> _manual: ... def transaction(self, *args, **kwargs) -> _transaction: ... @@ -891,7 +908,7 @@ class Database(_callable_context_manager): def get_columns(self, table, schema: str | None = None) -> list[ColumnMetadata]: ... def get_primary_keys(self, table, schema: str | None = None): ... def get_foreign_keys(self, table, schema: str | None = None) -> list[ForeignKeyMetadata]: ... - def sequence_exists(self, seq) -> bool: ... + def sequence_exists(self, seq, schema: str | None = None) -> bool: ... def create_tables(self, models: Iterable[type[_Model]], **options) -> None: ... def drop_tables(self, models: Iterable[type[_Model]], **kwargs) -> None: ... def extract_date(self, date_part, date_field): ... @@ -917,7 +934,14 @@ class SqliteDatabase(Database): truncate_table: bool nulls_ordering: bool def __init__( - self, database: str | None, pragmas=None, regexp_function: bool = False, rank_functions: bool = False, *args, **kwargs + self, + database: str | None, + pragmas=None, + regexp_function: bool = False, + rank_functions: bool = False, + lock_type=None, + *args, + **kwargs, ) -> None: ... returning_clause: Incomplete def init(self, database: str | None, pragmas=None, timeout: int = 5, returning_clause=None, **kwargs) -> None: ... @@ -973,6 +997,9 @@ class SqliteDatabase(Database): class _BasePsycopgAdapter: isolation_levels: dict[int, str] + txn_idle: int | None + txn_inerror: int | None + txn_unknown: int | None isolation_levels_inv: dict[str, int] def __init__(self) -> None: ... @@ -986,7 +1013,14 @@ class _BasePsycopgAdapter: @overload def isolation_level_str(self, isolation_level: _T) -> _T: ... + def is_connection_usable(self, conn) -> bool: ... + def is_connection_reusable(self, conn) -> bool: ... + def is_connection_closed(self, conn) -> bool: ... + class Psycopg2Adapter(_BasePsycopgAdapter): + txn_idle: int + txn_inerror: int + txn_unknown: int json_type: Incomplete jsonb_type: Incomplete cast_json_case: bool @@ -995,12 +1029,14 @@ class Psycopg2Adapter(_BasePsycopgAdapter): def get_binary_type(self) -> type[Incomplete]: ... def connect(self, db, **params): ... def get_server_version(self, conn): ... - def is_connection_usable(self, conn) -> bool: ... - def is_connection_reusable(self, conn) -> bool: ... - def is_connection_closed(self, conn) -> bool: ... + def txn_status(self, conn) -> int: ... + def rollback(self, conn) -> None: ... def server_side_cursor(self, conn): ... class Psycopg3Adapter(_BasePsycopgAdapter): + txn_idle: int + txn_inerror: int + txn_unknown: int json_type: Incomplete jsonb_type: Incomplete cast_json_case: bool @@ -1009,9 +1045,8 @@ class Psycopg3Adapter(_BasePsycopgAdapter): def get_binary_type(self) -> type[Incomplete]: ... def connect(self, db, **params): ... def get_server_version(self, conn): ... - def is_connection_usable(self, conn) -> bool: ... - def is_connection_reusable(self, conn) -> bool: ... - def is_connection_closed(self, conn) -> bool: ... + def txn_status(self, conn) -> int: ... + def rollback(self, conn) -> None: ... def server_side_cursor(self, conn): ... class PostgresqlDatabase(Database): @@ -1045,7 +1080,7 @@ class PostgresqlDatabase(Database): def get_columns(self, table, schema: str | None = None) -> list[ColumnMetadata]: ... def get_primary_keys(self, table, schema: str | None = None) -> list[Incomplete]: ... def get_foreign_keys(self, table, schema: str | None = None) -> list[ForeignKeyMetadata]: ... - def sequence_exists(self, sequence) -> bool: ... + def sequence_exists(self, sequence, schema: str | None = None) -> bool: ... def get_binary_type(self) -> type[Incomplete]: ... def conflict_statement(self, on_conflict, query) -> None: ... def conflict_update(self, oc, query) -> NodeList: ... @@ -1069,7 +1104,8 @@ class MySQLDatabase(Database): limit_max: Incomplete safe_create_index: bool safe_drop_index: bool - sql_mode: str + use_concat_function: bool + sql_mode: str | None mariadb: bool def init(self, database: str | None, mariadb: bool | None = None, **kwargs) -> None: ... def is_connection_usable(self) -> bool: ... @@ -1148,6 +1184,7 @@ class CursorWrapper: def dedupe_columns(self, columns: Iterable[str], valid_identifiers: bool = True) -> list[str]: ... class DictCursorWrapper(CursorWrapper): + valid_identifiers: bool columns: list[str] ncols: int def initialize(self) -> None: ... @@ -1159,11 +1196,9 @@ class NamedTupleCursorWrapper(CursorWrapper): def process_row(self, row): ... class ObjectCursorWrapper(DictCursorWrapper): + valid_identifiers: bool constructor: Incomplete - columns: list[str] - ncols: int def __init__(self, cursor, constructor) -> None: ... - def initialize(self) -> None: ... def process_row(self, row): ... class ResultIterator: @@ -1656,7 +1691,8 @@ class ManyToManyFieldAccessor(FieldAccessor): src_fk: Incomplete dest_fk: Incomplete def __init__(self, model, field, name) -> None: ... - def __get__(self, instance, instance_type=None, force_query: bool = False): ... + def get_query(self, instance): ... + def __get__(self, instance, instance_type=None): ... def __set__(self, instance, value) -> None: ... class ManyToManyField(MetaField): @@ -2047,6 +2083,7 @@ class BaseModelCursorWrapper(DictCursorWrapper): def process_row(self, row): ... class ModelDictCursorWrapper(BaseModelCursorWrapper): + valid_identifiers: bool unique_columns: list[str] def initialize(self) -> None: ... def process_row(self, row) -> dict[str, Incomplete]: ... @@ -2061,11 +2098,10 @@ class ModelNamedTupleCursorWrapper(ModelTupleCursorWrapper): def initialize(self) -> None: ... class ModelObjectCursorWrapper(ModelDictCursorWrapper): + valid_identifiers: bool constructor: Incomplete is_model: Incomplete - identifiers: list[str] def __init__(self, cursor, model, select, constructor) -> None: ... - def initialize(self) -> None: ... def process_row(self, row): ... class ModelCursorWrapper(BaseModelCursorWrapper): @@ -2170,6 +2206,7 @@ __all__ = [ "ProgrammingError", "Proxy", "QualifiedNames", + "QueryEvent", "SchemaManager", "SmallIntegerField", "Select", From 145035847f14a9c490fe59954dd0e12ef32cef76 Mon Sep 17 00:00:00 2001 From: donbarbos Date: Sun, 6 Sep 2026 16:42:44 +0400 Subject: [PATCH 2/2] add None to txn_idle vars --- stubs/peewee/peewee.pyi | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/stubs/peewee/peewee.pyi b/stubs/peewee/peewee.pyi index db012eaf8c52..13bb78bb93c6 100644 --- a/stubs/peewee/peewee.pyi +++ b/stubs/peewee/peewee.pyi @@ -1018,9 +1018,9 @@ class _BasePsycopgAdapter: def is_connection_closed(self, conn) -> bool: ... class Psycopg2Adapter(_BasePsycopgAdapter): - txn_idle: int - txn_inerror: int - txn_unknown: int + txn_idle: int | None + txn_inerror: int | None + txn_unknown: int | None json_type: Incomplete jsonb_type: Incomplete cast_json_case: bool @@ -1034,9 +1034,9 @@ class Psycopg2Adapter(_BasePsycopgAdapter): def server_side_cursor(self, conn): ... class Psycopg3Adapter(_BasePsycopgAdapter): - txn_idle: int - txn_inerror: int - txn_unknown: int + txn_idle: int | None + txn_inerror: int | None + txn_unknown: int | None json_type: Incomplete jsonb_type: Incomplete cast_json_case: bool