Skip to content

Commit 5474e62

Browse files
committed
Improve types of BaseDatabaseOperations
1 parent fd3e0d1 commit 5474e62

File tree

5 files changed

+23
-35
lines changed

5 files changed

+23
-35
lines changed

django-stubs/contrib/gis/db/backends/base/operations.pyi

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
from typing import Any
22

3+
from django.db.backends.base.operations import _Converter
4+
from django.db.models.expressions import Expression
35
from django.utils.functional import cached_property
46

57
class BaseSpatialOperations:
@@ -24,13 +26,13 @@ class BaseSpatialOperations:
2426
def geo_db_type(self, f: Any) -> Any: ...
2527
def get_distance(self, f: Any, value: Any, lookup_type: Any) -> Any: ...
2628
def get_geom_placeholder(self, f: Any, value: Any, compiler: Any) -> Any: ...
27-
def check_expression_support(self, expression: Any) -> None: ...
29+
def check_expression_support(self, expression: Expression) -> None: ...
2830
def spatial_aggregate_name(self, agg_name: Any) -> Any: ...
2931
def spatial_function_name(self, func_name: Any) -> Any: ...
3032
def geometry_columns(self) -> Any: ...
3133
def spatial_ref_sys(self) -> Any: ...
3234
distance_expr_for_lookup: Any
33-
def get_db_converters(self, expression: Any) -> Any: ...
35+
def get_db_converters(self, expression: Expression) -> list[_Converter]: ...
3436
def get_geometry_converter(self, expression: Any) -> Any: ...
3537
def get_area_att_for_field(self, field: Any) -> Any: ...
3638
def get_distance_att_for_field(self, field: Any) -> Any: ...

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

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import json
2-
from collections.abc import Iterable, Sequence
2+
from collections.abc import Callable, Sequence
33
from datetime import date, time, timedelta
44
from datetime import datetime as real_datetime
55
from decimal import Decimal
@@ -13,6 +13,9 @@ from django.db.models.constants import OnConflict
1313
from django.db.models.expressions import Case, Col, Expression
1414
from django.db.models.fields import Field
1515
from django.db.models.sql.compiler import SQLCompiler
16+
from typing_extensions import TypeAlias
17+
18+
_Converter: TypeAlias = Callable[[Any, Expression, BaseDatabaseWrapper], Any]
1619

