enable 'model_forms' for tests typechecking (#270)

This commit is contained in:
Maksim Kurnikov
2019-12-13 13:30:21 +03:00
committed by GitHub
parent 6b3b6be3c1
commit 1c31e71ffc
5 changed files with 38 additions and 8 deletions

View File

@@ -205,10 +205,9 @@ class CallableChoiceIterator:
def __iter__(self) -> None: ...
class ChoiceField(Field):
choices: Any = ...
def __init__(
self,
choices: Any = ...,
choices: _FieldChoices = ...,
required: bool = ...,
widget: Optional[Union[Widget, Type[Widget]]] = ...,
label: Optional[Any] = ...,

View File

@@ -1,5 +1,21 @@
from datetime import datetime
from typing import Any, Callable, Dict, Iterator, List, Mapping, MutableMapping, Optional, Sequence, Tuple, Type, Union
from typing import (
Any,
Callable,
Dict,
Iterator,
List,
Mapping,
MutableMapping,
Optional,
Sequence,
Tuple,
Type,
Union,
ClassVar,
Container,
TypeVar,
)
from unittest.mock import MagicMock
from uuid import UUID
@@ -24,6 +40,11 @@ _Fields = Union[List[Union[Callable, str]], Sequence[str], Literal["__all__"]]
_Labels = Dict[str, str]
_ErrorMessages = Dict[str, Dict[str, str]]
_M = TypeVar("_M", bound=Model)
def construct_instance(
form: BaseForm, instance: _M, fields: Optional[Container[str]] = ..., exclude: Optional[Container[str]] = ...
) -> _M: ...
def model_to_dict(
instance: Model, fields: Optional[_Fields] = ..., exclude: Optional[_Fields] = ...
) -> Dict[str, Any]: ...
@@ -76,7 +97,8 @@ class BaseModelForm(BaseForm):
save_m2m: Any = ...
def save(self, commit: bool = ...) -> Any: ...
class ModelForm(BaseModelForm): ...
class ModelForm(BaseModelForm, metaclass=ModelFormMetaclass):
base_fields: ClassVar[Dict[str, Field]] = ...
def modelform_factory(
model: Type[Model],

View File

@@ -1,11 +1,12 @@
from typing import Any, Callable, Dict, Optional, Sequence, Type, Union
from django.forms.forms import BaseForm
from django.http import HttpRequest, HttpResponse
from django.views.generic.base import ContextMixin, TemplateResponseMixin, View
from django.views.generic.detail import BaseDetailView, SingleObjectMixin, SingleObjectTemplateResponseMixin
from typing_extensions import Literal
from django.http import HttpRequest, HttpResponse
class FormMixin(ContextMixin):
initial: Dict[str, Any] = ...
form_class: Optional[Type[BaseForm]] = ...

View File

@@ -3,7 +3,7 @@
import re
IGNORED_MODULES = {'schema', 'gis_tests', 'admin_widgets', 'admin_filters',
'sitemaps_tests', 'staticfiles_tests', 'modeladmin', 'model_forms',
'sitemaps_tests', 'staticfiles_tests', 'modeladmin',
'generic_views', 'forms_tests', 'flatpages_tests',
'admin_ordering', 'admin_changelist', 'admin_views',
'invalid_models_tests', 'i18n', 'model_formsets',
@@ -283,6 +283,14 @@ IGNORED_ERRORS = {
'Incompatible type for "size" of "FloatModel" (got "object", expected "Union[float, int, str, Combinable]")',
'Incompatible type for "value" of "IntegerModel" (got "object", expected',
],
'model_forms': [
'"render" of "Widget"',
"Module 'django.core.validators' has no attribute 'ValidationError'",
'Incompatible types in assignment',
'NewForm',
'"type" has no attribute "base_fields"',
'Argument "instance" to "InvalidModelForm" has incompatible type "Type[Category]"',
],
'model_indexes': [
'Argument "condition" to "Index" has incompatible type "str"; expected "Optional[Q]"'
],

View File

@@ -14,8 +14,8 @@ from scripts.enabled_test_modules import (
)
DJANGO_COMMIT_REFS: Dict[str, Tuple[str, str]] = {
'2.2': ('stable/2.2.x', 'e8b0903976077b951795938b260211214ed7fe41'),
'3.0': ('stable/3.0.x', '7ec5962638144cbf4c2e47ea7d8dc02d1ce44394')
'2.2': ('stable/2.2.x', '86befcc172c23170a720b3e0c06db51a99b3da59'),
'3.0': ('stable/3.0.x', '6cb30414bc0f83b49afc4cae76d4af5656effe9a')
}
PROJECT_DIRECTORY = Path(__file__).parent.parent
DJANGO_SOURCE_DIRECTORY = PROJECT_DIRECTORY / 'django-sources' # type: Path