Skip to content

Commit 3a1f139

Browse files
Make error_messages and default_error_messages types stricter (#1592)
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
1 parent 85e1f3f commit 3a1f139

File tree

13 files changed

+79
-75
lines changed

13 files changed

+79
-75
lines changed

django-stubs/contrib/auth/forms.pyi

+6-6
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ from django.contrib.auth.base_user import AbstractBaseUser
66
from django.contrib.auth.tokens import PasswordResetTokenGenerator
77
from django.core.exceptions import ValidationError
88
from django.db import models
9-
from django.db.models.fields import _ErrorMessagesT
9+
from django.db.models.fields import _ErrorMessagesDict
1010
from django.forms.fields import _ClassLevelWidgetT
1111
from django.forms.widgets import Widget
1212
from django.http.request import HttpRequest
@@ -28,7 +28,7 @@ class UsernameField(forms.CharField):
2828
def widget_attrs(self, widget: Widget) -> dict[str, Any]: ...
2929

3030
class BaseUserCreationForm(forms.ModelForm[_User]):
31-
error_messages: _ErrorMessagesT
31+
error_messages: _ErrorMessagesDict
3232
password1: forms.Field
3333
password2: forms.Field
3434
def __init__(self, *args: Any, **kwargs: Any) -> None: ...
@@ -45,7 +45,7 @@ class UserChangeForm(forms.ModelForm[_User]):
4545
class AuthenticationForm(forms.Form):
4646
username: forms.Field
4747
password: forms.Field
48-
error_messages: _ErrorMessagesT
48+
error_messages: _ErrorMessagesDict
4949
request: HttpRequest | None
5050
user_cache: Any
5151
username_field: models.Field
@@ -81,7 +81,7 @@ class PasswordResetForm(forms.Form):
8181
) -> None: ...
8282

8383
class SetPasswordForm(forms.Form):
84-
error_messages: _ErrorMessagesT
84+
error_messages: _ErrorMessagesDict
8585
new_password1: forms.Field
8686
new_password2: forms.Field
8787
user: AbstractBaseUser
@@ -90,12 +90,12 @@ class SetPasswordForm(forms.Form):
9090
def save(self, commit: bool = ...) -> AbstractBaseUser: ...
9191

9292
class PasswordChangeForm(SetPasswordForm):
93-
error_messages: _ErrorMessagesT
93+
error_messages: _ErrorMessagesDict
9494
old_password: forms.Field
9595
def clean_old_password(self) -> str: ...
9696

9797
class AdminPasswordChangeForm(forms.Form):
98-
error_messages: _ErrorMessagesT
98+
error_messages: _ErrorMessagesDict
9999
required_css_class: str
100100
password1: forms.Field
101101
password2: forms.Field

django-stubs/contrib/gis/db/models/fields.pyi

+3-3
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ from django.contrib.gis.geos import (
1414
)
1515
from django.core.validators import _ValidatorCallable
1616
from django.db.models.expressions import Combinable
17-
from django.db.models.fields import Field, _ErrorMessagesT, _FieldChoices
17+
from django.db.models.fields import Field, _ErrorMessagesMapping, _FieldChoices
1818
from django.utils.functional import _StrOrPromise
1919

2020
# __set__ value type
@@ -62,7 +62,7 @@ class BaseSpatialField(Field[_ST, _GT]):
6262
db_column: str | None = ...,
6363
db_tablespace: str | None = ...,
6464
validators: Iterable[_ValidatorCallable] = ...,
65-
error_messages: _ErrorMessagesT | None = ...,
65+
error_messages: _ErrorMessagesMapping | None = ...,
6666
) -> None: ...
6767
def deconstruct(self) -> Any: ...
6868
def db_type(self, connection: Any) -> Any: ...
@@ -107,7 +107,7 @@ class GeometryField(BaseSpatialField[_ST, _GT]):
107107
db_column: str | None = ...,
108108
db_tablespace: str | None = ...,
109109
validators: Iterable[_ValidatorCallable] = ...,
110-
error_messages: _ErrorMessagesT | None = ...,
110+
error_messages: _ErrorMessagesMapping | None = ...,
111111
) -> None: ...
112112
def deconstruct(self) -> Any: ...
113113
def formfield(self, **kwargs: Any) -> Any: ... # type: ignore[override]

django-stubs/contrib/gis/forms/fields.pyi

-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ from django import forms
55
class GeometryField(forms.Field):
66
widget: Any
77
geom_type: str
8-
default_error_messages: Any
98
srid: Any
109
def __init__(self, *, srid: Any | None = ..., geom_type: Any | None = ..., **kwargs: Any) -> None: ...
1110
def to_python(self, value: Any) -> Any: ...

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