1720
class BaseDatabaseOperations:
1821
compiler_module: str
@@ -57,7 +60,7 @@ class BaseDatabaseOperations:
5760
def pk_default_value(self) -> str: ...
5861
def prepare_sql_script(self, sql: Any) -> list[str]: ...
5962
def process_clob(self, value: str) -> str: ...
60-
def return_insert_columns(self, fields: Any) -> Any: ...
63+
def return_insert_columns(self, fields: list[Field[Any, Any]]) -> tuple[str, list[Any]]: ...
6164
def compiler(self, compiler_name: str) -> type[SQLCompiler]: ...
6265
def quote_name(self, name: str) -> str: ...
6366
def regex_lookup(self, lookup_type: str) -> str: ...
@@ -68,14 +71,14 @@ class BaseDatabaseOperations:
6871
def sql_flush(
6972
self, style: Style, tables: Sequence[str], *, reset_sequences: bool = ..., allow_cascade: bool = ...
7073
) -> list[str]: ...
71-
def execute_sql_flush(self, sql_list: Iterable[str]) -> None: ...
72-
def sequence_reset_by_name_sql(self, style: Style | None, sequences: list[Any]) -> list[Any]: ...
73-
def sequence_reset_sql(self, style: Style, model_list: Sequence[type[Model]]) -> list[Any]: ...
74+
def execute_sql_flush(self, sql_list: list[str]) -> None: ...
75+
def sequence_reset_by_name_sql(self, style: Style, sequences: list[dict[str, str | None]]) -> list[str]: ...
76+
def sequence_reset_sql(self, style: Style, model_list: list[type[Model]]) -> list[str]: ...
7477
def start_transaction_sql(self) -> str: ...
7578
def end_transaction_sql(self, success: bool = ...) -> str: ...
76-
def tablespace_sql(self, tablespace: str | None, inline: bool = ...) -> str: ...
77-
def prep_for_like_query(self, x: str) -> str: ...
78-
prep_for_iexact_query: Any
79+
def tablespace_sql(self, tablespace: str, inline: bool = ...) -> str: ...
80+
def prep_for_like_query(self, x: object) -> str: ...
81+
def prep_for_iexact_query(self, x: object) -> str: ...
7982
def validate_autopk_value(self, value: int) -> int: ...
8083
def adapt_unknown_value(self, value: Any) -> Any: ...
8184
def adapt_datefield_value(self, value: date | None) -> str | None: ...
@@ -89,14 +92,14 @@ class BaseDatabaseOperations:
8992
def adapt_integerfield_value(self, value: Any, internal_type: Any) -> Any: ...
9093
def year_lookup_bounds_for_date_field(self, value: int, iso_year: bool = ...) -> list[str]: ...
9194
def year_lookup_bounds_for_datetime_field(self, value: int, iso_year: bool = ...) -> list[str]: ...
92-
def get_db_converters(self, expression: Expression) -> list[Any]: ...
95+
def get_db_converters(self, expression: Expression) -> list[_Converter]: ...
9396
def convert_durationfield_value(
9497
self, value: float | None, expression: Expression, connection: BaseDatabaseWrapper
9598
) -> timedelta | None: ...
96-
def check_expression_support(self, expression: Any) -> None: ...
97-
def conditional_expression_supported_in_where_clause(self, expression: Any) -> bool: ...
99+
def check_expression_support(self, expression: Expression) -> None: ...
100+
def conditional_expression_supported_in_where_clause(self, expression: Expression) -> bool: ...
98101
def combine_expression(self, connector: str, sub_expressions: list[str]) -> str: ...
99-
def combine_duration_expression(self, connector: Any, sub_expressions: Any) -> str: ...
102+
def combine_duration_expression(self, connector: str, sub_expressions: list[str]) -> str: ...
100103
def binary_placeholder_sql(self, value: Case | None) -> str: ...
101104
def modify_insert_params(self, placeholder: str, params: Any) -> Any: ...
102105
def integer_field_range(self, internal_type: Any) -> tuple[int, int]: ...

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

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,22 +23,14 @@ class DatabaseOperations(BaseDatabaseOperations):
2323
def force_no_ordering(self) -> Any: ...
2424
def last_executed_query(self, cursor: Any, sql: Any, params: Any) -> Any: ...
2525
def no_limit_value(self) -> Any: ...
26-
def quote_name(self, name: str) -> Any: ...
27-
def return_insert_columns(self, fields: Any) -> Any: ...
28-
def sequence_reset_by_name_sql(self, style: Any, sequences: Any) -> Any: ...
29-
def validate_autopk_value(self, value: Any) -> Any: ...
3026
def adapt_datetimefield_value(self, value: Any) -> Any: ...
3127
def adapt_timefield_value(self, value: Any) -> Any: ...
3228
def max_name_length(self) -> Any: ...
3329
def bulk_insert_sql(self, fields: Any, placeholder_rows: Any) -> Any: ...
34-
def combine_expression(self, connector: Any, sub_expressions: Any) -> Any: ...
35-
def get_db_converters(self, expression: Any) -> Any: ...
3630
def convert_booleanfield_value(self, value: Any, expression: Any, connection: Any) -> Any: ...
3731
def convert_datetimefield_value(self, value: Any, expression: Any, connection: Any) -> Any: ...
3832
def convert_uuidfield_value(self, value: Any, expression: Any, connection: Any) -> Any: ...
39-
def binary_placeholder_sql(self, value: Any) -> Any: ...
4033
def subtract_temporals(self, internal_type: Any, lhs: Any, rhs: Any) -> Any: ...
4134
def explain_query_prefix(self, format: Any | None = ..., **options: Any) -> Any: ...
42-
def regex_lookup(self, lookup_type: str) -> Any: ...
4335
def insert_statement(self, on_conflict: OnConflict | None = ...) -> str: ...
4436
def lookup_cast(self, lookup_type: str, internal_type: Any | None = ...) -> Any: ...

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

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ class DatabaseOperations(BaseDatabaseOperations):
1717
def datetime_extract_sql(self, lookup_type: str, sql: str, params: Any, tzname: str | None) -> tuple[str, Any]: ...
1818
def datetime_trunc_sql(self, lookup_type: str, sql: str, params: Any, tzname: str | None) -> str: ...
1919
def time_trunc_sql(self, lookup_type: str, sql: str, params: Any, tzname: str | None = ...) -> str: ...
20-
def get_db_converters(self, expression: Any) -> list[Any]: ...
2120
def convert_textfield_value(self, value: Any, expression: Any, connection: Any) -> Any: ...
2221
def convert_binaryfield_value(self, value: Any, expression: Any, connection: Any) -> Any: ...
2322
def convert_booleanfield_value(self, value: Any, expression: Any, connection: Any) -> Any: ...
@@ -40,20 +39,11 @@ class DatabaseOperations(BaseDatabaseOperations):
4039
def max_in_list_size(self) -> int: ...
4140
def max_name_length(self) -> int: ...
4241
def pk_default_value(self) -> str: ...
43-
def prep_for_iexact_query(self, x: Any) -> str: ...
4442
def process_clob(self, value: Any) -> Any: ...
45-
def quote_name(self, name: str) -> str: ...
46-
def regex_lookup(self, lookup_type: str) -> str: ...
47-
def return_insert_columns(self, fields: Any) -> Any: ...
48-
def sequence_reset_by_name_sql(self, style: Any, sequences: Any) -> list[str]: ...
49-
def sequence_reset_sql(self, style: Any, model_list: Any) -> list[str]: ...
50-
def start_transaction_sql(self) -> str: ...
51-
def tablespace_sql(self, tablespace: Any, inline: bool = ...) -> str: ...
5243
def adapt_datefield_value(self, value: Any) -> Any: ...
5344
def adapt_datetimefield_value(self, value: Any) -> Any: ...
5445
def adapt_timefield_value(self, value: Any) -> Any: ...
5546
def combine_expression(self, connector: Any, sub_expressions: Any) -> Any: ...
5647
def bulk_insert_sql(self, fields: Any, placeholder_rows: Any) -> str: ...
5748
def subtract_temporals(self, internal_type: Any, lhs: Any, rhs: Any) -> Any: ...
5849
def bulk_batch_size(self, fields: Any, objs: Any) -> int: ...
59-
def conditional_expression_supported_in_where_clause(self, expression: Any) -> bool: ...

