From 33e5cbbf00c2d8651d3305ad22c7de6b04178766 Mon Sep 17 00:00:00 2001 From: Vizonex Date: Tue, 10 Mar 2026 14:05:09 -0500 Subject: [PATCH 01/38] add cysqlite --- stubs/cysqlite/METADATA.toml | 2 + stubs/cysqlite/cysqlite/__init__.pyi | 25 ++ stubs/cysqlite/cysqlite/_constants.pyi | 187 ++++++++++++++ stubs/cysqlite/cysqlite/_cysqlite.pyi | 330 +++++++++++++++++++++++++ stubs/cysqlite/cysqlite/aio.pyi | 130 ++++++++++ stubs/cysqlite/cysqlite/exceptions.pyi | 11 + stubs/cysqlite/cysqlite/metadata.pyi | 41 +++ stubs/cysqlite/cysqlite/utils.pyi | 5 + 8 files changed, 731 insertions(+) create mode 100644 stubs/cysqlite/METADATA.toml create mode 100644 stubs/cysqlite/cysqlite/__init__.pyi create mode 100644 stubs/cysqlite/cysqlite/_constants.pyi create mode 100644 stubs/cysqlite/cysqlite/_cysqlite.pyi create mode 100644 stubs/cysqlite/cysqlite/aio.pyi create mode 100644 stubs/cysqlite/cysqlite/exceptions.pyi create mode 100644 stubs/cysqlite/cysqlite/metadata.pyi create mode 100644 stubs/cysqlite/cysqlite/utils.pyi diff --git a/stubs/cysqlite/METADATA.toml b/stubs/cysqlite/METADATA.toml new file mode 100644 index 000000000000..f7e4140b2f8a --- /dev/null +++ b/stubs/cysqlite/METADATA.toml @@ -0,0 +1,2 @@ +version = "0.2.*" +upstream_repository = "https://github.com/coleifer/cysqlite" diff --git a/stubs/cysqlite/cysqlite/__init__.pyi b/stubs/cysqlite/cysqlite/__init__.pyi new file mode 100644 index 000000000000..b9746916ea0c --- /dev/null +++ b/stubs/cysqlite/cysqlite/__init__.pyi @@ -0,0 +1,25 @@ +from ._constants import * +from ._cysqlite import ( + Blob as Blob, + Connection as Connection, + Row as Row, + TableFunction as TableFunction, + compile_option as compile_option, + connect as connect, + damerau_levenshtein_dist as damerau_levenshtein_dist, + levenshtein_dist as levenshtein_dist, + median as median, + rank_bm25 as rank_bm25, + rank_lucene as rank_lucene, + sqlite_version as sqlite_version, + sqlite_version_info as sqlite_version_info, + status as status, + threadsafety as threadsafety, +) +from .exceptions import * + +version: str +__version__: str +version_info: tuple[int, int, int] +apilevel: str +paramstyle: str diff --git a/stubs/cysqlite/cysqlite/_constants.pyi b/stubs/cysqlite/cysqlite/_constants.pyi new file mode 100644 index 000000000000..4151e5fcdacd --- /dev/null +++ b/stubs/cysqlite/cysqlite/_constants.pyi @@ -0,0 +1,187 @@ +SQLITE_ABORT: int +SQLITE_ALTER_TABLE: int +SQLITE_ANALYZE: int +SQLITE_ATTACH: int +SQLITE_AUTH: int +SQLITE_BUSY: int +SQLITE_CANTOPEN: int +SQLITE_CHECKPOINT_FULL: int +SQLITE_CHECKPOINT_PASSIVE: int +SQLITE_CHECKPOINT_RESTART: int +SQLITE_CHECKPOINT_TRUNCATE: int +SQLITE_CONSTRAINT: int +SQLITE_COPY: int +SQLITE_CORRUPT: int +SQLITE_CREATE_INDEX: int +SQLITE_CREATE_TABLE: int +SQLITE_CREATE_TEMP_INDEX: int +SQLITE_CREATE_TEMP_TABLE: int +SQLITE_CREATE_TEMP_TRIGGER: int +SQLITE_CREATE_TEMP_VIEW: int +SQLITE_CREATE_TRIGGER: int +SQLITE_CREATE_VIEW: int +SQLITE_CREATE_VTABLE: int +SQLITE_DBCONFIG_DEFENSIVE: int +SQLITE_DBCONFIG_DQS_DDL: int +SQLITE_DBCONFIG_DQS_DML: int +SQLITE_DBCONFIG_ENABLE_FKEY: int +SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER: int +SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION: int +SQLITE_DBCONFIG_ENABLE_QPSG: int +SQLITE_DBCONFIG_ENABLE_TRIGGER: int +SQLITE_DBCONFIG_ENABLE_VIEW: int +SQLITE_DBCONFIG_LEGACY_ALTER_TABLE: int +SQLITE_DBCONFIG_LEGACY_FILE_FORMAT: int +SQLITE_DBCONFIG_MAINDBNAME: int +SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE: int +SQLITE_DBCONFIG_RESET_DATABASE: int +SQLITE_DBCONFIG_TRIGGER_EQP: int +SQLITE_DBCONFIG_TRUSTED_SCHEMA: int +SQLITE_DBCONFIG_WRITABLE_SCHEMA: int +SQLITE_DBSTATUS_CACHE_HIT: int +SQLITE_DBSTATUS_CACHE_MISS: int +SQLITE_DBSTATUS_CACHE_USED: int +SQLITE_DBSTATUS_CACHE_WRITE: int +SQLITE_DBSTATUS_DEFERRED_FKS: int +SQLITE_DBSTATUS_LOOKASIDE_HIT: int +SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL: int +SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE: int +SQLITE_DBSTATUS_LOOKASIDE_USED: int +SQLITE_DBSTATUS_SCHEMA_USED: int +SQLITE_DBSTATUS_STMT_USED: int +SQLITE_DELETE: int +SQLITE_DENY: int +SQLITE_DETACH: int +SQLITE_DONE: int +SQLITE_DROP_INDEX: int +SQLITE_DROP_TABLE: int +SQLITE_DROP_TEMP_INDEX: int +SQLITE_DROP_TEMP_TABLE: int +SQLITE_DROP_TEMP_TRIGGER: int +SQLITE_DROP_TEMP_VIEW: int +SQLITE_DROP_TRIGGER: int +SQLITE_DROP_VIEW: int +SQLITE_DROP_VTABLE: int +SQLITE_EMPTY: int +SQLITE_ERROR: int +SQLITE_FCNTL_BEGIN_ATOMIC_WRITE: int +SQLITE_FCNTL_BUSYHANDLER: int +SQLITE_FCNTL_CHUNK_SIZE: int +SQLITE_FCNTL_CKPT_DONE: int +SQLITE_FCNTL_CKPT_START: int +SQLITE_FCNTL_CKSM_FILE: int +SQLITE_FCNTL_COMMIT_ATOMIC_WRITE: int +SQLITE_FCNTL_COMMIT_PHASETWO: int +SQLITE_FCNTL_DATA_VERSION: int +SQLITE_FCNTL_EXTERNAL_READER: int +SQLITE_FCNTL_FILE_POINTER: int +SQLITE_FCNTL_GET_LOCKPROXYFILE: int +SQLITE_FCNTL_HAS_MOVED: int +SQLITE_FCNTL_JOURNAL_POINTER: int +SQLITE_FCNTL_LAST_ERRNO: int +SQLITE_FCNTL_LOCKSTATE: int +SQLITE_FCNTL_LOCK_TIMEOUT: int +SQLITE_FCNTL_MMAP_SIZE: int +SQLITE_FCNTL_NULL_IO: int +SQLITE_FCNTL_OVERWRITE: int +SQLITE_FCNTL_PDB: int +SQLITE_FCNTL_PERSIST_WAL: int +SQLITE_FCNTL_POWERSAFE_OVERWRITE: int +SQLITE_FCNTL_PRAGMA: int +SQLITE_FCNTL_RBU: int +SQLITE_FCNTL_RESERVE_BYTES: int +SQLITE_FCNTL_RESET_CACHE: int +SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE: int +SQLITE_FCNTL_SET_LOCKPROXYFILE: int +SQLITE_FCNTL_SIZE_HINT: int +SQLITE_FCNTL_SIZE_LIMIT: int +SQLITE_FCNTL_SYNC: int +SQLITE_FCNTL_SYNC_OMITTED: int +SQLITE_FCNTL_TEMPFILENAME: int +SQLITE_FCNTL_TRACE: int +SQLITE_FCNTL_VFSNAME: int +SQLITE_FCNTL_VFS_POINTER: int +SQLITE_FCNTL_WAL_BLOCK: int +SQLITE_FCNTL_WIN32_AV_RETRY: int +SQLITE_FCNTL_WIN32_GET_HANDLE: int +SQLITE_FCNTL_WIN32_SET_HANDLE: int +SQLITE_FCNTL_ZIPVFS: int +SQLITE_FORMAT: int +SQLITE_FULL: int +SQLITE_FUNCTION: int +SQLITE_IGNORE: int +SQLITE_INSERT: int +SQLITE_INTERNAL: int +SQLITE_INTERRUPT: int +SQLITE_IOERR: int +SQLITE_LIMIT_ATTACHED: int +SQLITE_LIMIT_COLUMN: int +SQLITE_LIMIT_COMPOUND_SELECT: int +SQLITE_LIMIT_EXPR_DEPTH: int +SQLITE_LIMIT_FUNCTION_ARG: int +SQLITE_LIMIT_LENGTH: int +SQLITE_LIMIT_LIKE_PATTERN_LENGTH: int +SQLITE_LIMIT_SQL_LENGTH: int +SQLITE_LIMIT_TRIGGER_DEPTH: int +SQLITE_LIMIT_VARIABLE_NUMBER: int +SQLITE_LIMIT_VDBE_OP: int +SQLITE_LIMIT_WORKER_THREADS: int +SQLITE_LOCKED: int +SQLITE_MISMATCH: int +SQLITE_MISUSE: int +SQLITE_NOLFS: int +SQLITE_NOMEM: int +SQLITE_NOTADB: int +SQLITE_NOTFOUND: int +SQLITE_OK: int +SQLITE_OPEN_AUTOPROXY: int +SQLITE_OPEN_CREATE: int +SQLITE_OPEN_DELETEONCLOSE: int +SQLITE_OPEN_EXCLUSIVE: int +SQLITE_OPEN_FULLMUTEX: int +SQLITE_OPEN_MAIN_DB: int +SQLITE_OPEN_MAIN_JOURNAL: int +SQLITE_OPEN_MASTER_JOURNAL: int +SQLITE_OPEN_MEMORY: int +SQLITE_OPEN_NOMUTEX: int +SQLITE_OPEN_PRIVATECACHE: int +SQLITE_OPEN_READONLY: int +SQLITE_OPEN_READWRITE: int +SQLITE_OPEN_SHAREDCACHE: int +SQLITE_OPEN_SUBJOURNAL: int +SQLITE_OPEN_TEMP_DB: int +SQLITE_OPEN_TEMP_JOURNAL: int +SQLITE_OPEN_TRANSIENT_DB: int +SQLITE_OPEN_URI: int +SQLITE_OPEN_WAL: int +SQLITE_PERM: int +SQLITE_PRAGMA: int +SQLITE_PROTOCOL: int +SQLITE_RANGE: int +SQLITE_READ: int +SQLITE_READONLY: int +SQLITE_RECURSIVE: int +SQLITE_REINDEX: int +SQLITE_ROW: int +SQLITE_SAVEPOINT: int +SQLITE_SCHEMA: int +SQLITE_SELECT: int +SQLITE_STATUS_MALLOC_COUNT: int +SQLITE_STATUS_MALLOC_SIZE: int +SQLITE_STATUS_MEMORY_USED: int +SQLITE_STATUS_PAGECACHE_OVERFLOW: int +SQLITE_STATUS_PAGECACHE_SIZE: int +SQLITE_STATUS_PAGECACHE_USED: int +SQLITE_STATUS_PARSER_STACK: int +SQLITE_STATUS_SCRATCH_OVERFLOW: int +SQLITE_STATUS_SCRATCH_SIZE: int +SQLITE_STATUS_SCRATCH_USED: int +SQLITE_TOOBIG: int +SQLITE_TRACE_CLOSE: int +SQLITE_TRACE_PROFILE: int +SQLITE_TRACE_ROW: int +SQLITE_TRACE_STMT: int +SQLITE_TRANSACTION: int +SQLITE_UPDATE: int +SQLITE_VERSION: str +SQLITE_VERSION_NUMBER: int diff --git a/stubs/cysqlite/cysqlite/_cysqlite.pyi b/stubs/cysqlite/cysqlite/_cysqlite.pyi new file mode 100644 index 000000000000..24583b01f3c3 --- /dev/null +++ b/stubs/cysqlite/cysqlite/_cysqlite.pyi @@ -0,0 +1,330 @@ +import sys +import types +from collections.abc import Callable, Iterable, Iterator, Mapping, Sequence +from typing import Any, ClassVar, Literal, NoReturn, ParamSpec, TypeAlias, TypeVar, final, overload + +from cysqlite.metadata import Column, ColumnMetadata, ForeignKey, Index, View + +if sys.version_info >= (3, 12): + from collections.abc import Buffer +else: + from typing_extensions import Buffer + +if sys.version_info >= (3, 11): + from typing import Self +else: + from typing_extensions import Self + +from _typeshed import Incomplete + +_SqliteData: TypeAlias = str | Buffer | float | None +_AdaptedInputData: TypeAlias = _SqliteData | Any +_Parameters: TypeAlias = Sequence[_AdaptedInputData] | Mapping[str, _AdaptedInputData] +_IsolationLevel: TypeAlias = Literal["DEFERRED", "EXCLUSIVE", "IMMEDIATE"] | None +_Query: TypeAlias = Literal["INSERT", "UPDATE", "DELETE"] +_T = TypeVar("_T") +_P = ParamSpec("_P") + +HAS_COLUMN_METADATA: int +SENTINEL: object + +def compile_option(opt: str | Buffer) -> int: ... +def connect( + database: str, + flags: int | None = None, + timeout: float = 5.0, + vfs: Any | None = None, + uri: bool = False, + cached_statements: int = 100, + extensions: bool = True, + row_factory: Callable[..., Row] | None = None, + autoconnect: bool = True, + pragmas: dict[str, Any] | None = None, +) -> Connection: ... +def damerau_levenshtein_dist(s1: str, s2: str) -> int: ... +def levenshtein_dist(a: str, b: str) -> int: ... +def rank_bm25(py_match_info: Buffer, *raw_weights: int) -> float: ... +def rank_lucene(py_match_info: Buffer, *raw_weights: int) -> float: ... +def set_lookaside(size: int, slots: int) -> bool: ... +def set_mmap_size(default_size: int, max_size: int) -> bool: ... +def set_multithread() -> bool: ... +def set_serialized() -> bool: ... +def set_singlethread() -> bool: ... +def set_stmt_journal_spill(nbytes: int) -> bool: ... + +sqlite_version: str +sqlite_version_info: tuple[Any, ...] + +def status(flag: int) -> tuple[int, int]: ... + +threadsafety: int + +def vfs_list() -> list[str]: ... + +class Atomic(_callable_context_manager): + txn: Transaction | Savepoint + def __init__(self, conn: Connection, lock: _IsolationLevel = None) -> None: ... + def __enter__(self) -> Transaction | Savepoint: ... + def __exit__(self, type: type[BaseException] | None, value: BaseException | None, traceback: types.TracebackType | None): ... + def __reduce__(self): ... + +class Blob: + closed: bool + def __init__( + self, conn: Connection, table: str, column: str, rowid: int, read_only: bool = ..., database: str | None = None + ) -> None: ... + def close(self) -> None: ... + def fileno(self) -> NoReturn: ... # it throws: _io.UnsupportedOperation + def flush(self) -> None: ... + def isatty(self) -> Literal[True]: ... + def read(self, size: int = -1) -> bytes: ... + def readable(self) -> Literal[True]: ... + def readall(self) -> bytes: ... + def readinto(self, b: Buffer) -> int: ... + def readline(self, size: int = -1) -> bytes: ... + def readlines(self, hint: int = -1) -> list[bytes]: ... + def reopen(self, rowid: int) -> None: ... + def seek(self, offset: int, whence: int = 0) -> int: ... + def seekable(self) -> Literal[True]: ... + def tell(self) -> int: ... + def truncate(self, size: int | None = None) -> NoReturn: ... + def writable(self) -> bool: ... + def write(self, data: str | Buffer) -> int: ... + def writelines(self, lines: Iterable[str | Buffer]) -> int: ... + def __delitem__(self, other: int) -> None: ... + def __enter__(self) -> Self: ... + def __exit__(self, type: type[BaseException] | None, value: BaseException | None, traceback: types.TracebackType | None): ... + def __getitem__(self, key: int) -> bytes: ... + def __iter__(self) -> Self: ... + def __len__(self) -> int: ... + def __next__(self) -> bytes: ... + def __reduce__(self): ... + def __setitem__(self, key: int | slice[int, int, int] | slice[int, int], value: Buffer) -> None: ... + +@final +class Connection(_callable_context_manager): + cached_statements: int + callback_error: BaseException | None + database: Incomplete + extensions: bool + flags: int + in_transaction: bool + pragmas: dict[str, Any] + print_callback_tracebacks: bool + row_factory: Callable[..., Row] | Callable[..., Any] + timeout: float + uri: bool + vfs: str + def __init__( + self, + database: str, + flags: int | None = None, + timeout: float = 5.0, + vfs: str | None = None, + uri: bool = False, + cached_statements: int = 100, + extensions: bool = True, + row_factory: Callable[..., Row] | None = None, + autoconnect: bool = True, + pragmas: dict[str, Any] | None = ..., + ) -> None: ... + def adapter(self, python_type: type[Any]) -> Callable[[Callable[_P, _T]], Callable[_P, _T]]: ... + def atomic(self, lock: _IsolationLevel | None = None) -> Atomic: ... + def attach(self, filename: str, name: str) -> None: ... + def authorizer(self, fn: Callable[[int, str, str, str], int]) -> None: ... + def autocommit(self) -> int: ... + def backup( + self, + dest: Connection, + pages: int | None = None, + name: str | None = None, + progress: Callable[[int, int, bool], None] | None = None, + src_name: str | None = None, + ) -> None: ... + def backup_to_file( + self, + filename: str, + pages: int | None = None, + name: str | None = None, + progress: Callable[[int, int, bool], None] | None = None, + src_name: str | None = None, + ) -> None: ... + def begin(self, lock: _IsolationLevel = None) -> None: ... + def blob_open(self, table: str, column: str, rowid: int, read_only: bool = False, database: str | None = None) -> Blob: ... + def changes(self) -> int: ... + def checkpoint( + self, full: bool = False, truncate: bool = False, restart: bool = False, name: str | Buffer | None = None + ) -> tuple[int, int]: ... + def close(self) -> bool: ... + def commit(self, begin: bool = True): ... + def commit_hook(self, fn: Callable[[], None]) -> None: ... + def connect(self) -> bool: ... + def converter(self, data_type: str) -> Callable[[Callable[_P, _T]], Callable[_P, _T]]: ... + def create_aggregate( + self, agg: Callable[..., Any], name: str | Buffer | None = None, nargs: int = -1, deterministic: bool = True + ) -> None: ... + def create_collation(self, fn: Callable[[str, str], int], name: str | Buffer | None = None) -> None: ... + def create_function(self, fn, name: str | Buffer | None = None, nargs: int = -1, deterministic: bool = True) -> None: ... + def create_window_function( + self, agg: Callable[..., Any], name: str | Buffer | None = None, nargs: int = -1, deterministic: bool = True + ): ... + def cursor(self) -> Cursor: ... + def database_list(self) -> list[tuple[str, str]]: ... + def db_config(self, op: int, setting: int | None = None) -> int: ... + def detach(self, name: str) -> None: ... + def execute(self, sql: str, params: _Parameters | None = ...) -> Cursor: ... + def execute_one(self, sql: str, params: _Parameters | None = ...) -> Row | tuple[Any, ...] | None: ... + def execute_scalar(self, sql: str, params: _Parameters | None = ...) -> int | None: ... + def execute_simple(self, sql: str, callback: Callable[..., Any] = ...) -> None: ... + def executemany(self, sql: str, params: Sequence[_Parameters]) -> Cursor: ... + def executescript(self, sql: str) -> Cursor: ... + def file_control(self, op: int, val: int, name: str | Buffer | None = None): ... + def finalize_statements(self) -> None: ... + def get_columns(self) -> list[Column]: ... + def get_foreign_keys(self, table: str, database: str | None = None) -> list[ForeignKey]: ... + def get_foreign_keys_enabled(self) -> int: ... + def get_indexes(self, table: str, database: str | None = None) -> list[Index]: ... + def get_load_extension(self) -> int: ... + def get_primary_keys(self, table: str, database: str | None = None) -> list[str]: ... + def get_stmt_usage(self) -> tuple[int, int]: ... + def get_tables(self, database: str | None = None) -> list[str]: ... + def get_triggers_enabled(self) -> int: ... + def get_views(self, database: str | None = None) -> list[View]: ... + def getlimit(self, category: int) -> int: ... + def interrupt(self) -> None: ... + def is_closed(self) -> bool: ... + def last_insert_rowid(self) -> int: ... + def load_extension(self, name: str | Buffer) -> None: ... + def optimize( + self, + debug: bool = False, + run_tables: bool = True, + set_limit: bool = True, + check_table_sizes: bool = False, + dry_run: bool = False, + ) -> Cursor: ... + def pragma(self, key: str, value: Any = ..., database: str | None = None, multi: bool = False) -> None: ... + def progress(self, fn: Callable[[int, int, bool], None], n: int = 1) -> None: ... + def register_adapter(self, python_type: type[Any], fn: Callable[..., Any]) -> None: ... + def register_converter(self, data_type: str, fn: Callable[..., Any]) -> None: ... + def register_type( + self, + data_type: str | None = None, + converter: Callable[..., Any] | None = None, + python_type: type[Any] | None = None, + adapter: Callable[..., Any] | None = None, + ) -> None: ... + def rollback(self) -> None: ... + def rollback_hook(self, fn: Callable[[], Any] | None) -> None: ... + def savepoint(self, sid: str | None = None) -> Savepoint: ... + def set_autocheckpoint(self, n: int) -> None: ... + def set_busy_handler(self, timeout: float = 5.0) -> None: ... + def set_foreign_keys_enabled(self, enabled: int) -> int: ... + def set_load_extension(self, enabled: int) -> int: ... + def set_main_db_name(self, name: str) -> None: ... + def set_shared_cache(self, enabled: int) -> int: ... + def set_triggers_enabled(self, enabled: int) -> int: ... + def setlimit(self, category: int, limit: int) -> int: ... + def status(self, flag: int) -> tuple[int, int]: ... + def table_column_metadata(self, table: str | bytes, column: str | bytes, database: str | None = None) -> ColumnMetadata: ... + def total_changes(self) -> int: ... + def trace(self, fn: Callable[[int, int, str, int], Any], mask: int = 2) -> None: ... + def transaction(self, lock: _IsolationLevel = None) -> Transaction: ... + def unregister_adapter(self, python_type: type[Any]) -> bool: ... + def unregister_converter(self, data_type: str) -> bool: ... + def update_hook(self, fn: Callable[[_Query, str, str, int], Any] | None) -> None: ... + def __enter__(self) -> Self: ... + def __exit__(self, type: type[BaseException] | None, value: BaseException | None, traceback: types.TracebackType | None): ... + def __reduce__(self): ... + +@final +class Cursor: + conn: Connection + description: tuple[str, ...] + lastrowid: int | None + row_factory: Callable[..., Row] | Callable[..., Any] + rowcount: int + + def __init__(self, conn: Connection) -> None: ... + def close(self) -> None: ... + def columns(self) -> list[str]: ... + def execute(self, sql: str, params: _Parameters | None = None) -> Self: ... + def executemany(self, sql: str, params: Sequence[_Parameters] | None = None) -> Self: ... + def executescript(self, sql: str) -> Self: ... + def fetchall(self) -> list[Any | tuple[Any, ...]]: ... + def fetchone(self) -> tuple[Any, ...] | None: ... + def scalar(self) -> Any | None: ... + def __enter__(self) -> Self: ... + def __exit__(self, type: type[BaseException] | None, value: BaseException | None, traceback: types.TracebackType | None): ... + def __iter__(self) -> Self: ... + def __next__(self) -> Row | Any: ... + def __reduce__(self): ... + +class Row: + def as_dict(self) -> dict[str, Any]: ... + @overload + def get(self, key: str | int) -> Any | None: ... + @overload + def get(self, key: str | int, default: _T) -> Any | _T: ... + def get(self, key: str | int, default: _T | None = ...) -> Any | _T | None: ... + def items(self) -> list[tuple[str, Any]]: ... + def keys(self) -> list[str]: ... + def values(self) -> list[Any]: ... + def __contains__(self, key: str | int) -> bool: ... + def __eq__(self, other: object) -> bool: ... + def __ge__(self, other: object) -> bool: ... + def __getattr__(self, name: str) -> Any: ... + def __getitem__(self, key: int | str) -> Any: ... + def __gt__(self, other: object) -> bool: ... + def __hash__(self) -> int: ... + def __iter__(self) -> Iterator[Any]: ... + def __le__(self, other: object) -> bool: ... + def __len__(self) -> int: ... + def __lt__(self, other: object) -> bool: ... + def __ne__(self, other: object) -> bool: ... + def __reduce__(self): ... + +class Savepoint(_callable_context_manager): + def __init__(self, conn: Connection, sid: str | None = None) -> None: ... + def commit(self, begin: bool = True) -> None: ... + def rollback(self) -> None: ... + def __enter__(self) -> Self: ... + def __exit__(self, type: type[BaseException] | None, value: BaseException | None, traceback: types.TracebackType | None): ... + def __reduce__(self): ... + +class TableFunction: + _ncols: ClassVar[int] = ... + _nparams: ClassVar[int] = ... + columns: ClassVar[None] = ... + name: ClassVar[None] = ... + params: ClassVar[None] = ... + print_tracebacks: ClassVar[bool] = ... + @classmethod + def get_table_columns_declaration(cls) -> str: ... + @classmethod + def register(cls, conn: Connection) -> None: ... + def delete(self, rowid: int): ... + def initialize(self, **filters): ... + def insert(self, rowid: int, values: list[Any]): ... + def iterate(self, idx: int) -> tuple[Any, ...]: ... + def update(self, old_rowid: int, new_rowid: int, values: list[Any]): ... + +class Transaction(_callable_context_manager): + def __init__(self, conn: Connection, lock: _IsolationLevel = None) -> None: ... + def commit(self, begin: bool = True) -> None: ... + def rollback(self, begin: bool = True) -> None: ... + def __enter__(self) -> Self: ... + def __exit__(self, type: type[BaseException] | None, value: BaseException | None, traceback: types.TracebackType | None): ... + def __reduce__(self): ... + +class _callable_context_manager: + def __call__(self, fn: Callable[_P, _T]) -> Callable[_P, _T]: ... + def __reduce__(self): ... + +class median: + def __init__(self) -> None: ... + def finalize(self) -> float: ... + def inverse(self, item: float) -> None: ... + def step(self, item: float) -> None: ... + def value(self) -> float: ... + def __reduce__(self): ... diff --git a/stubs/cysqlite/cysqlite/aio.pyi b/stubs/cysqlite/cysqlite/aio.pyi new file mode 100644 index 000000000000..91341fa15669 --- /dev/null +++ b/stubs/cysqlite/cysqlite/aio.pyi @@ -0,0 +1,130 @@ +import asyncio +import queue +import sys +import types +from collections.abc import Callable, Mapping, Sequence +from typing import Any, Literal, TypeAlias, TypedDict + +from cysqlite._cysqlite import ( + Atomic as Atomic, + Connection as Connection, + Cursor as Cursor, + Row as Row, + Savepoint as Savepoint, + Transaction as Transaction, +) + +if sys.version_info >= (3, 13): + from typing import Unpack +else: + from typing_extensions import Unpack + +if sys.version_info >= (3, 12): + from collections.abc import Buffer +else: + from typing_extensions import Buffer + +if sys.version_info >= (3, 11): + from typing import Self +else: + from typing_extensions import Self + +_SqliteData: TypeAlias = str | Buffer | int | float | None +_AdaptedInputData: TypeAlias = _SqliteData | Any +_Parameters: TypeAlias = Sequence[_AdaptedInputData] | Mapping[str, _AdaptedInputData] +_IsolationLevel: TypeAlias = Literal["DEFERRED", "EXCLUSIVE", "IMMEDIATE"] | None + +class _BackupKwargs(TypedDict, total=False): + pages: int | None + name: str | None + progress: Callable[[int, int, bool], None] | None + src_name: str | None + +class _ConnectKwargs(TypedDict, total=False): + flags: int | None + timeout: float + vfs: Any | None + uri: bool + cached_statements: int + extensions: bool + row_factory: Callable[..., Row] | Callable[..., Any] | None + autoconnect: bool + pragmas: dict[str, Any] | None + +class _CheckPointKwargs(TypedDict, total=False): + full: bool + truncate: bool + restart: bool + name: str | Buffer | None + +SHUTDOWN: object + +class AsyncConnection: + conn: Connection + loop: asyncio.AbstractEventLoop + queue: queue.SimpleQueue[tuple[Callable[[], Any]]] + def __init__(self, conn: Connection, loop: asyncio.AbstractEventLoop) -> None: ... + def __del__(self) -> None: ... + async def execute(self, sql: str, params: _Parameters | None = None) -> AsyncCursor: ... + async def executemany(self, sql: str, seq_of_params: Sequence[_Parameters]) -> AsyncCursor: ... + async def executescript(self, sql: str) -> AsyncCursor: ... + async def execute_one(self, sql: str, params: _Parameters | None = None) -> Row | tuple[Any, ...] | None: ... + async def execute_scalar(self, sql: str, params: _Parameters | None = None) -> int: ... + async def commit(self) -> None: ... + async def rollback(self) -> None: ... + async def close(self) -> bool | None: ... + async def last_insert_rowid(self) -> int: ... + async def backup(self, dest: AsyncConnection, **kwargs: Unpack[_BackupKwargs]) -> None: ... + async def backup_to_file(self, filename: str, **kwargs: Unpack[_BackupKwargs]) -> None: ... + async def checkpoint(self, **kwargs: Unpack[_CheckPointKwargs]) -> tuple[int, int]: ... + def transaction(self, lock: _IsolationLevel | None = None) -> AsyncTransaction: ... + def savepoint(self, sid: str | None = None) -> AsyncSavepoint: ... + def atomic(self, lock: str | _IsolationLevel | None = None) -> AsyncAtomic: ... + @property + def in_transaction(self) -> bool: ... + # pragma is the exact same as it's backend. + def pragma(self, key: str, value: Any = ..., database: str | None = None, multi: bool = False) -> None: ... + async def __aenter__(self) -> Self: ... + async def __aexit__( + self, exc_type: type[BaseException] | None, exc_val: BaseException | None, exc_tb: types.TracebackType | None + ) -> None: ... + +class AsyncCursor: + conn: Connection + def __init__(self, conn: AsyncConnection, cursor: Cursor) -> None: ... + async def fetchone(self) -> tuple[Any, ...] | None: ... + async def fetchall(self) -> list[Any | tuple[Any, ...]]: ... + async def scalar(self) -> int: ... + @property + def description(self) -> tuple[Any, ...]: ... + @property + def lastrowid(self) -> int: ... + @property + def rowcount(self) -> int: ... + def __aiter__(self) -> Self: ... + async def fetchmany(self, size: int = 100, constructor: type[Sequence[Row | Any]] = ...): ... + async def __anext__(self) -> Row | Any: ... + +class _AsyncTransactionWrapper: + conn: AsyncConnection + def __init__(self, conn: AsyncConnection, *args: Any) -> None: ... + def get_wrapper(self) -> None: ... + async def __aenter__(self) -> Self: ... + async def __aexit__( + self, exc_type: type[BaseException] | None, exc_val: BaseException | None, exc_tb: types.TracebackType | None + ) -> None: ... + async def commit(self, *args) -> None: ... + async def rollback(self, *args) -> None: ... + +class AsyncTransaction(_AsyncTransactionWrapper): + def get_wrapper(self) -> Transaction: ... + +class AsyncSavepoint(_AsyncTransactionWrapper): + def get_wrapper(self) -> Savepoint: ... + +class AsyncAtomic(_AsyncTransactionWrapper): + def get_wrapper(self) -> Atomic: ... + async def commit(self, *args) -> None: ... + async def rollback(self, *args) -> None: ... + +def connect(database: str, **kwargs: Unpack[_ConnectKwargs]) -> AsyncConnection: ... diff --git a/stubs/cysqlite/cysqlite/exceptions.pyi b/stubs/cysqlite/cysqlite/exceptions.pyi new file mode 100644 index 000000000000..6f347f1ca711 --- /dev/null +++ b/stubs/cysqlite/cysqlite/exceptions.pyi @@ -0,0 +1,11 @@ +class SqliteError(Exception): ... +class Error(SqliteError): ... +class Warning(SqliteError): ... +class InterfaceError(Error): ... +class DatabaseError(Error): ... +class DataError(DatabaseError): ... +class OperationalError(DatabaseError): ... +class IntegrityError(DatabaseError): ... +class InternalError(DatabaseError): ... +class ProgrammingError(DatabaseError): ... +class NotSupportedError(DatabaseError): ... diff --git a/stubs/cysqlite/cysqlite/metadata.pyi b/stubs/cysqlite/cysqlite/metadata.pyi new file mode 100644 index 000000000000..3521ba5fe291 --- /dev/null +++ b/stubs/cysqlite/cysqlite/metadata.pyi @@ -0,0 +1,41 @@ +import sys +from typing import Any, NamedTuple + +if sys.version_info >= (3, 12): + from collections.abc import Buffer +else: + from typing_extensions import Buffer + +class Index(NamedTuple): + name: str + sql: str + columns: list[str] + unique: bool + table: str + +class Column(NamedTuple): + name: str + data_type: str + null: bool + primary_key: bool + table: str + default: Any | None + +class ForeignKey(NamedTuple): + column: str + dest_table: str + dest_column: str + table: str + +class View(NamedTuple): + name: str + sql: str + +class ColumnMetadata(NamedTuple): + table: str | Buffer + column: str | Buffer + datatype: str + collation: str + not_null: bool + primary_key: bool + auto_increment: bool diff --git a/stubs/cysqlite/cysqlite/utils.pyi b/stubs/cysqlite/cysqlite/utils.pyi new file mode 100644 index 000000000000..de27e45e866f --- /dev/null +++ b/stubs/cysqlite/cysqlite/utils.pyi @@ -0,0 +1,5 @@ +from typing import Literal + +from ._cysqlite import Connection + +def slow_query_log(conn: Connection, threshold_ms: int = 50, logger=None, level=30, expand_sql: bool = True) -> Literal[True]: ... From 58e34db86753729240fc463c1947c4658171cdf3 Mon Sep 17 00:00:00 2001 From: Vizonex Date: Tue, 10 Mar 2026 14:13:47 -0500 Subject: [PATCH 02/38] fix get_wrapper --- stubs/cysqlite/cysqlite/aio.pyi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stubs/cysqlite/cysqlite/aio.pyi b/stubs/cysqlite/cysqlite/aio.pyi index 91341fa15669..56d35eddfcd9 100644 --- a/stubs/cysqlite/cysqlite/aio.pyi +++ b/stubs/cysqlite/cysqlite/aio.pyi @@ -108,7 +108,7 @@ class AsyncCursor: class _AsyncTransactionWrapper: conn: AsyncConnection def __init__(self, conn: AsyncConnection, *args: Any) -> None: ... - def get_wrapper(self) -> None: ... + def get_wrapper(self) -> Any: ... async def __aenter__(self) -> Self: ... async def __aexit__( self, exc_type: type[BaseException] | None, exc_val: BaseException | None, exc_tb: types.TracebackType | None From 4a8c237401cae3913af9199669c97705004b5cb0 Mon Sep 17 00:00:00 2001 From: Vizonex Date: Tue, 10 Mar 2026 14:16:03 -0500 Subject: [PATCH 03/38] remove overload --- stubs/cysqlite/cysqlite/_cysqlite.pyi | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/stubs/cysqlite/cysqlite/_cysqlite.pyi b/stubs/cysqlite/cysqlite/_cysqlite.pyi index 24583b01f3c3..23a777d55c22 100644 --- a/stubs/cysqlite/cysqlite/_cysqlite.pyi +++ b/stubs/cysqlite/cysqlite/_cysqlite.pyi @@ -1,7 +1,7 @@ import sys import types from collections.abc import Callable, Iterable, Iterator, Mapping, Sequence -from typing import Any, ClassVar, Literal, NoReturn, ParamSpec, TypeAlias, TypeVar, final, overload +from typing import Any, ClassVar, Literal, NoReturn, ParamSpec, TypeAlias, TypeVar, final from cysqlite.metadata import Column, ColumnMetadata, ForeignKey, Index, View @@ -262,10 +262,6 @@ class Cursor: class Row: def as_dict(self) -> dict[str, Any]: ... - @overload - def get(self, key: str | int) -> Any | None: ... - @overload - def get(self, key: str | int, default: _T) -> Any | _T: ... def get(self, key: str | int, default: _T | None = ...) -> Any | _T | None: ... def items(self) -> list[tuple[str, Any]]: ... def keys(self) -> list[str]: ... From c8da5d6d50ffb746af110504eaa8a49bca011934 Mon Sep 17 00:00:00 2001 From: Vizonex Date: Tue, 10 Mar 2026 14:23:41 -0500 Subject: [PATCH 04/38] add disjoint_base to cython compiled classes --- stubs/cysqlite/cysqlite/_cysqlite.pyi | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/stubs/cysqlite/cysqlite/_cysqlite.pyi b/stubs/cysqlite/cysqlite/_cysqlite.pyi index 23a777d55c22..9157a42e6ff1 100644 --- a/stubs/cysqlite/cysqlite/_cysqlite.pyi +++ b/stubs/cysqlite/cysqlite/_cysqlite.pyi @@ -2,6 +2,7 @@ import sys import types from collections.abc import Callable, Iterable, Iterator, Mapping, Sequence from typing import Any, ClassVar, Literal, NoReturn, ParamSpec, TypeAlias, TypeVar, final +from typing_extensions import disjoint_base from cysqlite.metadata import Column, ColumnMetadata, ForeignKey, Index, View @@ -60,7 +61,7 @@ def status(flag: int) -> tuple[int, int]: ... threadsafety: int def vfs_list() -> list[str]: ... - +@disjoint_base class Atomic(_callable_context_manager): txn: Transaction | Savepoint def __init__(self, conn: Connection, lock: _IsolationLevel = None) -> None: ... @@ -68,6 +69,7 @@ class Atomic(_callable_context_manager): def __exit__(self, type: type[BaseException] | None, value: BaseException | None, traceback: types.TracebackType | None): ... def __reduce__(self): ... +@disjoint_base class Blob: closed: bool def __init__( @@ -102,6 +104,7 @@ class Blob: def __setitem__(self, key: int | slice[int, int, int] | slice[int, int], value: Buffer) -> None: ... @final +@disjoint_base class Connection(_callable_context_manager): cached_statements: int callback_error: BaseException | None @@ -238,6 +241,7 @@ class Connection(_callable_context_manager): def __reduce__(self): ... @final +@disjoint_base class Cursor: conn: Connection description: tuple[str, ...] @@ -260,6 +264,7 @@ class Cursor: def __next__(self) -> Row | Any: ... def __reduce__(self): ... +@disjoint_base class Row: def as_dict(self) -> dict[str, Any]: ... def get(self, key: str | int, default: _T | None = ...) -> Any | _T | None: ... @@ -280,6 +285,7 @@ class Row: def __ne__(self, other: object) -> bool: ... def __reduce__(self): ... +@disjoint_base class Savepoint(_callable_context_manager): def __init__(self, conn: Connection, sid: str | None = None) -> None: ... def commit(self, begin: bool = True) -> None: ... @@ -288,6 +294,7 @@ class Savepoint(_callable_context_manager): def __exit__(self, type: type[BaseException] | None, value: BaseException | None, traceback: types.TracebackType | None): ... def __reduce__(self): ... +@disjoint_base class TableFunction: _ncols: ClassVar[int] = ... _nparams: ClassVar[int] = ... @@ -305,6 +312,7 @@ class TableFunction: def iterate(self, idx: int) -> tuple[Any, ...]: ... def update(self, old_rowid: int, new_rowid: int, values: list[Any]): ... +@disjoint_base class Transaction(_callable_context_manager): def __init__(self, conn: Connection, lock: _IsolationLevel = None) -> None: ... def commit(self, begin: bool = True) -> None: ... @@ -313,10 +321,12 @@ class Transaction(_callable_context_manager): def __exit__(self, type: type[BaseException] | None, value: BaseException | None, traceback: types.TracebackType | None): ... def __reduce__(self): ... +@disjoint_base class _callable_context_manager: def __call__(self, fn: Callable[_P, _T]) -> Callable[_P, _T]: ... def __reduce__(self): ... +@disjoint_base class median: def __init__(self) -> None: ... def finalize(self) -> float: ... From 67491fa18579ab65cb06363b3f4c4bfbb763bfa3 Mon Sep 17 00:00:00 2001 From: Vizonex Date: Tue, 10 Mar 2026 14:50:55 -0500 Subject: [PATCH 05/38] add allowlist and ensure stubtest passes --- stubs/cysqlite/@tests/stubtest_allowlist.txt | 17 +++++++++++++++++ stubs/cysqlite/cysqlite/_cysqlite.pyi | 12 +++++++----- stubs/cysqlite/cysqlite/aio.pyi | 9 +-------- 3 files changed, 25 insertions(+), 13 deletions(-) create mode 100644 stubs/cysqlite/@tests/stubtest_allowlist.txt diff --git a/stubs/cysqlite/@tests/stubtest_allowlist.txt b/stubs/cysqlite/@tests/stubtest_allowlist.txt new file mode 100644 index 000000000000..abb6d4b7deee --- /dev/null +++ b/stubs/cysqlite/@tests/stubtest_allowlist.txt @@ -0,0 +1,17 @@ +cysqlite._cysqlite.__test__ +cysqlite.Connection +cysqlite.Connection.commit +cysqlite.Connection.execute_simple +cysqlite.Connection.executemany +cysqlite.Connection.get_columns +cysqlite.Connection.pragma +cysqlite._cysqlite.Connection +cysqlite._cysqlite.Connection.commit +cysqlite._cysqlite.Connection.execute_simple +cysqlite._cysqlite.Connection.executemany +cysqlite._cysqlite.Connection.get_columns +cysqlite._cysqlite.Connection.pragma +cysqlite._cysqlite.Cursor +cysqlite._cysqlite.Cursor.executemany +cysqlite._cysqlite.__reduce_cython__ +cysqlite._cysqlite.__setstate_cython__ diff --git a/stubs/cysqlite/cysqlite/_cysqlite.pyi b/stubs/cysqlite/cysqlite/_cysqlite.pyi index 9157a42e6ff1..9b8e08201570 100644 --- a/stubs/cysqlite/cysqlite/_cysqlite.pyi +++ b/stubs/cysqlite/cysqlite/_cysqlite.pyi @@ -231,7 +231,7 @@ class Connection(_callable_context_manager): def status(self, flag: int) -> tuple[int, int]: ... def table_column_metadata(self, table: str | bytes, column: str | bytes, database: str | None = None) -> ColumnMetadata: ... def total_changes(self) -> int: ... - def trace(self, fn: Callable[[int, int, str, int], Any], mask: int = 2) -> None: ... + def trace(self, fn: Callable[[int, int, str, int], Any], mask: int = 2, expand_sql: bool = True) -> None: ... def transaction(self, lock: _IsolationLevel = None) -> Transaction: ... def unregister_adapter(self, python_type: type[Any]) -> bool: ... def unregister_converter(self, data_type: str) -> bool: ... @@ -249,7 +249,7 @@ class Cursor: row_factory: Callable[..., Row] | Callable[..., Any] rowcount: int - def __init__(self, conn: Connection) -> None: ... + def __new__(cls, conn: Connection) -> Self: ... def close(self) -> None: ... def columns(self) -> list[str]: ... def execute(self, sql: str, params: _Parameters | None = None) -> Self: ... @@ -294,7 +294,6 @@ class Savepoint(_callable_context_manager): def __exit__(self, type: type[BaseException] | None, value: BaseException | None, traceback: types.TracebackType | None): ... def __reduce__(self): ... -@disjoint_base class TableFunction: _ncols: ClassVar[int] = ... _nparams: ClassVar[int] = ... @@ -321,16 +320,19 @@ class Transaction(_callable_context_manager): def __exit__(self, type: type[BaseException] | None, value: BaseException | None, traceback: types.TracebackType | None): ... def __reduce__(self): ... -@disjoint_base class _callable_context_manager: def __call__(self, fn: Callable[_P, _T]) -> Callable[_P, _T]: ... def __reduce__(self): ... + def __reduce_cython__(self): ... + def __setstate_cython__(self, __pyx_state: Any, /): ... @disjoint_base class median: - def __init__(self) -> None: ... + def __init__(self, *args) -> None: ... def finalize(self) -> float: ... def inverse(self, item: float) -> None: ... def step(self, item: float) -> None: ... def value(self) -> float: ... def __reduce__(self): ... + def __reduce_cython__(self): ... + def __setstate_cython__(self, __pyx_state: Any, /): ... diff --git a/stubs/cysqlite/cysqlite/aio.pyi b/stubs/cysqlite/cysqlite/aio.pyi index 56d35eddfcd9..f3d368c8fb59 100644 --- a/stubs/cysqlite/cysqlite/aio.pyi +++ b/stubs/cysqlite/cysqlite/aio.pyi @@ -5,14 +5,7 @@ import types from collections.abc import Callable, Mapping, Sequence from typing import Any, Literal, TypeAlias, TypedDict -from cysqlite._cysqlite import ( - Atomic as Atomic, - Connection as Connection, - Cursor as Cursor, - Row as Row, - Savepoint as Savepoint, - Transaction as Transaction, -) +from ._cysqlite import Atomic, Connection, Cursor, Row, Savepoint, Transaction if sys.version_info >= (3, 13): from typing import Unpack From d8077677435b974afa1b00dc57bd2437a6b7f4da Mon Sep 17 00:00:00 2001 From: Vizonex Date: Tue, 10 Mar 2026 14:58:08 -0500 Subject: [PATCH 06/38] add bool | None to __exit__ return values --- stubs/cysqlite/cysqlite/_cysqlite.pyi | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/stubs/cysqlite/cysqlite/_cysqlite.pyi b/stubs/cysqlite/cysqlite/_cysqlite.pyi index 9b8e08201570..29716cd221ad 100644 --- a/stubs/cysqlite/cysqlite/_cysqlite.pyi +++ b/stubs/cysqlite/cysqlite/_cysqlite.pyi @@ -66,7 +66,9 @@ class Atomic(_callable_context_manager): txn: Transaction | Savepoint def __init__(self, conn: Connection, lock: _IsolationLevel = None) -> None: ... def __enter__(self) -> Transaction | Savepoint: ... - def __exit__(self, type: type[BaseException] | None, value: BaseException | None, traceback: types.TracebackType | None): ... + def __exit__( + self, type: type[BaseException] | None, value: BaseException | None, traceback: types.TracebackType | None + ) -> bool | None: ... def __reduce__(self): ... @disjoint_base @@ -95,7 +97,9 @@ class Blob: def writelines(self, lines: Iterable[str | Buffer]) -> int: ... def __delitem__(self, other: int) -> None: ... def __enter__(self) -> Self: ... - def __exit__(self, type: type[BaseException] | None, value: BaseException | None, traceback: types.TracebackType | None): ... + def __exit__( + self, type: type[BaseException] | None, value: BaseException | None, traceback: types.TracebackType | None + ) -> bool | None: ... def __getitem__(self, key: int) -> bytes: ... def __iter__(self) -> Self: ... def __len__(self) -> int: ... @@ -237,7 +241,9 @@ class Connection(_callable_context_manager): def unregister_converter(self, data_type: str) -> bool: ... def update_hook(self, fn: Callable[[_Query, str, str, int], Any] | None) -> None: ... def __enter__(self) -> Self: ... - def __exit__(self, type: type[BaseException] | None, value: BaseException | None, traceback: types.TracebackType | None): ... + def __exit__( + self, type: type[BaseException] | None, value: BaseException | None, traceback: types.TracebackType | None + ) -> bool | None: ... def __reduce__(self): ... @final @@ -259,7 +265,9 @@ class Cursor: def fetchone(self) -> tuple[Any, ...] | None: ... def scalar(self) -> Any | None: ... def __enter__(self) -> Self: ... - def __exit__(self, type: type[BaseException] | None, value: BaseException | None, traceback: types.TracebackType | None): ... + def __exit__( + self, type: type[BaseException] | None, value: BaseException | None, traceback: types.TracebackType | None + ) -> bool | None: ... def __iter__(self) -> Self: ... def __next__(self) -> Row | Any: ... def __reduce__(self): ... @@ -291,7 +299,9 @@ class Savepoint(_callable_context_manager): def commit(self, begin: bool = True) -> None: ... def rollback(self) -> None: ... def __enter__(self) -> Self: ... - def __exit__(self, type: type[BaseException] | None, value: BaseException | None, traceback: types.TracebackType | None): ... + def __exit__( + self, type: type[BaseException] | None, value: BaseException | None, traceback: types.TracebackType | None + ) -> bool | None: ... def __reduce__(self): ... class TableFunction: @@ -317,7 +327,9 @@ class Transaction(_callable_context_manager): def commit(self, begin: bool = True) -> None: ... def rollback(self, begin: bool = True) -> None: ... def __enter__(self) -> Self: ... - def __exit__(self, type: type[BaseException] | None, value: BaseException | None, traceback: types.TracebackType | None): ... + def __exit__( + self, type: type[BaseException] | None, value: BaseException | None, traceback: types.TracebackType | None + ) -> bool | None: ... def __reduce__(self): ... class _callable_context_manager: From 0d559afafc69f1883eb80244e9ed16d8a2e614a4 Mon Sep 17 00:00:00 2001 From: Vizonex Date: Tue, 10 Mar 2026 15:02:13 -0500 Subject: [PATCH 07/38] fix pyright tests --- stubs/cysqlite/cysqlite/_cysqlite.pyi | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/stubs/cysqlite/cysqlite/_cysqlite.pyi b/stubs/cysqlite/cysqlite/_cysqlite.pyi index 29716cd221ad..19e4172c88f1 100644 --- a/stubs/cysqlite/cysqlite/_cysqlite.pyi +++ b/stubs/cysqlite/cysqlite/_cysqlite.pyi @@ -69,7 +69,7 @@ class Atomic(_callable_context_manager): def __exit__( self, type: type[BaseException] | None, value: BaseException | None, traceback: types.TracebackType | None ) -> bool | None: ... - def __reduce__(self): ... + def __reduce__(self) -> Any: ... @disjoint_base class Blob: @@ -104,7 +104,7 @@ class Blob: def __iter__(self) -> Self: ... def __len__(self) -> int: ... def __next__(self) -> bytes: ... - def __reduce__(self): ... + def __reduce__(self) -> Any: ... def __setitem__(self, key: int | slice[int, int, int] | slice[int, int], value: Buffer) -> None: ... @final @@ -244,7 +244,7 @@ class Connection(_callable_context_manager): def __exit__( self, type: type[BaseException] | None, value: BaseException | None, traceback: types.TracebackType | None ) -> bool | None: ... - def __reduce__(self): ... + def __reduce__(self) -> Any: ... @final @disjoint_base @@ -270,7 +270,7 @@ class Cursor: ) -> bool | None: ... def __iter__(self) -> Self: ... def __next__(self) -> Row | Any: ... - def __reduce__(self): ... + def __reduce__(self) -> Any: ... @disjoint_base class Row: @@ -291,7 +291,7 @@ class Row: def __len__(self) -> int: ... def __lt__(self, other: object) -> bool: ... def __ne__(self, other: object) -> bool: ... - def __reduce__(self): ... + def __reduce__(self) -> Any: ... @disjoint_base class Savepoint(_callable_context_manager): @@ -302,7 +302,7 @@ class Savepoint(_callable_context_manager): def __exit__( self, type: type[BaseException] | None, value: BaseException | None, traceback: types.TracebackType | None ) -> bool | None: ... - def __reduce__(self): ... + def __reduce__(self) -> Any: ... class TableFunction: _ncols: ClassVar[int] = ... @@ -330,13 +330,13 @@ class Transaction(_callable_context_manager): def __exit__( self, type: type[BaseException] | None, value: BaseException | None, traceback: types.TracebackType | None ) -> bool | None: ... - def __reduce__(self): ... + def __reduce__(self) -> Any: ... class _callable_context_manager: def __call__(self, fn: Callable[_P, _T]) -> Callable[_P, _T]: ... - def __reduce__(self): ... - def __reduce_cython__(self): ... - def __setstate_cython__(self, __pyx_state: Any, /): ... + def __reduce__(self) -> Any: ... + def __reduce_cython__(self) -> Any: ... + def __setstate_cython__(self, __pyx_state: Any, /) -> None: ... @disjoint_base class median: @@ -345,6 +345,6 @@ class median: def inverse(self, item: float) -> None: ... def step(self, item: float) -> None: ... def value(self) -> float: ... - def __reduce__(self): ... - def __reduce_cython__(self): ... - def __setstate_cython__(self, __pyx_state: Any, /): ... + def __reduce__(self) -> Any: ... + def __reduce_cython__(self) -> Any: ... + def __setstate_cython__(self, __pyx_state: Any, /) -> None: ... From 68850b4a6d640984969789887a95108c93e9840d Mon Sep 17 00:00:00 2001 From: Vizonex Date: Wed, 11 Mar 2026 14:16:47 -0500 Subject: [PATCH 08/38] more fixes and fill in missing items --- stubs/cysqlite/cysqlite/_cysqlite.pyi | 20 +++++++++++--------- stubs/cysqlite/cysqlite/aio.pyi | 2 +- stubs/cysqlite/cysqlite/utils.pyi | 4 +++- 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/stubs/cysqlite/cysqlite/_cysqlite.pyi b/stubs/cysqlite/cysqlite/_cysqlite.pyi index 19e4172c88f1..b3d3ac1fed72 100644 --- a/stubs/cysqlite/cysqlite/_cysqlite.pyi +++ b/stubs/cysqlite/cysqlite/_cysqlite.pyi @@ -163,7 +163,7 @@ class Connection(_callable_context_manager): self, full: bool = False, truncate: bool = False, restart: bool = False, name: str | Buffer | None = None ) -> tuple[int, int]: ... def close(self) -> bool: ... - def commit(self, begin: bool = True): ... + def commit(self, begin: bool = True) -> None: ... def commit_hook(self, fn: Callable[[], None]) -> None: ... def connect(self) -> bool: ... def converter(self, data_type: str) -> Callable[[Callable[_P, _T]], Callable[_P, _T]]: ... @@ -171,10 +171,12 @@ class Connection(_callable_context_manager): self, agg: Callable[..., Any], name: str | Buffer | None = None, nargs: int = -1, deterministic: bool = True ) -> None: ... def create_collation(self, fn: Callable[[str, str], int], name: str | Buffer | None = None) -> None: ... - def create_function(self, fn, name: str | Buffer | None = None, nargs: int = -1, deterministic: bool = True) -> None: ... + def create_function( + self, fn: Callable[..., Any], name: str | Buffer | None = None, nargs: int = -1, deterministic: bool = True + ) -> None: ... def create_window_function( self, agg: Callable[..., Any], name: str | Buffer | None = None, nargs: int = -1, deterministic: bool = True - ): ... + ) -> None: ... def cursor(self) -> Cursor: ... def database_list(self) -> list[tuple[str, str]]: ... def db_config(self, op: int, setting: int | None = None) -> int: ... @@ -185,7 +187,7 @@ class Connection(_callable_context_manager): def execute_simple(self, sql: str, callback: Callable[..., Any] = ...) -> None: ... def executemany(self, sql: str, params: Sequence[_Parameters]) -> Cursor: ... def executescript(self, sql: str) -> Cursor: ... - def file_control(self, op: int, val: int, name: str | Buffer | None = None): ... + def file_control(self, op: int, val: int, name: str | Buffer | None = None) -> int: ... def finalize_statements(self) -> None: ... def get_columns(self) -> list[Column]: ... def get_foreign_keys(self, table: str, database: str | None = None) -> list[ForeignKey]: ... @@ -315,11 +317,11 @@ class TableFunction: def get_table_columns_declaration(cls) -> str: ... @classmethod def register(cls, conn: Connection) -> None: ... - def delete(self, rowid: int): ... - def initialize(self, **filters): ... - def insert(self, rowid: int, values: list[Any]): ... + def delete(self, rowid: int) -> None: ... + def initialize(self, **filters: Any) -> None: ... + def insert(self, rowid: int, values: list[Any]) -> int: ... def iterate(self, idx: int) -> tuple[Any, ...]: ... - def update(self, old_rowid: int, new_rowid: int, values: list[Any]): ... + def update(self, old_rowid: int, new_rowid: int, values: list[Any]) -> None: ... @disjoint_base class Transaction(_callable_context_manager): @@ -340,7 +342,7 @@ class _callable_context_manager: @disjoint_base class median: - def __init__(self, *args) -> None: ... + def __init__(self, *args: Any) -> None: ... def finalize(self) -> float: ... def inverse(self, item: float) -> None: ... def step(self, item: float) -> None: ... diff --git a/stubs/cysqlite/cysqlite/aio.pyi b/stubs/cysqlite/cysqlite/aio.pyi index f3d368c8fb59..8515f351392b 100644 --- a/stubs/cysqlite/cysqlite/aio.pyi +++ b/stubs/cysqlite/cysqlite/aio.pyi @@ -95,7 +95,7 @@ class AsyncCursor: @property def rowcount(self) -> int: ... def __aiter__(self) -> Self: ... - async def fetchmany(self, size: int = 100, constructor: type[Sequence[Row | Any]] = ...): ... + async def fetchmany(self, size: int = 100, constructor: type[Sequence[Row | Any]] = ...) -> Sequence[Row | Any]: ... async def __anext__(self) -> Row | Any: ... class _AsyncTransactionWrapper: diff --git a/stubs/cysqlite/cysqlite/utils.pyi b/stubs/cysqlite/cysqlite/utils.pyi index de27e45e866f..79a8496852a2 100644 --- a/stubs/cysqlite/cysqlite/utils.pyi +++ b/stubs/cysqlite/cysqlite/utils.pyi @@ -2,4 +2,6 @@ from typing import Literal from ._cysqlite import Connection -def slow_query_log(conn: Connection, threshold_ms: int = 50, logger=None, level=30, expand_sql: bool = True) -> Literal[True]: ... +def slow_query_log( + conn: Connection, threshold_ms: int = 50, logger: str | None = None, level: int = 30, expand_sql: bool = True +) -> Literal[True]: ... From 578e1c81ffff1dd05b54e872a327c09be9bb0138 Mon Sep 17 00:00:00 2001 From: Vizonex Date: Wed, 11 Mar 2026 14:20:02 -0500 Subject: [PATCH 09/38] fix remaining items left in aio.pyi --- stubs/cysqlite/cysqlite/aio.pyi | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/stubs/cysqlite/cysqlite/aio.pyi b/stubs/cysqlite/cysqlite/aio.pyi index 8515f351392b..d034b8ad1586 100644 --- a/stubs/cysqlite/cysqlite/aio.pyi +++ b/stubs/cysqlite/cysqlite/aio.pyi @@ -106,8 +106,8 @@ class _AsyncTransactionWrapper: async def __aexit__( self, exc_type: type[BaseException] | None, exc_val: BaseException | None, exc_tb: types.TracebackType | None ) -> None: ... - async def commit(self, *args) -> None: ... - async def rollback(self, *args) -> None: ... + async def commit(self, *args: Any) -> None: ... + async def rollback(self, *args: Any) -> None: ... class AsyncTransaction(_AsyncTransactionWrapper): def get_wrapper(self) -> Transaction: ... @@ -117,7 +117,7 @@ class AsyncSavepoint(_AsyncTransactionWrapper): class AsyncAtomic(_AsyncTransactionWrapper): def get_wrapper(self) -> Atomic: ... - async def commit(self, *args) -> None: ... - async def rollback(self, *args) -> None: ... + async def commit(self, *args: Any) -> None: ... + async def rollback(self, *args: Any) -> None: ... def connect(database: str, **kwargs: Unpack[_ConnectKwargs]) -> AsyncConnection: ... From dcf8ddde2aee06f96ca9781da546ee18d73e6459 Mon Sep 17 00:00:00 2001 From: Vizonex <114684698+Vizonex@users.noreply.github.com> Date: Thu, 12 Mar 2026 20:46:02 -0500 Subject: [PATCH 10/38] Update stubs/cysqlite/cysqlite/__init__.pyi Co-authored-by: Brian Schubert --- stubs/cysqlite/cysqlite/__init__.pyi | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/stubs/cysqlite/cysqlite/__init__.pyi b/stubs/cysqlite/cysqlite/__init__.pyi index b9746916ea0c..895fa4989971 100644 --- a/stubs/cysqlite/cysqlite/__init__.pyi +++ b/stubs/cysqlite/cysqlite/__init__.pyi @@ -18,8 +18,8 @@ from ._cysqlite import ( ) from .exceptions import * -version: str -__version__: str -version_info: tuple[int, int, int] -apilevel: str -paramstyle: str +version: Final[str] +__version__: Final[str] +version_info: Final[tuple[int, int, int]] +apilevel: Final = "2.0" +paramstyle: Final = "qmark" From a6f758df46d078a38021cadf2d3f3fbcad573105 Mon Sep 17 00:00:00 2001 From: Vizonex <114684698+Vizonex@users.noreply.github.com> Date: Thu, 12 Mar 2026 20:46:42 -0500 Subject: [PATCH 11/38] Update stubs/cysqlite/cysqlite/_cysqlite.pyi Co-authored-by: Brian Schubert --- stubs/cysqlite/cysqlite/_cysqlite.pyi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stubs/cysqlite/cysqlite/_cysqlite.pyi b/stubs/cysqlite/cysqlite/_cysqlite.pyi index b3d3ac1fed72..2fbd04ddac5d 100644 --- a/stubs/cysqlite/cysqlite/_cysqlite.pyi +++ b/stubs/cysqlite/cysqlite/_cysqlite.pyi @@ -54,7 +54,7 @@ def set_singlethread() -> bool: ... def set_stmt_journal_spill(nbytes: int) -> bool: ... sqlite_version: str -sqlite_version_info: tuple[Any, ...] +sqlite_version_info: tuple[Any, ...] # tuple entries can be either int or str def status(flag: int) -> tuple[int, int]: ... From 502fe488807711b371e64738cac41ef0925c5d58 Mon Sep 17 00:00:00 2001 From: Vizonex <114684698+Vizonex@users.noreply.github.com> Date: Thu, 12 Mar 2026 20:46:55 -0500 Subject: [PATCH 12/38] Update stubs/cysqlite/cysqlite/_cysqlite.pyi Co-authored-by: Brian Schubert --- stubs/cysqlite/cysqlite/_cysqlite.pyi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stubs/cysqlite/cysqlite/_cysqlite.pyi b/stubs/cysqlite/cysqlite/_cysqlite.pyi index 2fbd04ddac5d..f861b4cc5b26 100644 --- a/stubs/cysqlite/cysqlite/_cysqlite.pyi +++ b/stubs/cysqlite/cysqlite/_cysqlite.pyi @@ -212,7 +212,7 @@ class Connection(_callable_context_manager): check_table_sizes: bool = False, dry_run: bool = False, ) -> Cursor: ... - def pragma(self, key: str, value: Any = ..., database: str | None = None, multi: bool = False) -> None: ... + def pragma(self, key: str, value: Any = sentinel, database: str | None = None, multi: bool = False) -> None: ... def progress(self, fn: Callable[[int, int, bool], None], n: int = 1) -> None: ... def register_adapter(self, python_type: type[Any], fn: Callable[..., Any]) -> None: ... def register_converter(self, data_type: str, fn: Callable[..., Any]) -> None: ... From 2174567250f15e31a46b2eac145098ab2594de4b Mon Sep 17 00:00:00 2001 From: Vizonex <114684698+Vizonex@users.noreply.github.com> Date: Thu, 12 Mar 2026 20:47:08 -0500 Subject: [PATCH 13/38] Update stubs/cysqlite/cysqlite/_cysqlite.pyi Co-authored-by: Brian Schubert --- stubs/cysqlite/cysqlite/_cysqlite.pyi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stubs/cysqlite/cysqlite/_cysqlite.pyi b/stubs/cysqlite/cysqlite/_cysqlite.pyi index f861b4cc5b26..721aae24627b 100644 --- a/stubs/cysqlite/cysqlite/_cysqlite.pyi +++ b/stubs/cysqlite/cysqlite/_cysqlite.pyi @@ -224,7 +224,7 @@ class Connection(_callable_context_manager): adapter: Callable[..., Any] | None = None, ) -> None: ... def rollback(self) -> None: ... - def rollback_hook(self, fn: Callable[[], Any] | None) -> None: ... + def rollback_hook(self, fn: Callable[[], object] | None) -> None: ... def savepoint(self, sid: str | None = None) -> Savepoint: ... def set_autocheckpoint(self, n: int) -> None: ... def set_busy_handler(self, timeout: float = 5.0) -> None: ... From 6db2a7e9ef2b73447ee966f243cecfef3f63fdc8 Mon Sep 17 00:00:00 2001 From: Vizonex Date: Thu, 12 Mar 2026 20:49:05 -0500 Subject: [PATCH 14/38] remove branching in typing & typing-extensions --- stubs/cysqlite/cysqlite/_cysqlite.pyi | 18 ++---------------- stubs/cysqlite/cysqlite/aio.pyi | 17 +---------------- 2 files changed, 3 insertions(+), 32 deletions(-) diff --git a/stubs/cysqlite/cysqlite/_cysqlite.pyi b/stubs/cysqlite/cysqlite/_cysqlite.pyi index b3d3ac1fed72..129c5423a67f 100644 --- a/stubs/cysqlite/cysqlite/_cysqlite.pyi +++ b/stubs/cysqlite/cysqlite/_cysqlite.pyi @@ -1,23 +1,11 @@ -import sys import types +from _typeshed import Incomplete from collections.abc import Callable, Iterable, Iterator, Mapping, Sequence from typing import Any, ClassVar, Literal, NoReturn, ParamSpec, TypeAlias, TypeVar, final -from typing_extensions import disjoint_base +from typing_extensions import Buffer, Self, disjoint_base from cysqlite.metadata import Column, ColumnMetadata, ForeignKey, Index, View -if sys.version_info >= (3, 12): - from collections.abc import Buffer -else: - from typing_extensions import Buffer - -if sys.version_info >= (3, 11): - from typing import Self -else: - from typing_extensions import Self - -from _typeshed import Incomplete - _SqliteData: TypeAlias = str | Buffer | float | None _AdaptedInputData: TypeAlias = _SqliteData | Any _Parameters: TypeAlias = Sequence[_AdaptedInputData] | Mapping[str, _AdaptedInputData] @@ -108,7 +96,6 @@ class Blob: def __setitem__(self, key: int | slice[int, int, int] | slice[int, int], value: Buffer) -> None: ... @final -@disjoint_base class Connection(_callable_context_manager): cached_statements: int callback_error: BaseException | None @@ -249,7 +236,6 @@ class Connection(_callable_context_manager): def __reduce__(self) -> Any: ... @final -@disjoint_base class Cursor: conn: Connection description: tuple[str, ...] diff --git a/stubs/cysqlite/cysqlite/aio.pyi b/stubs/cysqlite/cysqlite/aio.pyi index d034b8ad1586..d40f3a6cc024 100644 --- a/stubs/cysqlite/cysqlite/aio.pyi +++ b/stubs/cysqlite/cysqlite/aio.pyi @@ -1,27 +1,12 @@ import asyncio import queue -import sys import types from collections.abc import Callable, Mapping, Sequence from typing import Any, Literal, TypeAlias, TypedDict +from typing_extensions import Buffer, Self, Unpack from ._cysqlite import Atomic, Connection, Cursor, Row, Savepoint, Transaction -if sys.version_info >= (3, 13): - from typing import Unpack -else: - from typing_extensions import Unpack - -if sys.version_info >= (3, 12): - from collections.abc import Buffer -else: - from typing_extensions import Buffer - -if sys.version_info >= (3, 11): - from typing import Self -else: - from typing_extensions import Self - _SqliteData: TypeAlias = str | Buffer | int | float | None _AdaptedInputData: TypeAlias = _SqliteData | Any _Parameters: TypeAlias = Sequence[_AdaptedInputData] | Mapping[str, _AdaptedInputData] From ddecb8358c2d393b785abc0ee30044a70ad45f9c Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 13 Mar 2026 01:50:16 +0000 Subject: [PATCH 15/38] [pre-commit.ci] auto fixes from pre-commit.com hooks --- stubs/cysqlite/cysqlite/_cysqlite.pyi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stubs/cysqlite/cysqlite/_cysqlite.pyi b/stubs/cysqlite/cysqlite/_cysqlite.pyi index f90a2fee34be..1286edadc546 100644 --- a/stubs/cysqlite/cysqlite/_cysqlite.pyi +++ b/stubs/cysqlite/cysqlite/_cysqlite.pyi @@ -42,7 +42,7 @@ def set_singlethread() -> bool: ... def set_stmt_journal_spill(nbytes: int) -> bool: ... sqlite_version: str -sqlite_version_info: tuple[Any, ...] # tuple entries can be either int or str +sqlite_version_info: tuple[Any, ...] # tuple entries can be either int or str def status(flag: int) -> tuple[int, int]: ... From a8bf9ad19dfb2f1b1f2514e8c2cae2bf65941ffd Mon Sep 17 00:00:00 2001 From: Vizonex Date: Thu, 12 Mar 2026 20:51:05 -0500 Subject: [PATCH 16/38] fix SENTINEL for now --- stubs/cysqlite/cysqlite/_cysqlite.pyi | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/stubs/cysqlite/cysqlite/_cysqlite.pyi b/stubs/cysqlite/cysqlite/_cysqlite.pyi index f90a2fee34be..711d8932682d 100644 --- a/stubs/cysqlite/cysqlite/_cysqlite.pyi +++ b/stubs/cysqlite/cysqlite/_cysqlite.pyi @@ -42,7 +42,7 @@ def set_singlethread() -> bool: ... def set_stmt_journal_spill(nbytes: int) -> bool: ... sqlite_version: str -sqlite_version_info: tuple[Any, ...] # tuple entries can be either int or str +sqlite_version_info: tuple[Any, ...] # tuple entries can be either int or str def status(flag: int) -> tuple[int, int]: ... @@ -199,7 +199,7 @@ class Connection(_callable_context_manager): check_table_sizes: bool = False, dry_run: bool = False, ) -> Cursor: ... - def pragma(self, key: str, value: Any = sentinel, database: str | None = None, multi: bool = False) -> None: ... + def pragma(self, key: str, value: Any = ..., database: str | None = None, multi: bool = False) -> None: ... def progress(self, fn: Callable[[int, int, bool], None], n: int = 1) -> None: ... def register_adapter(self, python_type: type[Any], fn: Callable[..., Any]) -> None: ... def register_converter(self, data_type: str, fn: Callable[..., Any]) -> None: ... From 82fa652e8f39599c9ed3e337603d5f265c3622bc Mon Sep 17 00:00:00 2001 From: Vizonex Date: Thu, 12 Mar 2026 20:57:06 -0500 Subject: [PATCH 17/38] wrap contants using Final[...] --- stubs/cysqlite/cysqlite/__init__.pyi | 6 +- stubs/cysqlite/cysqlite/_constants.pyi | 376 +++++++++++++------------ stubs/cysqlite/cysqlite/_cysqlite.pyi | 12 +- 3 files changed, 199 insertions(+), 195 deletions(-) diff --git a/stubs/cysqlite/cysqlite/__init__.pyi b/stubs/cysqlite/cysqlite/__init__.pyi index 895fa4989971..05c9a2fbfb49 100644 --- a/stubs/cysqlite/cysqlite/__init__.pyi +++ b/stubs/cysqlite/cysqlite/__init__.pyi @@ -1,3 +1,5 @@ +from typing import Final + from ._constants import * from ._cysqlite import ( Blob as Blob, @@ -21,5 +23,5 @@ from .exceptions import * version: Final[str] __version__: Final[str] version_info: Final[tuple[int, int, int]] -apilevel: Final = "2.0" -paramstyle: Final = "qmark" +apilevel: Final[str] = "2.0" +paramstyle: Final[str] = "qmark" diff --git a/stubs/cysqlite/cysqlite/_constants.pyi b/stubs/cysqlite/cysqlite/_constants.pyi index 4151e5fcdacd..40aae4fcb2d3 100644 --- a/stubs/cysqlite/cysqlite/_constants.pyi +++ b/stubs/cysqlite/cysqlite/_constants.pyi @@ -1,187 +1,189 @@ -SQLITE_ABORT: int -SQLITE_ALTER_TABLE: int -SQLITE_ANALYZE: int -SQLITE_ATTACH: int -SQLITE_AUTH: int -SQLITE_BUSY: int -SQLITE_CANTOPEN: int -SQLITE_CHECKPOINT_FULL: int -SQLITE_CHECKPOINT_PASSIVE: int -SQLITE_CHECKPOINT_RESTART: int -SQLITE_CHECKPOINT_TRUNCATE: int -SQLITE_CONSTRAINT: int -SQLITE_COPY: int -SQLITE_CORRUPT: int -SQLITE_CREATE_INDEX: int -SQLITE_CREATE_TABLE: int -SQLITE_CREATE_TEMP_INDEX: int -SQLITE_CREATE_TEMP_TABLE: int -SQLITE_CREATE_TEMP_TRIGGER: int -SQLITE_CREATE_TEMP_VIEW: int -SQLITE_CREATE_TRIGGER: int -SQLITE_CREATE_VIEW: int -SQLITE_CREATE_VTABLE: int -SQLITE_DBCONFIG_DEFENSIVE: int -SQLITE_DBCONFIG_DQS_DDL: int -SQLITE_DBCONFIG_DQS_DML: int -SQLITE_DBCONFIG_ENABLE_FKEY: int -SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER: int -SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION: int -SQLITE_DBCONFIG_ENABLE_QPSG: int -SQLITE_DBCONFIG_ENABLE_TRIGGER: int -SQLITE_DBCONFIG_ENABLE_VIEW: int -SQLITE_DBCONFIG_LEGACY_ALTER_TABLE: int -SQLITE_DBCONFIG_LEGACY_FILE_FORMAT: int -SQLITE_DBCONFIG_MAINDBNAME: int -SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE: int -SQLITE_DBCONFIG_RESET_DATABASE: int -SQLITE_DBCONFIG_TRIGGER_EQP: int -SQLITE_DBCONFIG_TRUSTED_SCHEMA: int -SQLITE_DBCONFIG_WRITABLE_SCHEMA: int -SQLITE_DBSTATUS_CACHE_HIT: int -SQLITE_DBSTATUS_CACHE_MISS: int -SQLITE_DBSTATUS_CACHE_USED: int -SQLITE_DBSTATUS_CACHE_WRITE: int -SQLITE_DBSTATUS_DEFERRED_FKS: int -SQLITE_DBSTATUS_LOOKASIDE_HIT: int -SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL: int -SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE: int -SQLITE_DBSTATUS_LOOKASIDE_USED: int -SQLITE_DBSTATUS_SCHEMA_USED: int -SQLITE_DBSTATUS_STMT_USED: int -SQLITE_DELETE: int -SQLITE_DENY: int -SQLITE_DETACH: int -SQLITE_DONE: int -SQLITE_DROP_INDEX: int -SQLITE_DROP_TABLE: int -SQLITE_DROP_TEMP_INDEX: int -SQLITE_DROP_TEMP_TABLE: int -SQLITE_DROP_TEMP_TRIGGER: int -SQLITE_DROP_TEMP_VIEW: int -SQLITE_DROP_TRIGGER: int -SQLITE_DROP_VIEW: int -SQLITE_DROP_VTABLE: int -SQLITE_EMPTY: int -SQLITE_ERROR: int -SQLITE_FCNTL_BEGIN_ATOMIC_WRITE: int -SQLITE_FCNTL_BUSYHANDLER: int -SQLITE_FCNTL_CHUNK_SIZE: int -SQLITE_FCNTL_CKPT_DONE: int -SQLITE_FCNTL_CKPT_START: int -SQLITE_FCNTL_CKSM_FILE: int -SQLITE_FCNTL_COMMIT_ATOMIC_WRITE: int -SQLITE_FCNTL_COMMIT_PHASETWO: int -SQLITE_FCNTL_DATA_VERSION: int -SQLITE_FCNTL_EXTERNAL_READER: int -SQLITE_FCNTL_FILE_POINTER: int -SQLITE_FCNTL_GET_LOCKPROXYFILE: int -SQLITE_FCNTL_HAS_MOVED: int -SQLITE_FCNTL_JOURNAL_POINTER: int -SQLITE_FCNTL_LAST_ERRNO: int -SQLITE_FCNTL_LOCKSTATE: int -SQLITE_FCNTL_LOCK_TIMEOUT: int -SQLITE_FCNTL_MMAP_SIZE: int -SQLITE_FCNTL_NULL_IO: int -SQLITE_FCNTL_OVERWRITE: int -SQLITE_FCNTL_PDB: int -SQLITE_FCNTL_PERSIST_WAL: int -SQLITE_FCNTL_POWERSAFE_OVERWRITE: int -SQLITE_FCNTL_PRAGMA: int -SQLITE_FCNTL_RBU: int -SQLITE_FCNTL_RESERVE_BYTES: int -SQLITE_FCNTL_RESET_CACHE: int -SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE: int -SQLITE_FCNTL_SET_LOCKPROXYFILE: int -SQLITE_FCNTL_SIZE_HINT: int -SQLITE_FCNTL_SIZE_LIMIT: int -SQLITE_FCNTL_SYNC: int -SQLITE_FCNTL_SYNC_OMITTED: int -SQLITE_FCNTL_TEMPFILENAME: int -SQLITE_FCNTL_TRACE: int -SQLITE_FCNTL_VFSNAME: int -SQLITE_FCNTL_VFS_POINTER: int -SQLITE_FCNTL_WAL_BLOCK: int -SQLITE_FCNTL_WIN32_AV_RETRY: int -SQLITE_FCNTL_WIN32_GET_HANDLE: int -SQLITE_FCNTL_WIN32_SET_HANDLE: int -SQLITE_FCNTL_ZIPVFS: int -SQLITE_FORMAT: int -SQLITE_FULL: int -SQLITE_FUNCTION: int -SQLITE_IGNORE: int -SQLITE_INSERT: int -SQLITE_INTERNAL: int -SQLITE_INTERRUPT: int -SQLITE_IOERR: int -SQLITE_LIMIT_ATTACHED: int -SQLITE_LIMIT_COLUMN: int -SQLITE_LIMIT_COMPOUND_SELECT: int -SQLITE_LIMIT_EXPR_DEPTH: int -SQLITE_LIMIT_FUNCTION_ARG: int -SQLITE_LIMIT_LENGTH: int -SQLITE_LIMIT_LIKE_PATTERN_LENGTH: int -SQLITE_LIMIT_SQL_LENGTH: int -SQLITE_LIMIT_TRIGGER_DEPTH: int -SQLITE_LIMIT_VARIABLE_NUMBER: int -SQLITE_LIMIT_VDBE_OP: int -SQLITE_LIMIT_WORKER_THREADS: int -SQLITE_LOCKED: int -SQLITE_MISMATCH: int -SQLITE_MISUSE: int -SQLITE_NOLFS: int -SQLITE_NOMEM: int -SQLITE_NOTADB: int -SQLITE_NOTFOUND: int -SQLITE_OK: int -SQLITE_OPEN_AUTOPROXY: int -SQLITE_OPEN_CREATE: int -SQLITE_OPEN_DELETEONCLOSE: int -SQLITE_OPEN_EXCLUSIVE: int -SQLITE_OPEN_FULLMUTEX: int -SQLITE_OPEN_MAIN_DB: int -SQLITE_OPEN_MAIN_JOURNAL: int -SQLITE_OPEN_MASTER_JOURNAL: int -SQLITE_OPEN_MEMORY: int -SQLITE_OPEN_NOMUTEX: int -SQLITE_OPEN_PRIVATECACHE: int -SQLITE_OPEN_READONLY: int -SQLITE_OPEN_READWRITE: int -SQLITE_OPEN_SHAREDCACHE: int -SQLITE_OPEN_SUBJOURNAL: int -SQLITE_OPEN_TEMP_DB: int -SQLITE_OPEN_TEMP_JOURNAL: int -SQLITE_OPEN_TRANSIENT_DB: int -SQLITE_OPEN_URI: int -SQLITE_OPEN_WAL: int -SQLITE_PERM: int -SQLITE_PRAGMA: int -SQLITE_PROTOCOL: int -SQLITE_RANGE: int -SQLITE_READ: int -SQLITE_READONLY: int -SQLITE_RECURSIVE: int -SQLITE_REINDEX: int -SQLITE_ROW: int -SQLITE_SAVEPOINT: int -SQLITE_SCHEMA: int -SQLITE_SELECT: int -SQLITE_STATUS_MALLOC_COUNT: int -SQLITE_STATUS_MALLOC_SIZE: int -SQLITE_STATUS_MEMORY_USED: int -SQLITE_STATUS_PAGECACHE_OVERFLOW: int -SQLITE_STATUS_PAGECACHE_SIZE: int -SQLITE_STATUS_PAGECACHE_USED: int -SQLITE_STATUS_PARSER_STACK: int -SQLITE_STATUS_SCRATCH_OVERFLOW: int -SQLITE_STATUS_SCRATCH_SIZE: int -SQLITE_STATUS_SCRATCH_USED: int -SQLITE_TOOBIG: int -SQLITE_TRACE_CLOSE: int -SQLITE_TRACE_PROFILE: int -SQLITE_TRACE_ROW: int -SQLITE_TRACE_STMT: int -SQLITE_TRANSACTION: int -SQLITE_UPDATE: int -SQLITE_VERSION: str -SQLITE_VERSION_NUMBER: int +from typing import Final + +SQLITE_ABORT: Final[int] +SQLITE_ALTER_TABLE: Final[int] +SQLITE_ANALYZE: Final[int] +SQLITE_ATTACH: Final[int] +SQLITE_AUTH: Final[int] +SQLITE_BUSY: Final[int] +SQLITE_CANTOPEN: Final[int] +SQLITE_CHECKPOINT_FULL: Final[int] +SQLITE_CHECKPOINT_PASSIVE: Final[int] +SQLITE_CHECKPOINT_RESTART: Final[int] +SQLITE_CHECKPOINT_TRUNCATE: Final[int] +SQLITE_CONSTRAINT: Final[int] +SQLITE_COPY: Final[int] +SQLITE_CORRUPT: Final[int] +SQLITE_CREATE_INDEX: Final[int] +SQLITE_CREATE_TABLE: Final[int] +SQLITE_CREATE_TEMP_INDEX: Final[int] +SQLITE_CREATE_TEMP_TABLE: Final[int] +SQLITE_CREATE_TEMP_TRIGGER: Final[int] +SQLITE_CREATE_TEMP_VIEW: Final[int] +SQLITE_CREATE_TRIGGER: Final[int] +SQLITE_CREATE_VIEW: Final[int] +SQLITE_CREATE_VTABLE: Final[int] +SQLITE_DBCONFIG_DEFENSIVE: Final[int] +SQLITE_DBCONFIG_DQS_DDL: Final[int] +SQLITE_DBCONFIG_DQS_DML: Final[int] +SQLITE_DBCONFIG_ENABLE_FKEY: Final[int] +SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER: Final[int] +SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION: Final[int] +SQLITE_DBCONFIG_ENABLE_QPSG: Final[int] +SQLITE_DBCONFIG_ENABLE_TRIGGER: Final[int] +SQLITE_DBCONFIG_ENABLE_VIEW: Final[int] +SQLITE_DBCONFIG_LEGACY_ALTER_TABLE: Final[int] +SQLITE_DBCONFIG_LEGACY_FILE_FORMAT: Final[int] +SQLITE_DBCONFIG_MAINDBNAME: Final[int] +SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE: Final[int] +SQLITE_DBCONFIG_RESET_DATABASE: Final[int] +SQLITE_DBCONFIG_TRIGGER_EQP: Final[int] +SQLITE_DBCONFIG_TRUSTED_SCHEMA: Final[int] +SQLITE_DBCONFIG_WRITABLE_SCHEMA: Final[int] +SQLITE_DBSTATUS_CACHE_HIT: Final[int] +SQLITE_DBSTATUS_CACHE_MISS: Final[int] +SQLITE_DBSTATUS_CACHE_USED: Final[int] +SQLITE_DBSTATUS_CACHE_WRITE: Final[int] +SQLITE_DBSTATUS_DEFERRED_FKS: Final[int] +SQLITE_DBSTATUS_LOOKASIDE_HIT: Final[int] +SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL: Final[int] +SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE: Final[int] +SQLITE_DBSTATUS_LOOKASIDE_USED: Final[int] +SQLITE_DBSTATUS_SCHEMA_USED: Final[int] +SQLITE_DBSTATUS_STMT_USED: Final[int] +SQLITE_DELETE: Final[int] +SQLITE_DENY: Final[int] +SQLITE_DETACH: Final[int] +SQLITE_DONE: Final[int] +SQLITE_DROP_INDEX: Final[int] +SQLITE_DROP_TABLE: Final[int] +SQLITE_DROP_TEMP_INDEX: Final[int] +SQLITE_DROP_TEMP_TABLE: Final[int] +SQLITE_DROP_TEMP_TRIGGER: Final[int] +SQLITE_DROP_TEMP_VIEW: Final[int] +SQLITE_DROP_TRIGGER: Final[int] +SQLITE_DROP_VIEW: Final[int] +SQLITE_DROP_VTABLE: Final[int] +SQLITE_EMPTY: Final[int] +SQLITE_ERROR: Final[int] +SQLITE_FCNTL_BEGIN_ATOMIC_WRITE: Final[int] +SQLITE_FCNTL_BUSYHANDLER: Final[int] +SQLITE_FCNTL_CHUNK_SIZE: Final[int] +SQLITE_FCNTL_CKPT_DONE: Final[int] +SQLITE_FCNTL_CKPT_START: Final[int] +SQLITE_FCNTL_CKSM_FILE: Final[int] +SQLITE_FCNTL_COMMIT_ATOMIC_WRITE: Final[int] +SQLITE_FCNTL_COMMIT_PHASETWO: Final[int] +SQLITE_FCNTL_DATA_VERSION: Final[int] +SQLITE_FCNTL_EXTERNAL_READER: Final[int] +SQLITE_FCNTL_FILE_POINTER: Final[int] +SQLITE_FCNTL_GET_LOCKPROXYFILE: Final[int] +SQLITE_FCNTL_HAS_MOVED: Final[int] +SQLITE_FCNTL_JOURNAL_POINTER: Final[int] +SQLITE_FCNTL_LAST_ERRNO: Final[int] +SQLITE_FCNTL_LOCKSTATE: Final[int] +SQLITE_FCNTL_LOCK_TIMEOUT: Final[int] +SQLITE_FCNTL_MMAP_SIZE: Final[int] +SQLITE_FCNTL_NULL_IO: Final[int] +SQLITE_FCNTL_OVERWRITE: Final[int] +SQLITE_FCNTL_PDB: Final[int] +SQLITE_FCNTL_PERSIST_WAL: Final[int] +SQLITE_FCNTL_POWERSAFE_OVERWRITE: Final[int] +SQLITE_FCNTL_PRAGMA: Final[int] +SQLITE_FCNTL_RBU: Final[int] +SQLITE_FCNTL_RESERVE_BYTES: Final[int] +SQLITE_FCNTL_RESET_CACHE: Final[int] +SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE: Final[int] +SQLITE_FCNTL_SET_LOCKPROXYFILE: Final[int] +SQLITE_FCNTL_SIZE_HINT: Final[int] +SQLITE_FCNTL_SIZE_LIMIT: Final[int] +SQLITE_FCNTL_SYNC: Final[int] +SQLITE_FCNTL_SYNC_OMITTED: Final[int] +SQLITE_FCNTL_TEMPFILENAME: Final[int] +SQLITE_FCNTL_TRACE: Final[int] +SQLITE_FCNTL_VFSNAME: Final[int] +SQLITE_FCNTL_VFS_POINTER: Final[int] +SQLITE_FCNTL_WAL_BLOCK: Final[int] +SQLITE_FCNTL_WIN32_AV_RETRY: Final[int] +SQLITE_FCNTL_WIN32_GET_HANDLE: Final[int] +SQLITE_FCNTL_WIN32_SET_HANDLE: Final[int] +SQLITE_FCNTL_ZIPVFS: Final[int] +SQLITE_FORMAT: Final[int] +SQLITE_FULL: Final[int] +SQLITE_FUNCTION: Final[int] +SQLITE_IGNORE: Final[int] +SQLITE_INSERT: Final[int] +SQLITE_INTERNAL: Final[int] +SQLITE_INTERRUPT: Final[int] +SQLITE_IOERR: Final[int] +SQLITE_LIMIT_ATTACHED: Final[int] +SQLITE_LIMIT_COLUMN: Final[int] +SQLITE_LIMIT_COMPOUND_SELECT: Final[int] +SQLITE_LIMIT_EXPR_DEPTH: Final[int] +SQLITE_LIMIT_FUNCTION_ARG: Final[int] +SQLITE_LIMIT_LENGTH: Final[int] +SQLITE_LIMIT_LIKE_PATTERN_LENGTH: Final[int] +SQLITE_LIMIT_SQL_LENGTH: Final[int] +SQLITE_LIMIT_TRIGGER_DEPTH: Final[int] +SQLITE_LIMIT_VARIABLE_NUMBER: Final[int] +SQLITE_LIMIT_VDBE_OP: Final[int] +SQLITE_LIMIT_WORKER_THREADS: Final[int] +SQLITE_LOCKED: Final[int] +SQLITE_MISMATCH: Final[int] +SQLITE_MISUSE: Final[int] +SQLITE_NOLFS: Final[int] +SQLITE_NOMEM: Final[int] +SQLITE_NOTADB: Final[int] +SQLITE_NOTFOUND: Final[int] +SQLITE_OK: Final[int] +SQLITE_OPEN_AUTOPROXY: Final[int] +SQLITE_OPEN_CREATE: Final[int] +SQLITE_OPEN_DELETEONCLOSE: Final[int] +SQLITE_OPEN_EXCLUSIVE: Final[int] +SQLITE_OPEN_FULLMUTEX: Final[int] +SQLITE_OPEN_MAIN_DB: Final[int] +SQLITE_OPEN_MAIN_JOURNAL: Final[int] +SQLITE_OPEN_MASTER_JOURNAL: Final[int] +SQLITE_OPEN_MEMORY: Final[int] +SQLITE_OPEN_NOMUTEX: Final[int] +SQLITE_OPEN_PRIVATECACHE: Final[int] +SQLITE_OPEN_READONLY: Final[int] +SQLITE_OPEN_READWRITE: Final[int] +SQLITE_OPEN_SHAREDCACHE: Final[int] +SQLITE_OPEN_SUBJOURNAL: Final[int] +SQLITE_OPEN_TEMP_DB: Final[int] +SQLITE_OPEN_TEMP_JOURNAL: Final[int] +SQLITE_OPEN_TRANSIENT_DB: Final[int] +SQLITE_OPEN_URI: Final[int] +SQLITE_OPEN_WAL: Final[int] +SQLITE_PERM: Final[int] +SQLITE_PRAGMA: Final[int] +SQLITE_PROTOCOL: Final[int] +SQLITE_RANGE: Final[int] +SQLITE_READ: Final[int] +SQLITE_READONLY: Final[int] +SQLITE_RECURSIVE: Final[int] +SQLITE_REINDEX: Final[int] +SQLITE_ROW: Final[int] +SQLITE_SAVEPOINT: Final[int] +SQLITE_SCHEMA: Final[int] +SQLITE_SELECT: Final[int] +SQLITE_STATUS_MALLOC_COUNT: Final[int] +SQLITE_STATUS_MALLOC_SIZE: Final[int] +SQLITE_STATUS_MEMORY_USED: Final[int] +SQLITE_STATUS_PAGECACHE_OVERFLOW: Final[int] +SQLITE_STATUS_PAGECACHE_SIZE: Final[int] +SQLITE_STATUS_PAGECACHE_USED: Final[int] +SQLITE_STATUS_PARSER_STACK: Final[int] +SQLITE_STATUS_SCRATCH_OVERFLOW: Final[int] +SQLITE_STATUS_SCRATCH_SIZE: Final[int] +SQLITE_STATUS_SCRATCH_USED: Final[int] +SQLITE_TOOBIG: Final[int] +SQLITE_TRACE_CLOSE: Final[int] +SQLITE_TRACE_PROFILE: Final[int] +SQLITE_TRACE_ROW: Final[int] +SQLITE_TRACE_STMT: Final[int] +SQLITE_TRANSACTION: Final[int] +SQLITE_UPDATE: Final[int] +SQLITE_VERSION: Final[str] +SQLITE_VERSION_NUMBER: Final[int] diff --git a/stubs/cysqlite/cysqlite/_cysqlite.pyi b/stubs/cysqlite/cysqlite/_cysqlite.pyi index 711d8932682d..e250f1ae1d11 100644 --- a/stubs/cysqlite/cysqlite/_cysqlite.pyi +++ b/stubs/cysqlite/cysqlite/_cysqlite.pyi @@ -1,7 +1,7 @@ import types from _typeshed import Incomplete from collections.abc import Callable, Iterable, Iterator, Mapping, Sequence -from typing import Any, ClassVar, Literal, NoReturn, ParamSpec, TypeAlias, TypeVar, final +from typing import Any, ClassVar, Final, Literal, NoReturn, ParamSpec, TypeAlias, TypeVar, final from typing_extensions import Buffer, Self, disjoint_base from cysqlite.metadata import Column, ColumnMetadata, ForeignKey, Index, View @@ -14,8 +14,8 @@ _Query: TypeAlias = Literal["INSERT", "UPDATE", "DELETE"] _T = TypeVar("_T") _P = ParamSpec("_P") -HAS_COLUMN_METADATA: int -SENTINEL: object +HAS_COLUMN_METADATA: Final[int] +SENTINEL: Final[object] def compile_option(opt: str | Buffer) -> int: ... def connect( @@ -41,12 +41,12 @@ def set_serialized() -> bool: ... def set_singlethread() -> bool: ... def set_stmt_journal_spill(nbytes: int) -> bool: ... -sqlite_version: str -sqlite_version_info: tuple[Any, ...] # tuple entries can be either int or str +sqlite_version: Final[str] +sqlite_version_info: Final[tuple[Any, ...]] # tuple entries can be either int or str def status(flag: int) -> tuple[int, int]: ... -threadsafety: int +threadsafety: Final[int] def vfs_list() -> list[str]: ... @disjoint_base From 7e57504488c19c055f1433d619e40b131aed5894 Mon Sep 17 00:00:00 2001 From: Vizonex Date: Thu, 12 Mar 2026 21:02:19 -0500 Subject: [PATCH 18/38] fix allowlist --- stubs/cysqlite/@tests/stubtest_allowlist.txt | 3 --- 1 file changed, 3 deletions(-) diff --git a/stubs/cysqlite/@tests/stubtest_allowlist.txt b/stubs/cysqlite/@tests/stubtest_allowlist.txt index abb6d4b7deee..211821bd3ea0 100644 --- a/stubs/cysqlite/@tests/stubtest_allowlist.txt +++ b/stubs/cysqlite/@tests/stubtest_allowlist.txt @@ -1,17 +1,14 @@ cysqlite._cysqlite.__test__ -cysqlite.Connection cysqlite.Connection.commit cysqlite.Connection.execute_simple cysqlite.Connection.executemany cysqlite.Connection.get_columns cysqlite.Connection.pragma -cysqlite._cysqlite.Connection cysqlite._cysqlite.Connection.commit cysqlite._cysqlite.Connection.execute_simple cysqlite._cysqlite.Connection.executemany cysqlite._cysqlite.Connection.get_columns cysqlite._cysqlite.Connection.pragma -cysqlite._cysqlite.Cursor cysqlite._cysqlite.Cursor.executemany cysqlite._cysqlite.__reduce_cython__ cysqlite._cysqlite.__setstate_cython__ From 59265bf17706c3282d782d6ae94e822442e0cf81 Mon Sep 17 00:00:00 2001 From: Vizonex <114684698+Vizonex@users.noreply.github.com> Date: Thu, 12 Mar 2026 21:10:07 -0500 Subject: [PATCH 19/38] Update stubs/cysqlite/cysqlite/aio.pyi Co-authored-by: Brian Schubert --- stubs/cysqlite/cysqlite/aio.pyi | 1 + 1 file changed, 1 insertion(+) diff --git a/stubs/cysqlite/cysqlite/aio.pyi b/stubs/cysqlite/cysqlite/aio.pyi index d40f3a6cc024..63c3a2238d16 100644 --- a/stubs/cysqlite/cysqlite/aio.pyi +++ b/stubs/cysqlite/cysqlite/aio.pyi @@ -12,6 +12,7 @@ _AdaptedInputData: TypeAlias = _SqliteData | Any _Parameters: TypeAlias = Sequence[_AdaptedInputData] | Mapping[str, _AdaptedInputData] _IsolationLevel: TypeAlias = Literal["DEFERRED", "EXCLUSIVE", "IMMEDIATE"] | None +@type_check_only class _BackupKwargs(TypedDict, total=False): pages: int | None name: str | None From 3462ed8b68a8467ac9bb6a4eba45ce42401ab27c Mon Sep 17 00:00:00 2001 From: Vizonex Date: Thu, 12 Mar 2026 21:13:35 -0500 Subject: [PATCH 20/38] add type_check_only to type dictionaries --- stubs/cysqlite/cysqlite/aio.pyi | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/stubs/cysqlite/cysqlite/aio.pyi b/stubs/cysqlite/cysqlite/aio.pyi index 63c3a2238d16..b2bdef626666 100644 --- a/stubs/cysqlite/cysqlite/aio.pyi +++ b/stubs/cysqlite/cysqlite/aio.pyi @@ -2,7 +2,7 @@ import asyncio import queue import types from collections.abc import Callable, Mapping, Sequence -from typing import Any, Literal, TypeAlias, TypedDict +from typing import Any, Literal, TypeAlias, TypedDict, type_check_only from typing_extensions import Buffer, Self, Unpack from ._cysqlite import Atomic, Connection, Cursor, Row, Savepoint, Transaction @@ -19,6 +19,7 @@ class _BackupKwargs(TypedDict, total=False): progress: Callable[[int, int, bool], None] | None src_name: str | None +@type_check_only class _ConnectKwargs(TypedDict, total=False): flags: int | None timeout: float @@ -30,6 +31,7 @@ class _ConnectKwargs(TypedDict, total=False): autoconnect: bool pragmas: dict[str, Any] | None +@type_check_only class _CheckPointKwargs(TypedDict, total=False): full: bool truncate: bool From e5e707085a0cf2d6b170234c782524fb1f7500e9 Mon Sep 17 00:00:00 2001 From: Vizonex <114684698+Vizonex@users.noreply.github.com> Date: Sat, 14 Mar 2026 09:53:24 -0500 Subject: [PATCH 21/38] Update stubs/cysqlite/cysqlite/__init__.pyi Co-authored-by: Brian Schubert --- stubs/cysqlite/cysqlite/__init__.pyi | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/stubs/cysqlite/cysqlite/__init__.pyi b/stubs/cysqlite/cysqlite/__init__.pyi index 05c9a2fbfb49..6977772cb0fb 100644 --- a/stubs/cysqlite/cysqlite/__init__.pyi +++ b/stubs/cysqlite/cysqlite/__init__.pyi @@ -23,5 +23,5 @@ from .exceptions import * version: Final[str] __version__: Final[str] version_info: Final[tuple[int, int, int]] -apilevel: Final[str] = "2.0" -paramstyle: Final[str] = "qmark" +apilevel: Final = "2.0" +paramstyle: Final = "qmark" From e9dcb390d6d4f0b6c7ff7b1f6bfa57829285c13e Mon Sep 17 00:00:00 2001 From: Vizonex <114684698+Vizonex@users.noreply.github.com> Date: Sat, 14 Mar 2026 09:55:48 -0500 Subject: [PATCH 22/38] Update stubs/cysqlite/cysqlite/_cysqlite.pyi Co-authored-by: Brian Schubert --- stubs/cysqlite/cysqlite/_cysqlite.pyi | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/stubs/cysqlite/cysqlite/_cysqlite.pyi b/stubs/cysqlite/cysqlite/_cysqlite.pyi index e250f1ae1d11..f818f6d51495 100644 --- a/stubs/cysqlite/cysqlite/_cysqlite.pyi +++ b/stubs/cysqlite/cysqlite/_cysqlite.pyi @@ -293,12 +293,10 @@ class Savepoint(_callable_context_manager): def __reduce__(self) -> Any: ... class TableFunction: - _ncols: ClassVar[int] = ... - _nparams: ClassVar[int] = ... - columns: ClassVar[None] = ... - name: ClassVar[None] = ... - params: ClassVar[None] = ... - print_tracebacks: ClassVar[bool] = ... + columns: ClassVar[Incomplete] + name: ClassVar[Incomplete] + params: ClassVar[Incomplete] + print_tracebacks: ClassVar[bool] @classmethod def get_table_columns_declaration(cls) -> str: ... @classmethod From 4130a7f3bce8138906e762b056cdb3c1ac0eabbb Mon Sep 17 00:00:00 2001 From: Vizonex <114684698+Vizonex@users.noreply.github.com> Date: Sat, 14 Mar 2026 10:12:21 -0500 Subject: [PATCH 23/38] Update stubs/cysqlite/cysqlite/_cysqlite.pyi Co-authored-by: Brian Schubert --- stubs/cysqlite/cysqlite/_cysqlite.pyi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stubs/cysqlite/cysqlite/_cysqlite.pyi b/stubs/cysqlite/cysqlite/_cysqlite.pyi index f818f6d51495..e96928f110c4 100644 --- a/stubs/cysqlite/cysqlite/_cysqlite.pyi +++ b/stubs/cysqlite/cysqlite/_cysqlite.pyi @@ -150,7 +150,7 @@ class Connection(_callable_context_manager): self, full: bool = False, truncate: bool = False, restart: bool = False, name: str | Buffer | None = None ) -> tuple[int, int]: ... def close(self) -> bool: ... - def commit(self, begin: bool = True) -> None: ... + def commit(self) -> None: ... def commit_hook(self, fn: Callable[[], None]) -> None: ... def connect(self) -> bool: ... def converter(self, data_type: str) -> Callable[[Callable[_P, _T]], Callable[_P, _T]]: ... From 2c75b0d7c598fe15c5f0b2c6105c1d7d946860c7 Mon Sep 17 00:00:00 2001 From: Vizonex Date: Sat, 14 Mar 2026 10:26:27 -0500 Subject: [PATCH 24/38] add explainations as for the use of Any with TableFunction class --- stubs/cysqlite/cysqlite/_cysqlite.pyi | 18 +++++++++++------- stubs/cysqlite/cysqlite/metadata.pyi | 7 +------ 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/stubs/cysqlite/cysqlite/_cysqlite.pyi b/stubs/cysqlite/cysqlite/_cysqlite.pyi index e250f1ae1d11..a9143f45adb8 100644 --- a/stubs/cysqlite/cysqlite/_cysqlite.pyi +++ b/stubs/cysqlite/cysqlite/_cysqlite.pyi @@ -1,5 +1,5 @@ import types -from _typeshed import Incomplete +from _typeshed import Incomplete, sentinel from collections.abc import Callable, Iterable, Iterator, Mapping, Sequence from typing import Any, ClassVar, Final, Literal, NoReturn, ParamSpec, TypeAlias, TypeVar, final from typing_extensions import Buffer, Self, disjoint_base @@ -7,7 +7,7 @@ from typing_extensions import Buffer, Self, disjoint_base from cysqlite.metadata import Column, ColumnMetadata, ForeignKey, Index, View _SqliteData: TypeAlias = str | Buffer | float | None -_AdaptedInputData: TypeAlias = _SqliteData | Any +_AdaptedInputData: TypeAlias = _SqliteData | Any # There can be registered types with cysqlite. _Parameters: TypeAlias = Sequence[_AdaptedInputData] | Mapping[str, _AdaptedInputData] _IsolationLevel: TypeAlias = Literal["DEFERRED", "EXCLUSIVE", "IMMEDIATE"] | None _Query: TypeAlias = Literal["INSERT", "UPDATE", "DELETE"] @@ -199,7 +199,7 @@ class Connection(_callable_context_manager): check_table_sizes: bool = False, dry_run: bool = False, ) -> Cursor: ... - def pragma(self, key: str, value: Any = ..., database: str | None = None, multi: bool = False) -> None: ... + def pragma(self, key: str, value: Any = sentinel, database: str | None = None, multi: bool = False) -> None: ... def progress(self, fn: Callable[[int, int, bool], None], n: int = 1) -> None: ... def register_adapter(self, python_type: type[Any], fn: Callable[..., Any]) -> None: ... def register_converter(self, data_type: str, fn: Callable[..., Any]) -> None: ... @@ -295,17 +295,21 @@ class Savepoint(_callable_context_manager): class TableFunction: _ncols: ClassVar[int] = ... _nparams: ClassVar[int] = ... - columns: ClassVar[None] = ... - name: ClassVar[None] = ... - params: ClassVar[None] = ... + columns: ClassVar[list[tuple[str, str]]] = ... + name: ClassVar[str] = ... + params: ClassVar[list[str]] = ... print_tracebacks: ClassVar[bool] = ... @classmethod def get_table_columns_declaration(cls) -> str: ... @classmethod def register(cls, conn: Connection) -> None: ... def delete(self, rowid: int) -> None: ... + # NOTE: initialize goes hand & hand with the values added to the class variable + # params SEE: https://cysqlite.readthedocs.io/en/latest/api.html#tablefunction def initialize(self, **filters: Any) -> None: ... - def insert(self, rowid: int, values: list[Any]) -> int: ... + # NOTE: Values of insert can be any row of a given tuple-like object + # or Sequence hence adding both options. + def insert(self, rowid: int, values: Sequence[_AdaptedInputData] | tuple[_AdaptedInputData, ...]) -> int: ... def iterate(self, idx: int) -> tuple[Any, ...]: ... def update(self, old_rowid: int, new_rowid: int, values: list[Any]) -> None: ... diff --git a/stubs/cysqlite/cysqlite/metadata.pyi b/stubs/cysqlite/cysqlite/metadata.pyi index 3521ba5fe291..05b5b3363086 100644 --- a/stubs/cysqlite/cysqlite/metadata.pyi +++ b/stubs/cysqlite/cysqlite/metadata.pyi @@ -1,10 +1,5 @@ -import sys from typing import Any, NamedTuple - -if sys.version_info >= (3, 12): - from collections.abc import Buffer -else: - from typing_extensions import Buffer +from typing_extensions import Buffer class Index(NamedTuple): name: str From 6edba37a4352477a739ee684e5c1b1db28c790e5 Mon Sep 17 00:00:00 2001 From: Vizonex Date: Sat, 14 Mar 2026 10:34:46 -0500 Subject: [PATCH 25/38] fix with stubtest_thrid_party.py --- stubs/cysqlite/@tests/stubtest_allowlist.txt | 2 -- stubs/cysqlite/cysqlite/_cysqlite.pyi | 6 +++--- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/stubs/cysqlite/@tests/stubtest_allowlist.txt b/stubs/cysqlite/@tests/stubtest_allowlist.txt index 211821bd3ea0..bea752bcaf3f 100644 --- a/stubs/cysqlite/@tests/stubtest_allowlist.txt +++ b/stubs/cysqlite/@tests/stubtest_allowlist.txt @@ -1,10 +1,8 @@ cysqlite._cysqlite.__test__ -cysqlite.Connection.commit cysqlite.Connection.execute_simple cysqlite.Connection.executemany cysqlite.Connection.get_columns cysqlite.Connection.pragma -cysqlite._cysqlite.Connection.commit cysqlite._cysqlite.Connection.execute_simple cysqlite._cysqlite.Connection.executemany cysqlite._cysqlite.Connection.get_columns diff --git a/stubs/cysqlite/cysqlite/_cysqlite.pyi b/stubs/cysqlite/cysqlite/_cysqlite.pyi index 57b101fdebe8..a404f9fb3e28 100644 --- a/stubs/cysqlite/cysqlite/_cysqlite.pyi +++ b/stubs/cysqlite/cysqlite/_cysqlite.pyi @@ -295,9 +295,9 @@ class Savepoint(_callable_context_manager): class TableFunction: _ncols: ClassVar[int] = ... _nparams: ClassVar[int] = ... - columns: ClassVar[list[tuple[str, str]]] = ... - name: ClassVar[str] = ... - params: ClassVar[list[str]] = ... + columns: ClassVar[list[tuple[str, str]] | None] = ... + name: ClassVar[str | None] = ... + params: ClassVar[list[str] | None] = ... print_tracebacks: ClassVar[bool] = ... @classmethod def get_table_columns_declaration(cls) -> str: ... From 37ced8b580851d02ac0ad2972a99cbbb86c67c0f Mon Sep 17 00:00:00 2001 From: Vizonex Date: Sat, 14 Mar 2026 10:39:14 -0500 Subject: [PATCH 26/38] remove Any from initalize in TableFunction class --- stubs/cysqlite/cysqlite/_cysqlite.pyi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stubs/cysqlite/cysqlite/_cysqlite.pyi b/stubs/cysqlite/cysqlite/_cysqlite.pyi index a404f9fb3e28..cc6fc476d9d2 100644 --- a/stubs/cysqlite/cysqlite/_cysqlite.pyi +++ b/stubs/cysqlite/cysqlite/_cysqlite.pyi @@ -306,7 +306,7 @@ class TableFunction: def delete(self, rowid: int) -> None: ... # NOTE: initialize goes hand & hand with the values added to the class variable # params SEE: https://cysqlite.readthedocs.io/en/latest/api.html#tablefunction - def initialize(self, **filters: Any) -> None: ... + def initialize(self, **filters) -> None: ... # NOTE: Values of insert can be any row of a given tuple-like object # or Sequence hence adding both options. def insert(self, rowid: int, values: Sequence[_AdaptedInputData] | tuple[_AdaptedInputData, ...]) -> int: ... From 3813f6cb58e60ecdb27ef0e39c08df6d10771c75 Mon Sep 17 00:00:00 2001 From: Vizonex <114684698+Vizonex@users.noreply.github.com> Date: Sat, 14 Mar 2026 11:31:15 -0500 Subject: [PATCH 27/38] Update stubs/cysqlite/@tests/stubtest_allowlist.txt Co-authored-by: Brian Schubert --- stubs/cysqlite/@tests/stubtest_allowlist.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/stubs/cysqlite/@tests/stubtest_allowlist.txt b/stubs/cysqlite/@tests/stubtest_allowlist.txt index bea752bcaf3f..6e932e12d868 100644 --- a/stubs/cysqlite/@tests/stubtest_allowlist.txt +++ b/stubs/cysqlite/@tests/stubtest_allowlist.txt @@ -10,3 +10,7 @@ cysqlite._cysqlite.Connection.pragma cysqlite._cysqlite.Cursor.executemany cysqlite._cysqlite.__reduce_cython__ cysqlite._cysqlite.__setstate_cython__ +# Base class method has unused an **kwargs parameter, but user-defined subclasses only +# accept the specific parameters listed in the `params` class attribute. +cysqlite.TableFunction.initialize +cysqlite._cysqlite.TableFunction.initialize From 8659824a38aecc04132423a8901115c6e5761964 Mon Sep 17 00:00:00 2001 From: Vizonex <114684698+Vizonex@users.noreply.github.com> Date: Sat, 14 Mar 2026 13:58:05 -0500 Subject: [PATCH 28/38] Update stubs/cysqlite/cysqlite/_cysqlite.pyi Co-authored-by: Brian Schubert --- stubs/cysqlite/cysqlite/_cysqlite.pyi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stubs/cysqlite/cysqlite/_cysqlite.pyi b/stubs/cysqlite/cysqlite/_cysqlite.pyi index cc6fc476d9d2..13cd2b49f71d 100644 --- a/stubs/cysqlite/cysqlite/_cysqlite.pyi +++ b/stubs/cysqlite/cysqlite/_cysqlite.pyi @@ -306,7 +306,7 @@ class TableFunction: def delete(self, rowid: int) -> None: ... # NOTE: initialize goes hand & hand with the values added to the class variable # params SEE: https://cysqlite.readthedocs.io/en/latest/api.html#tablefunction - def initialize(self, **filters) -> None: ... + def initialize(self) -> None: ... # NOTE: Values of insert can be any row of a given tuple-like object # or Sequence hence adding both options. def insert(self, rowid: int, values: Sequence[_AdaptedInputData] | tuple[_AdaptedInputData, ...]) -> int: ... From 5ed3c7e99152bc1cb5bd44e095c32d800f1e63d9 Mon Sep 17 00:00:00 2001 From: Vizonex <114684698+Vizonex@users.noreply.github.com> Date: Sat, 14 Mar 2026 13:58:18 -0500 Subject: [PATCH 29/38] Update stubs/cysqlite/cysqlite/_cysqlite.pyi Co-authored-by: Brian Schubert --- stubs/cysqlite/cysqlite/_cysqlite.pyi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stubs/cysqlite/cysqlite/_cysqlite.pyi b/stubs/cysqlite/cysqlite/_cysqlite.pyi index 13cd2b49f71d..b268e268fffe 100644 --- a/stubs/cysqlite/cysqlite/_cysqlite.pyi +++ b/stubs/cysqlite/cysqlite/_cysqlite.pyi @@ -171,7 +171,7 @@ class Connection(_callable_context_manager): def execute(self, sql: str, params: _Parameters | None = ...) -> Cursor: ... def execute_one(self, sql: str, params: _Parameters | None = ...) -> Row | tuple[Any, ...] | None: ... def execute_scalar(self, sql: str, params: _Parameters | None = ...) -> int | None: ... - def execute_simple(self, sql: str, callback: Callable[..., Any] = ...) -> None: ... + def execute_simple(self, sql: str, callback: Callable[..., Any] | None = None) -> None: ... def executemany(self, sql: str, params: Sequence[_Parameters]) -> Cursor: ... def executescript(self, sql: str) -> Cursor: ... def file_control(self, op: int, val: int, name: str | Buffer | None = None) -> int: ... From 91842f05175029648b7fb894b354f770dd4c9cfc Mon Sep 17 00:00:00 2001 From: Vizonex <114684698+Vizonex@users.noreply.github.com> Date: Sat, 14 Mar 2026 13:58:29 -0500 Subject: [PATCH 30/38] Update stubs/cysqlite/cysqlite/_cysqlite.pyi Co-authored-by: Brian Schubert --- stubs/cysqlite/cysqlite/_cysqlite.pyi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stubs/cysqlite/cysqlite/_cysqlite.pyi b/stubs/cysqlite/cysqlite/_cysqlite.pyi index b268e268fffe..c143bd6e58f6 100644 --- a/stubs/cysqlite/cysqlite/_cysqlite.pyi +++ b/stubs/cysqlite/cysqlite/_cysqlite.pyi @@ -247,7 +247,7 @@ class Cursor: def close(self) -> None: ... def columns(self) -> list[str]: ... def execute(self, sql: str, params: _Parameters | None = None) -> Self: ... - def executemany(self, sql: str, params: Sequence[_Parameters] | None = None) -> Self: ... + def executemany(self, sql: str, seq_of_params: Sequence[_Parameters] | None = None) -> Self: ... def executescript(self, sql: str) -> Self: ... def fetchall(self) -> list[Any | tuple[Any, ...]]: ... def fetchone(self) -> tuple[Any, ...] | None: ... From f319ebbaddb4c501ca0e14c44b1f6a432171ea27 Mon Sep 17 00:00:00 2001 From: Vizonex <114684698+Vizonex@users.noreply.github.com> Date: Sat, 14 Mar 2026 14:31:51 -0500 Subject: [PATCH 31/38] Update stubs/cysqlite/cysqlite/_cysqlite.pyi Co-authored-by: Brian Schubert --- stubs/cysqlite/cysqlite/_cysqlite.pyi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stubs/cysqlite/cysqlite/_cysqlite.pyi b/stubs/cysqlite/cysqlite/_cysqlite.pyi index c143bd6e58f6..39b1cf28a6ad 100644 --- a/stubs/cysqlite/cysqlite/_cysqlite.pyi +++ b/stubs/cysqlite/cysqlite/_cysqlite.pyi @@ -172,7 +172,7 @@ class Connection(_callable_context_manager): def execute_one(self, sql: str, params: _Parameters | None = ...) -> Row | tuple[Any, ...] | None: ... def execute_scalar(self, sql: str, params: _Parameters | None = ...) -> int | None: ... def execute_simple(self, sql: str, callback: Callable[..., Any] | None = None) -> None: ... - def executemany(self, sql: str, params: Sequence[_Parameters]) -> Cursor: ... + def executemany(self, sql: str, seq_of_params: Sequence[_Parameters]) -> Cursor: ... def executescript(self, sql: str) -> Cursor: ... def file_control(self, op: int, val: int, name: str | Buffer | None = None) -> int: ... def finalize_statements(self) -> None: ... From 6cf26143dd58e0c4b0d519c691c8cde2395fe1ce Mon Sep 17 00:00:00 2001 From: Vizonex <114684698+Vizonex@users.noreply.github.com> Date: Sat, 14 Mar 2026 14:32:27 -0500 Subject: [PATCH 32/38] Update stubs/cysqlite/cysqlite/_cysqlite.pyi Co-authored-by: Brian Schubert --- stubs/cysqlite/cysqlite/_cysqlite.pyi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stubs/cysqlite/cysqlite/_cysqlite.pyi b/stubs/cysqlite/cysqlite/_cysqlite.pyi index 39b1cf28a6ad..61ea3934292a 100644 --- a/stubs/cysqlite/cysqlite/_cysqlite.pyi +++ b/stubs/cysqlite/cysqlite/_cysqlite.pyi @@ -176,7 +176,7 @@ class Connection(_callable_context_manager): def executescript(self, sql: str) -> Cursor: ... def file_control(self, op: int, val: int, name: str | Buffer | None = None) -> int: ... def finalize_statements(self) -> None: ... - def get_columns(self) -> list[Column]: ... + def get_columns(self, table: str, database: str | None = None) -> list[Column]: ... def get_foreign_keys(self, table: str, database: str | None = None) -> list[ForeignKey]: ... def get_foreign_keys_enabled(self) -> int: ... def get_indexes(self, table: str, database: str | None = None) -> list[Index]: ... From dec196b4613acbc240afca2e66602a0f4ed58c61 Mon Sep 17 00:00:00 2001 From: Vizonex <114684698+Vizonex@users.noreply.github.com> Date: Sat, 14 Mar 2026 14:32:38 -0500 Subject: [PATCH 33/38] Update stubs/cysqlite/cysqlite/_cysqlite.pyi Co-authored-by: Brian Schubert --- stubs/cysqlite/cysqlite/_cysqlite.pyi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stubs/cysqlite/cysqlite/_cysqlite.pyi b/stubs/cysqlite/cysqlite/_cysqlite.pyi index 61ea3934292a..a76d3bef571b 100644 --- a/stubs/cysqlite/cysqlite/_cysqlite.pyi +++ b/stubs/cysqlite/cysqlite/_cysqlite.pyi @@ -199,7 +199,7 @@ class Connection(_callable_context_manager): check_table_sizes: bool = False, dry_run: bool = False, ) -> Cursor: ... - def pragma(self, key: str, value: Any = sentinel, database: str | None = None, multi: bool = False) -> None: ... + def pragma(self, key: str, value: Any = sentinel, database: str | None = None, multi: bool = False, permanent: bool = False) -> None: ... def progress(self, fn: Callable[[int, int, bool], None], n: int = 1) -> None: ... def register_adapter(self, python_type: type[Any], fn: Callable[..., Any]) -> None: ... def register_converter(self, data_type: str, fn: Callable[..., Any]) -> None: ... From ba998876e0c0a46176d035115af8272dd6ed75af Mon Sep 17 00:00:00 2001 From: Vizonex <114684698+Vizonex@users.noreply.github.com> Date: Sat, 14 Mar 2026 14:32:48 -0500 Subject: [PATCH 34/38] Update stubs/cysqlite/@tests/stubtest_allowlist.txt Co-authored-by: Brian Schubert --- stubs/cysqlite/@tests/stubtest_allowlist.txt | 9 --------- 1 file changed, 9 deletions(-) diff --git a/stubs/cysqlite/@tests/stubtest_allowlist.txt b/stubs/cysqlite/@tests/stubtest_allowlist.txt index 6e932e12d868..806649bfe4ba 100644 --- a/stubs/cysqlite/@tests/stubtest_allowlist.txt +++ b/stubs/cysqlite/@tests/stubtest_allowlist.txt @@ -1,13 +1,4 @@ cysqlite._cysqlite.__test__ -cysqlite.Connection.execute_simple -cysqlite.Connection.executemany -cysqlite.Connection.get_columns -cysqlite.Connection.pragma -cysqlite._cysqlite.Connection.execute_simple -cysqlite._cysqlite.Connection.executemany -cysqlite._cysqlite.Connection.get_columns -cysqlite._cysqlite.Connection.pragma -cysqlite._cysqlite.Cursor.executemany cysqlite._cysqlite.__reduce_cython__ cysqlite._cysqlite.__setstate_cython__ # Base class method has unused an **kwargs parameter, but user-defined subclasses only From a5c527feaecd544550b6b2dc92154da224150554 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sat, 14 Mar 2026 19:35:56 +0000 Subject: [PATCH 35/38] [pre-commit.ci] auto fixes from pre-commit.com hooks --- stubs/cysqlite/cysqlite/_cysqlite.pyi | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/stubs/cysqlite/cysqlite/_cysqlite.pyi b/stubs/cysqlite/cysqlite/_cysqlite.pyi index a76d3bef571b..f3fb8c850fbf 100644 --- a/stubs/cysqlite/cysqlite/_cysqlite.pyi +++ b/stubs/cysqlite/cysqlite/_cysqlite.pyi @@ -199,7 +199,9 @@ class Connection(_callable_context_manager): check_table_sizes: bool = False, dry_run: bool = False, ) -> Cursor: ... - def pragma(self, key: str, value: Any = sentinel, database: str | None = None, multi: bool = False, permanent: bool = False) -> None: ... + def pragma( + self, key: str, value: Any = sentinel, database: str | None = None, multi: bool = False, permanent: bool = False + ) -> None: ... def progress(self, fn: Callable[[int, int, bool], None], n: int = 1) -> None: ... def register_adapter(self, python_type: type[Any], fn: Callable[..., Any]) -> None: ... def register_converter(self, data_type: str, fn: Callable[..., Any]) -> None: ... From 72426a6cf9589450f3a9e5d3f7ecabee88c6e53e Mon Sep 17 00:00:00 2001 From: Vizonex <114684698+Vizonex@users.noreply.github.com> Date: Sat, 14 Mar 2026 19:39:43 -0500 Subject: [PATCH 36/38] Update stubs/cysqlite/@tests/stubtest_allowlist.txt Co-authored-by: Brian Schubert --- stubs/cysqlite/@tests/stubtest_allowlist.txt | 4 ---- 1 file changed, 4 deletions(-) diff --git a/stubs/cysqlite/@tests/stubtest_allowlist.txt b/stubs/cysqlite/@tests/stubtest_allowlist.txt index 806649bfe4ba..8b38570b67ba 100644 --- a/stubs/cysqlite/@tests/stubtest_allowlist.txt +++ b/stubs/cysqlite/@tests/stubtest_allowlist.txt @@ -1,7 +1,3 @@ cysqlite._cysqlite.__test__ cysqlite._cysqlite.__reduce_cython__ cysqlite._cysqlite.__setstate_cython__ -# Base class method has unused an **kwargs parameter, but user-defined subclasses only -# accept the specific parameters listed in the `params` class attribute. -cysqlite.TableFunction.initialize -cysqlite._cysqlite.TableFunction.initialize From ae81ffe9cea56cf4d79b42a4050e8f9df72ac4d7 Mon Sep 17 00:00:00 2001 From: Vizonex <114684698+Vizonex@users.noreply.github.com> Date: Sat, 14 Mar 2026 19:43:00 -0500 Subject: [PATCH 37/38] Update stubs/cysqlite/cysqlite/aio.pyi --- stubs/cysqlite/cysqlite/aio.pyi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stubs/cysqlite/cysqlite/aio.pyi b/stubs/cysqlite/cysqlite/aio.pyi index b2bdef626666..855518fa0ace 100644 --- a/stubs/cysqlite/cysqlite/aio.pyi +++ b/stubs/cysqlite/cysqlite/aio.pyi @@ -38,7 +38,7 @@ class _CheckPointKwargs(TypedDict, total=False): restart: bool name: str | Buffer | None -SHUTDOWN: object +SHUTDOWN: Final[object] class AsyncConnection: conn: Connection From aefa4f7abdc8e34fe6b272d3d2fcc2bebb3d62ef Mon Sep 17 00:00:00 2001 From: Vizonex Date: Sat, 14 Mar 2026 19:47:08 -0500 Subject: [PATCH 38/38] add Final to aio.pyi --- stubs/cysqlite/cysqlite/aio.pyi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stubs/cysqlite/cysqlite/aio.pyi b/stubs/cysqlite/cysqlite/aio.pyi index 855518fa0ace..6440e85a4e1f 100644 --- a/stubs/cysqlite/cysqlite/aio.pyi +++ b/stubs/cysqlite/cysqlite/aio.pyi @@ -2,7 +2,7 @@ import asyncio import queue import types from collections.abc import Callable, Mapping, Sequence -from typing import Any, Literal, TypeAlias, TypedDict, type_check_only +from typing import Any, Final, Literal, TypeAlias, TypedDict, type_check_only from typing_extensions import Buffer, Self, Unpack from ._cysqlite import Atomic, Connection, Cursor, Row, Savepoint, Transaction