+3-3
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ from typing import Any, TypeVar
44
from django.core.validators import _ValidatorCallable
55
from django.db.models import Field, Transform
66
from django.db.models.expressions import Combinable
7-
from django.db.models.fields import _ErrorMessagesT, _FieldChoices
7+
from django.db.models.fields import _ErrorMessagesDict, _ErrorMessagesMapping, _FieldChoices
88
from django.db.models.fields.mixins import CheckFieldDefaultMixin
99
from django.utils.functional import _StrOrPromise
1010

@@ -18,7 +18,7 @@ class ArrayField(CheckFieldDefaultMixin, Field[_ST, _GT]):
1818
_pyi_private_get_type: list[Any]
1919

2020
empty_strings_allowed: bool
21-
default_error_messages: _ErrorMessagesT
21+
default_error_messages: _ErrorMessagesDict
2222
base_field: Field
2323
size: int | None
2424
default_validators: Sequence[_ValidatorCallable]
@@ -48,7 +48,7 @@ class ArrayField(CheckFieldDefaultMixin, Field[_ST, _GT]):
4848
db_column: str | None = ...,
4949
db_tablespace: str | None = ...,
5050
validators: Iterable[_ValidatorCallable] = ...,
51-
error_messages: _ErrorMessagesT | None = ...,
51+
error_messages: _ErrorMessagesMapping | None = ...,
5252
) -> None: ...
5353
@property
5454
def description(self) -> str: ... # type: ignore

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

+3-3
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@ from collections.abc import Sequence
22
from typing import Any
33

44
from django import forms
5-
from django.db.models.fields import _ErrorMessagesT
5+
from django.db.models.fields import _ErrorMessagesDict
66
from django.forms.fields import _ClassLevelWidgetT
77
from django.forms.utils import _DataT, _FilesT
88
from django.forms.widgets import _OptAttrs
99

1010
from ..utils import prefix_validation_error as prefix_validation_error
1111

1212
class SimpleArrayField(forms.CharField):
13-
default_error_messages: _ErrorMessagesT
13+
default_error_messages: _ErrorMessagesDict
1414
base_field: forms.Field
1515
delimiter: str
1616
min_length: int | None
@@ -46,7 +46,7 @@ class SplitArrayWidget(forms.Widget):
4646
def needs_multipart_form(self) -> bool: ... # type: ignore
4747

4848
class SplitArrayField(forms.Field):
49-
default_error_messages: _ErrorMessagesT
49+
default_error_messages: _ErrorMessagesDict
5050
base_field: forms.Field
5151
size: int
5252
remove_trailing_nulls: bool
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
from typing import Any
22

33
from django import forms
4-
from django.db.models.fields import _ErrorMessagesT
4+
from django.db.models.fields import _ErrorMessagesDict
55
from django.forms.fields import _ClassLevelWidgetT
66

77
class HStoreField(forms.CharField):
88
widget: _ClassLevelWidgetT
9-
default_error_messages: _ErrorMessagesT
9+
default_error_messages: _ErrorMessagesDict
1010
def prepare_value(self, value: Any) -> Any: ...
1111
def to_python(self, value: Any) -> dict[str, str | None]: ... # type: ignore
1212
def has_changed(self, initial: Any, data: Any) -> bool: ...
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from typing import Any
22

33
from django import forms
4-
from django.db.models.fields import _ErrorMessagesT
4+
from django.db.models.fields import _ErrorMessagesDict
55
from django.forms.widgets import MultiWidget, _OptAttrs
66
from psycopg2.extras import Range
77

@@ -13,7 +13,7 @@ class HiddenRangeWidget(RangeWidget):
1313
def __init__(self, attrs: _OptAttrs | None = ...) -> None: ...
1414

1515
class BaseRangeField(forms.MultiValueField):
16-
default_error_messages: _ErrorMessagesT
16+
default_error_messages: _ErrorMessagesDict
1717
base_field: type[forms.Field]
1818
range_type: type[Range]
1919
hidden_widget: type[forms.Widget]
@@ -22,21 +22,21 @@ class BaseRangeField(forms.MultiValueField):
2222
def compress(self, values: tuple[Any | None, Any | None]) -> Range | None: ...
2323

2424
class IntegerRangeField(BaseRangeField):
25-
default_error_messages: _ErrorMessagesT
25+
default_error_messages: _ErrorMessagesDict
2626
base_field: type[forms.Field]
2727
range_type: type[Range]
2828

