Skip to content

Commit 11a7f54

Browse files
authored
5.0: Update django.contrib.postgres (typeddjango#2078)
* 5.0: Update `django.contrib.postgres` * 5.0: Rename `_Range` to `_RangeT`
1 parent 13390d5 commit 11a7f54

File tree

20 files changed

+170
-137
lines changed

20 files changed

+170
-137
lines changed

django-stubs/contrib/postgres/aggregates/__init__.pyi

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from .general import ArrayAgg as ArrayAgg
22
from .general import BitAnd as BitAnd
33
from .general import BitOr as BitOr
4+
from .general import BitXor as BitXor
45
from .general import BoolAnd as BoolAnd
56
from .general import BoolOr as BoolOr
67
from .general import JSONBAgg as JSONBAgg

django-stubs/contrib/postgres/aggregates/general.pyi

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,30 @@
1-
from typing import ClassVar
1+
from typing import Any, ClassVar
22

33
from django.contrib.postgres.fields import ArrayField
4+
from django.db.backends.base.base import BaseDatabaseWrapper
45
from django.db.models import Aggregate, BooleanField, JSONField, TextField
6+
from django.db.models.expressions import BaseExpression, Combinable
7+
from django.db.models.sql.compiler import SQLCompiler, _AsSqlType
8+
from typing_extensions import Self
59

610
from .mixins import OrderableAggMixin
711

812
class ArrayAgg(OrderableAggMixin, Aggregate):
913
@property
1014
def output_field(self) -> ArrayField: ...
15+
def resolve_expression(
16+
self,
17+
query: Any = ...,
18+
allow_joins: bool = ...,
19+
reuse: set[str] | None = ...,
20+
summarize: bool = ...,
21+
for_save: bool = ...,
22+
) -> Self: ...
23+
def as_sql(self, compiler: SQLCompiler, connection: BaseDatabaseWrapper) -> _AsSqlType: ... # type: ignore[override]
1124

1225
class BitAnd(Aggregate): ...
1326
class BitOr(Aggregate): ...
27+
class BitXor(Aggregate): ...
1428

1529
class BoolAnd(Aggregate):
1630
output_field: ClassVar[BooleanField]
@@ -20,6 +34,28 @@ class BoolOr(Aggregate):
2034

2135
class JSONBAgg(OrderableAggMixin, Aggregate):
2236
output_field: ClassVar[JSONField]
37+
def __init__(
38+
self, *expressions: BaseExpression | Combinable | str, default: Any | None = ..., **extra: Any
39+
) -> None: ...
40+
def resolve_expression(
41+
self,
42+
query: Any = ...,
43+
allow_joins: bool = ...,
44+
reuse: set[str] | None = ...,
45+
summarize: bool = ...,
46+
for_save: bool = ...,
47+
) -> Self: ...
48+
def as_sql(self, compiler: SQLCompiler, connection: BaseDatabaseWrapper) -> _AsSqlType: ... # type: ignore[override]
2349

2450
class StringAgg(OrderableAggMixin, Aggregate):
2551
output_field: ClassVar[TextField]
52+
def __init__(self, expression: BaseExpression | Combinable | str, delimiter: Any, **extra: Any) -> None: ...
53+
def resolve_expression(
54+
self,
55+
query: Any = ...,
56+
allow_joins: bool = ...,
57+
reuse: set[str] | None = ...,
58+
summarize: bool = ...,
59+
for_save: bool = ...,
60+
) -> Self: ...
61+
def as_sql(self, compiler: SQLCompiler, connection: BaseDatabaseWrapper) -> _AsSqlType: ... # type: ignore[override]
Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,17 @@
1-
class OrderableAggMixin: ...
1+
from collections.abc import Sequence
2+
from typing import Any
3+
4+
from django.db.backends.base.base import BaseDatabaseWrapper
5+
from django.db.models.expressions import BaseExpression, Combinable, Expression, OrderByList
6+
from django.db.models.sql.compiler import SQLCompiler, _AsSqlType
7+
from typing_extensions import Self
8+
9+
class OrderableAggMixin:
10+
order_by: OrderByList
11+
def __init__(
12+
self, *expressions: BaseExpression | Combinable | str, ordering: Sequence[str] = ..., **extra: Any
13+
) -> None: ...
14+
def resolve_expression(self, *args: Any, **kwargs: Any) -> Self: ...
15+
def get_source_expressions(self) -> list[Expression]: ...
16+
def set_source_expressions(self, exprs: Sequence[Combinable]) -> None: ...
17+
def as_sql(self, compiler: SQLCompiler, connection: BaseDatabaseWrapper) -> _AsSqlType: ...

django-stubs/contrib/postgres/aggregates/statistics.pyi

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,20 @@
1-
from typing import ClassVar
1+
from typing import Any, ClassVar
22

33
from django.db.models import Aggregate, FloatField, IntegerField
44

55
class StatAggregate(Aggregate):
66
output_field: ClassVar[FloatField]
7+
def __init__(
8+
self, y: Any, x: Any, output_field: Any | None = ..., filter: Any | None = ..., default: Any | None = ...
9+
) -> None: ...
710

811
class Corr(StatAggregate): ...
9-
class CovarPop(StatAggregate): ...
12+
13+
class CovarPop(StatAggregate):
14+
def __init__(
15+
self, y: Any, x: Any, sample: bool = ..., filter: Any | None = ..., default: Any | None = ...
16+
) -> None: ...
17+
1018
class RegrAvgX(StatAggregate): ...
1119
class RegrAvgY(StatAggregate): ...
1220

django-stubs/contrib/postgres/constraints.pyi

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,18 @@
1-
from collections.abc import Sequence
1+
from collections.abc import Iterable, Sequence
22

3+
from django.db.backends.base.schema import BaseDatabaseSchemaEditor
34
from django.db.models import Deferrable
5+
from django.db.models.base import Model
46
from django.db.models.constraints import BaseConstraint
57
from django.db.models.expressions import Combinable
8+
from django.db.models.indexes import IndexExpression
69
from django.db.models.query_utils import Q
710
from django.utils.functional import _StrOrPromise
811

12+
class ExclusionConstraintExpression(IndexExpression): ...
13+
914
class ExclusionConstraint(BaseConstraint):
15+
template: str
1016
expressions: Sequence[tuple[str | Combinable, str]]
1117
index_type: str
1218
condition: Q | None
@@ -19,7 +25,10 @@ class ExclusionConstraint(BaseConstraint):
1925
condition: Q | None = ...,
2026
deferrable: Deferrable | None = ...,
2127
include: list[str] | tuple[str] | None = ...,
22-
opclasses: list[str] | tuple[str] = ...,
2328
violation_error_code: str | None = ...,
2429
violation_error_message: _StrOrPromise | None = ...,
2530
) -> None: ...
31+
def check_supported(self, schema_editor: BaseDatabaseSchemaEditor) -> None: ...
32+
def validate(
33+
self, model: type[Model], instance: Model, exclude: Iterable[str] | None = ..., using: str = ...
34+
) -> None: ...

