Skip to content

Commit e36579c

Browse files
Django 6.0: update SQLite backend stubs (#3072)
Signed-off-by: Emmanuel Ferdman <emmanuelferdman@gmail.com>
1 parent 5086816 commit e36579c

9 files changed

Lines changed: 57 additions & 35 deletions

File tree

django-stubs/contrib/gis/db/backends/spatialite/schema.pyi

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ class SpatialiteSchemaEditor(DatabaseSchemaEditor):
2121
) -> tuple[None, None] | tuple[str, list[Any]]: ...
2222
def remove_geometry_metadata(self, model: type[Model], field: Field) -> None: ...
2323
def create_model(self, model: type[Model]) -> None: ...
24-
def delete_model(self, model: type[Model], **kwargs: Any) -> None: ...
24+
def delete_model(self, model: type[Model], **kwargs: Any) -> None: ... # type: ignore[override]
2525
def add_field(self, model: type[Model], field: Field) -> None: ...
2626
def remove_field(self, model: type[Model], field: Field) -> None: ...
2727
def alter_db_table(

django-stubs/db/backends/sqlite3/base.pyi

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1-
from collections.abc import Callable
1+
from collections.abc import Callable, Iterable
2+
from datetime import date, datetime
23
from sqlite3 import dbapi2 as Database
4+
from types import ModuleType
35
from typing import Any, TypeVar
46

57
from django.db.backends.base.base import BaseDatabaseWrapper
@@ -9,10 +11,13 @@ from .creation import DatabaseCreation
911
from .features import DatabaseFeatures
1012
from .introspection import DatabaseIntrospection
1113
from .operations import DatabaseOperations
14+
from .schema import DatabaseSchemaEditor
1215

1316
_R = TypeVar("_R")
1417

1518
def decoder(conv_func: Callable[[str], _R]) -> Callable[[bytes], _R]: ...
19+
def adapt_date(val: date) -> str: ...
20+
def adapt_datetime(val: datetime) -> str: ...
1621

1722
class DatabaseWrapper(BaseDatabaseWrapper):
1823
client: DatabaseClient
@@ -21,6 +26,11 @@ class DatabaseWrapper(BaseDatabaseWrapper):
2126
introspection: DatabaseIntrospection
2227
ops: DatabaseOperations
2328

29+
pattern_esc: str
30+
pattern_ops: dict[str, str]
31+
transaction_modes: frozenset[str]
32+
Database: ModuleType
33+
SchemaEditorClass: type[DatabaseSchemaEditor]
2434
client_class: type[DatabaseClient]
2535
creation_class: type[DatabaseCreation]
2636
features_class: type[DatabaseFeatures]
@@ -31,4 +41,7 @@ class DatabaseWrapper(BaseDatabaseWrapper):
3141

3242
FORMAT_QMARK_REGEX: Any
3343

34-
class SQLiteCursorWrapper(Database.Cursor): ...
44+
class SQLiteCursorWrapper(Database.Cursor):
45+
def execute(self, query: str, params: Iterable[Any] | None = None) -> SQLiteCursorWrapper: ... # type: ignore[override]
46+
def executemany(self, query: str, param_list: Iterable[Iterable[Any]]) -> SQLiteCursorWrapper: ... # type: ignore[override]
47+
def convert_query(self, query: str, *, param_names: Any = None) -> str: ...
Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,28 @@
11
from django.db.backends.base.features import BaseDatabaseFeatures
22
from django.db.backends.sqlite3.base import DatabaseWrapper
3+
from django.utils.functional import cached_property
34

45
class DatabaseFeatures(BaseDatabaseFeatures):
56
connection: DatabaseWrapper
7+
can_alter_table_drop_column: bool
68
supports_aggregate_order_by_clause: bool
79
supports_aggregate_distinct_multiple_argument: bool
810
supports_any_value: bool
9-
@property
10-
def can_return_rows_from_update(self) -> bool: ... # type: ignore[override]
11+
@cached_property
12+
def django_test_skips(self) -> dict[str, set[str]]: ... # type: ignore[override]
13+
@cached_property
14+
def introspected_field_types(self) -> dict[str, str]: ... # type: ignore[override]
1115
@property
1216
def max_query_params(self) -> int: ... # type: ignore[override]
17+
@cached_property
18+
def supports_json_field(self) -> bool: ... # type: ignore[override]
19+
@property
20+
def can_introspect_json_field(self) -> bool: ... # type: ignore[override]
21+
@property
22+
def has_json_object_function(self) -> bool: ... # type: ignore[override]
23+
@cached_property
24+
def can_return_columns_from_insert(self) -> bool: ... # type: ignore[override]
25+
@property
26+
def can_return_rows_from_bulk_insert(self) -> bool: ... # type: ignore[override]
27+
@property
28+
def can_return_rows_from_update(self) -> bool: ... # type: ignore[override]

django-stubs/db/backends/sqlite3/introspection.pyi

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,21 @@
1-
from typing import Any
1+
from typing import Any, NamedTuple
22

33
from django.db.backends.base.introspection import BaseDatabaseIntrospection
44
from django.db.backends.sqlite3.base import DatabaseWrapper
55

6+
class FieldInfo(NamedTuple):
7+
name: str
8+
type_code: int
9+
display_size: int | None
10+
internal_size: int | None
11+
precision: int | None
12+
scale: int | None
13+
null_ok: bool
14+
default: str | None
15+
collation: str | None
16+
pk: bool
17+
has_json_constraint: bool
18+
619
field_size_re: Any
720

821
def get_field_size(name: str) -> int | None: ...

django-stubs/db/backends/sqlite3/operations.pyi

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,13 @@ from django.db.backends.base.operations import BaseDatabaseOperations
66

77
class DatabaseOperations(BaseDatabaseOperations):
88
jsonfield_datatype_values: frozenset[str]
9-
def convert_booleanfield_value(self, value: Any, expression: Any, connection: Any) -> Any: ...
10-
def convert_datefield_value(self, value: Any, expression: Any, connection: Any) -> Any: ...
119
def convert_datetimefield_value(self, value: Any, expression: Any, connection: Any) -> Any | None: ...
10+
def convert_datefield_value(self, value: Any, expression: Any, connection: Any) -> Any: ...
1211
def convert_timefield_value(self, value: Any, expression: Any, connection: Any) -> Any: ...
13-
def convert_uuidfield_value(self, value: Any, expression: Any, connection: Any) -> UUID | None: ...
14-
def fetch_returned_insert_rows(self, cursor: Any) -> Any: ...
1512
def get_decimalfield_converter(
1613
self,
1714
expression: Any,
1815
) -> Callable: ...
16+
def convert_uuidfield_value(self, value: Any, expression: Any, connection: Any) -> UUID | None: ...
17+
def convert_booleanfield_value(self, value: Any, expression: Any, connection: Any) -> Any: ...
18+
def format_json_path_numeric_index(self, num: int) -> str: ...
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
from django.db.backends.base.schema import BaseDatabaseSchemaEditor
22
from django.db.backends.sqlite3.base import DatabaseWrapper
3+
from django.db.models.base import Model
34

45
class DatabaseSchemaEditor(BaseDatabaseSchemaEditor):
56
connection: DatabaseWrapper
7+
sql_create_fk: None # type: ignore[assignment]
8+
sql_alter_table_comment: None # type: ignore[assignment]
9+
sql_alter_column_comment: None # type: ignore[assignment]
10+
def delete_model(self, model: type[Model], handle_autom2m: bool = True) -> None: ...

scripts/stubtest/allowlist_todo.txt

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,6 @@ django.contrib.gis.db.backends.postgis.operations.PostGISOperations.convert_exte
102102
django.contrib.gis.db.backends.postgis.operations.PostGISOperations.convert_extent3d
103103
django.contrib.gis.db.backends.postgis.schema.PostGISSchemaEditor.rast_index_template
104104
django.contrib.gis.db.backends.spatialite.base.DatabaseWrapper.ops
105-
django.contrib.gis.db.backends.spatialite.features.DatabaseFeatures.django_test_skips
106105
django.contrib.gis.db.backends.spatialite.operations.SpatiaLiteOperations.convert_extent
107106
django.contrib.gis.db.backends.spatialite.operations.SpatiaLiteOperations.from_text
108107
django.contrib.gis.db.backends.spatialite.operations.SpatiaLiteOperations.geom_lib_version
@@ -335,26 +334,7 @@ django.db.backends.oracle.features.DatabaseFeatures.introspected_field_types
335334
django.db.backends.oracle.features.DatabaseFeatures.supports_collation_on_charfield
336335
django.db.backends.oracle.features.DatabaseFeatures.supports_frame_exclusion
337336
django.db.backends.postgresql.base.DatabaseWrapper.ops
338-
django.db.backends.sqlite3.base.DatabaseWrapper.Database
339337
django.db.backends.sqlite3.base.DatabaseWrapper.ops
340-
django.db.backends.sqlite3.base.DatabaseWrapper.pattern_esc
341-
django.db.backends.sqlite3.base.DatabaseWrapper.pattern_ops
342-
django.db.backends.sqlite3.base.SQLiteCursorWrapper.convert_query
343-
django.db.backends.sqlite3.base.SQLiteCursorWrapper.execute
344-
django.db.backends.sqlite3.base.SQLiteCursorWrapper.executemany
345-
django.db.backends.sqlite3.base.adapt_date
346-
django.db.backends.sqlite3.base.adapt_datetime
347-
django.db.backends.sqlite3.features.DatabaseFeatures.can_alter_table_drop_column
348-
django.db.backends.sqlite3.features.DatabaseFeatures.can_introspect_json_field
349-
django.db.backends.sqlite3.features.DatabaseFeatures.can_return_columns_from_insert
350-
django.db.backends.sqlite3.features.DatabaseFeatures.can_return_rows_from_bulk_insert
351-
django.db.backends.sqlite3.features.DatabaseFeatures.django_test_skips
352-
django.db.backends.sqlite3.features.DatabaseFeatures.has_json_object_function
353-
django.db.backends.sqlite3.features.DatabaseFeatures.introspected_field_types
354-
django.db.backends.sqlite3.features.DatabaseFeatures.supports_json_field
355-
django.db.backends.sqlite3.introspection.FieldInfo
356-
django.db.backends.sqlite3.schema.DatabaseSchemaEditor.delete_model
357-
django.db.backends.sqlite3.schema.DatabaseSchemaEditor.sql_create_fk
358338
django.db.backends.utils.debug_transaction
359339
django.db.backends.utils.names_digest
360340
django.db.backends.utils.split_tzname_delta

scripts/stubtest/allowlist_todo_django52.txt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,6 @@ django.db.backends.oracle.features.DatabaseFeatures.supports_primitives_in_json_
5252
django.db.backends.oracle.features.DatabaseFeatures.supports_tuple_lookups
5353
django.db.backends.oracle.features.DatabaseFeatures.test_collations
5454
django.db.backends.oracle.introspection.TableInfo
55-
django.db.backends.sqlite3.base.DatabaseWrapper.transaction_modes
56-
django.db.backends.sqlite3.schema.DatabaseSchemaEditor.sql_alter_column_comment
57-
django.db.backends.sqlite3.schema.DatabaseSchemaEditor.sql_alter_table_comment
5855
django.db.migrations.autodetector.OperationDependency
5956
django.db.models.Count.allows_composite_expressions
6057
django.db.models.Field.has_db_default

scripts/stubtest/allowlist_todo_django60.txt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,6 @@ django.db.backends.oracle.operations.DatabaseOperations.returning_columns
2828
django.db.backends.postgresql.compiler.SQLUpdateCompiler.execute_returning_sql
2929
django.db.backends.postgresql.compiler.SQLUpdateCompiler.returning_fields
3030
django.db.backends.postgresql.compiler.SQLUpdateCompiler.returning_params
31-
django.db.backends.sqlite3.operations.DatabaseOperations.fetch_returned_insert_rows
32-
django.db.backends.sqlite3.operations.DatabaseOperations.format_json_path_numeric_index
3331
django.db.models.ForeignObjectRel.get_joining_columns
3432
django.db.models.GeneratedField.referenced_fields
3533
django.db.models.Model._do_update

0 commit comments

Comments
 (0)