2929
class DecimalRangeField(BaseRangeField):
30-
default_error_messages: _ErrorMessagesT
30+
default_error_messages: _ErrorMessagesDict
3131
base_field: type[forms.Field]
3232
range_type: type[Range]
3333

3434
class DateTimeRangeField(BaseRangeField):
35-
default_error_messages: _ErrorMessagesT
35+
default_error_messages: _ErrorMessagesDict
3636
base_field: type[forms.Field]
3737
range_type: type[Range]
3838

3939
class DateRangeField(BaseRangeField):
40-
default_error_messages: _ErrorMessagesT
40+
default_error_messages: _ErrorMessagesDict
4141
base_field: type[forms.Field]
4242
range_type: type[Range]

django-stubs/db/models/fields/__init__.pyi

+17-16
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import decimal
22
import uuid
3-
from collections.abc import Callable, Iterable, Sequence
3+
from collections.abc import Callable, Iterable, Mapping, Sequence
44
from datetime import date, time, timedelta
55
from datetime import datetime as real_datetime
66
from typing import Any, ClassVar, Generic, Literal, Protocol, TypeVar, overload
@@ -45,7 +45,8 @@ class _FieldDescriptor(Protocol[_F]):
4545
def field(self) -> _F: ...
4646

4747
_AllLimitChoicesTo: TypeAlias = _LimitChoicesTo | _ChoicesCallable # noqa: Y047
48-
_ErrorMessagesT: TypeAlias = dict[str, Any]
48+
_ErrorMessagesMapping: TypeAlias = Mapping[str, _StrOrPromise]
49+
_ErrorMessagesDict: TypeAlias = dict[str, _StrOrPromise]
4950

5051
# __set__ value type
5152
_ST = TypeVar("_ST", contravariant=True)
@@ -143,12 +144,12 @@ class Field(RegisterLookupMixin, Generic[_ST, _GT]):
143144
column: str
144145
concrete: bool
145146
default: Any
146-
error_messages: _ErrorMessagesT
147+
error_messages: _ErrorMessagesDict
147148
empty_values: Sequence[Any]
148149
creation_counter: int
149150
auto_creation_counter: int
150151
default_validators: Sequence[validators._ValidatorCallable]
151-
default_error_messages: _ErrorMessagesT
152+
default_error_messages: _ErrorMessagesDict
152153
hidden: bool
153154
system_check_removed_details: Any | None
154155
system_check_deprecated_details: Any | None
@@ -177,7 +178,7 @@ class Field(RegisterLookupMixin, Generic[_ST, _GT]):
177178
db_tablespace: str | None = ...,
178179
auto_created: bool = ...,
179180
validators: Iterable[validators._ValidatorCallable] = ...,
180-
error_messages: _ErrorMessagesT | None = ...,
181+
error_messages: _ErrorMessagesMapping | None = ...,
181182
) -> None: ...
182183
def __set__(self, instance: Any, value: _ST) -> None: ...
183184
# class access
@@ -282,7 +283,7 @@ class DecimalField(Field[_ST, _GT]):
282283
db_comment: str | None = ...,
283284
db_tablespace: str | None = ...,
284285
validators: Iterable[validators._ValidatorCallable] = ...,
285-
error_messages: _ErrorMessagesT | None = ...,
286+
error_messages: _ErrorMessagesMapping | None = ...,
286287
) -> None: ...
287288

288289
class CharField(Field[_ST, _GT]):
@@ -313,7 +314,7 @@ class CharField(Field[_ST, _GT]):
313314
db_comment: str | None = ...,
314315
db_tablespace: str | None = ...,
315316
validators: Iterable[validators._ValidatorCallable] = ...,
316-
error_messages: _ErrorMessagesT | None = ...,
317+
error_messages: _ErrorMessagesMapping | None = ...,
317318
*,
318319
db_collation: str | None = ...,
319320
) -> None: ...
@@ -342,7 +343,7 @@ class SlugField(CharField[_ST, _GT]):
342343
db_comment: str | None = ...,
343344
db_tablespace: str | None = ...,
344345
validators: Iterable[validators._ValidatorCallable] = ...,
345-
error_messages: _ErrorMessagesT | None = ...,
346+
error_messages: _ErrorMessagesMapping | None = ...,
346347
*,
347348
max_length: int | None = ...,
348349
db_index: bool = ...,
@@ -377,7 +378,7 @@ class URLField(CharField[_ST, _GT]):
377378
db_tablespace: str | None = ...,
378379
auto_created: bool = ...,
379380
validators: Iterable[validators._ValidatorCallable] = ...,
380-
error_messages: _ErrorMessagesT | None = ...,
381+
error_messages: _ErrorMessagesMapping | None = ...,
381382
) -> None: ...
382383