django-stubs/contrib/postgres/fields/array.pyi

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
from collections.abc import Iterable, Sequence
22
from typing import Any, TypeVar
33

4+
from _typeshed import Unused
45
from django.core.validators import _ValidatorCallable
5-
from django.db.models import Field, Transform
6+
from django.db.backends.base.base import BaseDatabaseWrapper
7+
from django.db.models import Field
68
from django.db.models.expressions import Combinable, Expression
79
from django.db.models.fields import NOT_PROVIDED, _ErrorMessagesDict, _ErrorMessagesMapping
810
from django.db.models.fields.mixins import CheckFieldDefaultMixin
11+
from django.db.models.lookups import Transform
912
from django.utils.choices import _Choices
1013
from django.utils.functional import _StrOrPromise
1114

@@ -55,4 +58,6 @@ class ArrayField(CheckFieldDefaultMixin, Field[_ST, _GT]):
5558
) -> None: ...
5659
@property
5760
def description(self) -> str: ... # type: ignore[override]
58-
def get_transform(self, name: Any) -> type[Transform] | None: ...
61+
def cast_db_type(self, connection: BaseDatabaseWrapper) -> str: ...
62+
def get_placeholder(self, value: Unused, compiler: Unused, connection: BaseDatabaseWrapper) -> str: ...
63+
def get_transform(self, name: str) -> type[Transform] | None: ...
Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
1+
from django.db.backends.base.base import BaseDatabaseWrapper
12
from django.db.models.fields import CharField, EmailField, TextField
23

3-
class CIText: ...
4+
class CIText:
5+
def get_internal_type(self) -> str: ...
6+
def db_type(self, connection: BaseDatabaseWrapper) -> str: ...
7+
48
class CICharField(CIText, CharField): ...
59
class CIEmailField(CIText, EmailField): ...
610
class CITextField(CIText, TextField): ...

django-stubs/contrib/postgres/fields/hstore.pyi

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
from typing import Any, ClassVar
22

33
from django.contrib.postgres.fields.array import ArrayField
4+
from django.db.backends.base.base import BaseDatabaseWrapper
45
from django.db.models import Field, TextField, Transform
56
from django.db.models.fields.mixins import CheckFieldDefaultMixin
7+
from django.db.models.sql.compiler import SQLCompiler, _AsSqlType
68