django-stubs/db/models/expressions.pyi

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
import datetime
2-
from collections.abc import Callable, Iterable, Iterator, Mapping, Sequence
2+
from collections.abc import Iterable, Iterator, Mapping, Sequence
33
from decimal import Decimal
44
from typing import Any, ClassVar, Generic, Literal, TypeVar
55

66
from django.db.backends.base.base import BaseDatabaseWrapper
7+
from django.db.backends.base.operations import _Converter
78
from django.db.models import Q, fields
89
from django.db.models.fields import Field
910
from django.db.models.lookups import Lookup, Transform
@@ -63,7 +64,7 @@ class BaseExpression:
6364
window_compatible: bool
6465
allowed_default: bool
6566
def __init__(self, output_field: Field | None = ...) -> None: ...
66-
def get_db_converters(self, connection: BaseDatabaseWrapper) -> list[Callable]: ...
67+
def get_db_converters(self, connection: BaseDatabaseWrapper) -> list[_Converter]: ...
6768
def get_source_expressions(self) -> list[Any]: ...
6869
def set_source_expressions(self, exprs: Sequence[Combinable | Expression]) -> None: ...
6970
@cached_property
@@ -89,7 +90,7 @@ class BaseExpression:
8990
@cached_property
9091
def output_field(self) -> Field: ...
9192
@cached_property
92-
def convert_value(self) -> Callable: ...
93+
def convert_value(self) -> _Converter: ...
9394
def get_lookup(self, lookup: str) -> type[Lookup] | None: ...
9495
def get_transform(self, name: str) -> type[Transform] | None: ...
9596
def relabeled_clone(self, change_map: Mapping[str, str]) -> Self: ...

0 commit comments

Comments
 (0)