383384
class TextField(Field[_ST, _GT]):
@@ -408,7 +409,7 @@ class TextField(Field[_ST, _GT]):
408409
db_comment: str | None = ...,
409410
db_tablespace: str | None = ...,
410411
validators: Iterable[validators._ValidatorCallable] = ...,
411-
error_messages: _ErrorMessagesT | None = ...,
412+
error_messages: _ErrorMessagesMapping | None = ...,
412413
*,
413414
db_collation: str | None = ...,
414415
) -> None: ...
@@ -431,7 +432,7 @@ class GenericIPAddressField(Field[_ST, _GT]):
431432
_pyi_private_set_type: str | int | Callable[..., Any] | Combinable
432433
_pyi_private_get_type: str
433434

434-
default_error_messages: _ErrorMessagesT
435+
default_error_messages: _ErrorMessagesDict
435436
unpack_ipv4: bool
436437
protocol: str
437438
def __init__(
@@ -455,7 +456,7 @@ class GenericIPAddressField(Field[_ST, _GT]):
455456
db_comment: str | None = ...,
456457
db_tablespace: str | None = ...,
457458
validators: Iterable[validators._ValidatorCallable] = ...,
458-
error_messages: _ErrorMessagesT | None = ...,
459+
error_messages: _ErrorMessagesMapping | None = ...,
459460
) -> None: ...
460461

461462
class DateTimeCheckMixin: ...
@@ -489,7 +490,7 @@ class DateField(DateTimeCheckMixin, Field[_ST, _GT]):
489490
db_comment: str | None = ...,
490491
db_tablespace: str | None = ...,
491492
validators: Iterable[validators._ValidatorCallable] = ...,
492-
error_messages: _ErrorMessagesT | None = ...,
493+
error_messages: _ErrorMessagesMapping | None = ...,
493494
) -> None: ...
494495

495496
class TimeField(DateTimeCheckMixin, Field[_ST, _GT]):
@@ -519,7 +520,7 @@ class TimeField(DateTimeCheckMixin, Field[_ST, _GT]):
519520
db_comment: str | None = ...,
520521
db_tablespace: str | None = ...,
521522
validators: Iterable[validators._ValidatorCallable] = ...,
522-
error_messages: _ErrorMessagesT | None = ...,
523+
error_messages: _ErrorMessagesMapping | None = ...,
523524
) -> None: ...
524525

525526
class DateTimeField(DateField[_ST, _GT]):
@@ -556,7 +557,7 @@ class UUIDField(Field[_ST, _GT]):
556557
db_tablespace: str | None = ...,
557558
auto_created: bool = ...,
558559
validators: Iterable[validators._ValidatorCallable] = ...,
559-
error_messages: _ErrorMessagesT | None = ...,
560+
error_messages: _ErrorMessagesMapping | None = ...,
560561
) -> None: ...
561562

562563
class FilePathField(Field[_ST, _GT]):
@@ -591,7 +592,7 @@ class FilePathField(Field[_ST, _GT]):
591592
db_comment: str | None = ...,
592593
db_tablespace: str | None = ...,
593594
validators: Iterable[validators._ValidatorCallable] = ...,
594-
error_messages: _ErrorMessagesT | None = ...,
595+
error_messages: _ErrorMessagesMapping | None = ...,
595596
) -> None: ...
596597

597598
class BinaryField(Field[_ST, _GT]):

django-stubs/db/models/fields/files.pyi

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ from django.core.files.base import File
66
from django.core.files.images import ImageFile
77
from django.core.files.storage import Storage
88
from django.db.models.base import Model
9-
from django.db.models.fields import Field, _ErrorMessagesT, _FieldChoices
9+
from django.db.models.fields import Field, _ErrorMessagesMapping, _FieldChoices
1010
from django.db.models.query_utils import DeferredAttribute
1111
from django.utils._os import _PathCompatible
1212
from django.utils.functional import _StrOrPromise
@@ -68,7 +68,7 @@ class FileField(Field):
6868
db_comment: str | None = ...,
6969
db_tablespace: str | None = ...,
7070
validators: Iterable[validators._ValidatorCallable] = ...,
71-
error_messages: _ErrorMessagesT | None = ...,
71+
error_messages: _ErrorMessagesMapping | None = ...,
7272
) -> None: ...
7373
# class access
7474
@overload

0 commit comments

Comments
 (0)