79
class HStoreField(CheckFieldDefaultMixin, Field):
810
def get_transform(self, name: str) -> Any: ...
@@ -11,6 +13,7 @@ class KeyTransform(Transform):
1113
output_field: ClassVar[TextField]
1214

1315
def __init__(self, key_name: str, *args: Any, **kwargs: Any) -> None: ...
16+
def as_sql(self, compiler: SQLCompiler, connection: BaseDatabaseWrapper) -> _AsSqlType: ... # type: ignore[override]
1417

1518
class KeyTransformFactory:
1619
def __init__(self, key_name: str) -> None: ...
Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,3 @@
11
from django.db.models import JSONField as BuiltinJSONField
2-
from django.db.models.fields.json import KeyTextTransform as BuiltinKeyTextTransform
3-
from django.db.models.fields.json import KeyTransform as BuiltinKeyTransform
42

5-
# All deprecated
63
class JSONField(BuiltinJSONField): ...
7-
class KeyTransform(BuiltinKeyTransform): ...
8-
class KeyTextTransform(BuiltinKeyTextTransform): ...

django-stubs/contrib/postgres/fields/ranges.pyi

Lines changed: 27 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
1-
from typing import Any, ClassVar, Literal
1+
from typing import Any, ClassVar, Literal, TypeVar
22

3+
from _typeshed import Unused
4+
from django.contrib.postgres import forms
35
from django.db import models
6+
from django.db.backends.base.base import BaseDatabaseWrapper
47
from django.db.models.lookups import PostgresOperatorLookup
8+
from django.db.models.sql.compiler import SQLCompiler, _AsSqlType
59
from psycopg2.extras import DateRange, DateTimeTZRange, NumericRange, Range # type: ignore [import-untyped]
610

711
class RangeBoundary(models.Expression):
@@ -21,32 +25,41 @@ class RangeOperators:
2125
NOT_GT: Literal["&<"]
2226
ADJACENT_TO: Literal["-|-"]
2327

24-
class RangeField(models.Field):
28+
_RangeT = TypeVar("_RangeT", bound=Range[Any])
29+
30+
class RangeField(models.Field[Any, _RangeT]):
2531
empty_strings_allowed: bool
26-
base_field: models.Field
27-
range_type: type[Range]
32+
base_field: type[models.Field]
33+
range_type: type[_RangeT]
2834
def get_prep_value(self, value: Any) -> Any | None: ...
35+
def get_placeholder(self, value: Unused, compiler: Unused, connection: BaseDatabaseWrapper) -> str: ...
2936
def to_python(self, value: Any) -> Any: ...
3037

31-
class IntegerRangeField(RangeField):
32-
def __get__(self, instance: Any, owner: Any) -> NumericRange: ...
38+
class IntegerRangeField(RangeField[NumericRange]):
39+
base_field: type[models.IntegerField]
40+
form_field: type[forms.IntegerRangeField]
3341

34-
class BigIntegerRangeField(RangeField):
35-
def __get__(self, instance: Any, owner: Any) -> NumericRange: ...
42+
class BigIntegerRangeField(RangeField[NumericRange]):
43+
base_field: type[models.BigIntegerField]
44+
form_field: type[forms.IntegerRangeField]
3645

37-
class DecimalRangeField(RangeField):
38-
def __get__(self, instance: Any, owner: Any) -> NumericRange: ...
46+
class DecimalRangeField(RangeField[NumericRange]):
47+
base_field: type[models.DecimalField]
48+
form_field: type[forms.DecimalRangeField]
3949

40-
class DateTimeRangeField(RangeField):
41-
def __get__(self, instance: Any, owner: Any) -> DateTimeTZRange: ...
50+
class DateTimeRangeField(RangeField[DateTimeTZRange]):
51+
base_field: type[models.DecimalField]
52+
form_field: type[forms.DecimalRangeField]
4253

43-
class DateRangeField(RangeField):
44-
def __get__(self, instance: Any, owner: Any) -> DateRange: ...
54+
class DateRangeField(RangeField[DateRange]):
55+
base_field: type[models.DateField]
56+
form_field: type[forms.DateRangeField]
4557

4658
class DateTimeRangeContains(PostgresOperatorLookup): ...
4759

4860
class RangeContainedBy(PostgresOperatorLookup):
4961
type_mapping: dict[str, str]
62+
def process_lhs(self, compiler: SQLCompiler, connection: BaseDatabaseWrapper) -> _AsSqlType: ... # type: ignore[override]
5063

5164
class FullyLessThan(PostgresOperatorLookup): ...
5265
class FullGreaterThan(PostgresOperatorLookup): ...

0 commit comments

Comments
 (0)