Skip to content

Commit 9d4d06f

Browse files
authored
Allow overridable checks to be CheckMessage (#497)
* Allow overridable checks to be CheckMessage The checks framework expects return types to be "List[CheckMessage]". This allows all overridable checks-returning methods to return the more general "CheckMessage", instead of the "Error" subclass. * Ignore an incorrect usage of the checks API in Django 2.2
1 parent d746e3f commit 9d4d06f

File tree

6 files changed

+13
-10
lines changed

6 files changed

+13
-10
lines changed

django-stubs/contrib/admin/checks.pyi

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

33
from django.contrib.admin.options import BaseModelAdmin
4-
from django.core.checks.messages import Error
4+
from django.core.checks.messages import CheckMessage, Error
55

66
from django.apps.config import AppConfig
77

@@ -11,7 +11,7 @@ def check_admin_app(app_configs: Optional[Iterable[AppConfig]], **kwargs: Any) -
1111
def check_dependencies(**kwargs: Any) -> List[_CheckError]: ...
1212

1313
class BaseModelAdminChecks:
14-
def check(self, admin_obj: BaseModelAdmin, **kwargs: Any) -> List[_CheckError]: ...
14+
def check(self, admin_obj: BaseModelAdmin, **kwargs: Any) -> List[CheckMessage]: ...
1515

1616
class ModelAdminChecks(BaseModelAdminChecks): ...
1717
class InlineModelAdminChecks(BaseModelAdminChecks): ...

django-stubs/contrib/admin/options.pyi

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ from django.contrib.admin.sites import AdminSite
1111
from django.contrib.admin.views.main import ChangeList
1212
from django.contrib.auth.forms import AdminPasswordChangeForm
1313
from django.contrib.contenttypes.models import ContentType
14-
from django.core.checks.messages import Error
14+
from django.core.checks.messages import CheckMessage
1515
from django.core.paginator import Paginator
1616
from django.db.models.base import Model
1717
from django.db.models.fields.related import ForeignKey, ManyToManyField, RelatedField
@@ -75,7 +75,7 @@ class BaseModelAdmin:
7575
view_on_site: bool = ...
7676
show_full_result_count: bool = ...
7777
checks_class: Any = ...
78-
def check(self, **kwargs: Any) -> List[Union[str, Error]]: ...
78+
def check(self, **kwargs: Any) -> List[CheckMessage]: ...
7979
def formfield_for_dbfield(
8080
self, db_field: Field, request: Optional[HttpRequest], **kwargs: Any
8181
) -> Optional[Field]: ...

django-stubs/contrib/contenttypes/fields.pyi

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from typing import Any, Callable, Dict, List, Optional, Tuple, Type, Union
22

33
from django.contrib.contenttypes.models import ContentType
4-
from django.core.checks.messages import Error
4+
from django.core.checks.messages import CheckMessage
55
from django.db.models.base import Model
66
from django.db.models.expressions import Combinable
77
from django.db.models.fields.mixins import FieldCacheMixin
@@ -41,7 +41,7 @@ class GenericForeignKey(FieldCacheMixin):
4141
def contribute_to_class(self, cls: Type[Model], name: str, **kwargs: Any) -> None: ...
4242
def get_filter_kwargs_for_object(self, obj: Model) -> Dict[str, Optional[ContentType]]: ...
4343
def get_forward_related_filter(self, obj: Model) -> Dict[str, int]: ...
44-
def check(self, **kwargs: Any) -> List[Error]: ...
44+
def check(self, **kwargs: Any) -> List[CheckMessage]: ...
4545
def get_cache_name(self) -> str: ...
4646
def get_content_type(
4747
self, obj: Optional[Model] = ..., id: Optional[int] = ..., using: Optional[str] = ...

django-stubs/contrib/staticfiles/finders.pyi

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
from typing import Any, Iterable, Iterator, List, Mapping, Optional, Union, overload
22

3-
from django.core.checks.messages import Error
3+
from django.core.checks.messages import CheckMessage
44
from django.core.files.storage import Storage
55
from typing_extensions import Literal
66

77
searched_locations: Any
88

99
class BaseFinder:
10-
def check(self, **kwargs: Any) -> List[Error]: ...
10+
def check(self, **kwargs: Any) -> List[CheckMessage]: ...
1111
def find(self, path: str, all: bool = ...) -> Optional[Any]: ...
1212
def list(self, ignore_patterns: Any) -> Iterable[Any]: ...
1313

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ from typing import (
1717
overload,
1818
)
1919

20-
from django.core import checks
20+
from django.core.checks import CheckMessage
2121

2222
from django.db.models import Model
2323
from django.core.exceptions import FieldDoesNotExist as FieldDoesNotExist
@@ -132,7 +132,7 @@ class Field(RegisterLookupMixin, Generic[_ST, _GT]):
132132
) -> Sequence[Union[_Choice, _ChoiceNamedGroup]]: ...
133133
def has_default(self) -> bool: ...
134134
def get_default(self) -> Any: ...
135-
def check(self, **kwargs: Any) -> List[checks.Error]: ...
135+
def check(self, **kwargs: Any) -> List[CheckMessage]: ...
136136
@property
137137
def validators(self) -> List[_ValidatorCallable]: ...
138138
def validate(self, value: Any, model_instance: Model) -> None: ...

scripts/enabled_test_modules.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,9 @@
6868
'error: "HttpResponse" has no attribute "streaming_content"',
6969
'error: "HttpResponse" has no attribute "context_data"',
7070
],
71+
'admin_checks': [
72+
'Argument 1 to "append" of "list" has incompatible type "str"; expected "CheckMessage"'
73+
],
7174
'admin_inlines': [
7275
'error: "HttpResponse" has no attribute "rendered_content"',
7376
],

0 commit comments

Comments
 (0)