mirror of
https://github.com/davidhalter/django-stubs.git
synced 2025-12-07 04:34:29 +08:00
Remove warning about unsupported expression types (#266)
* remove warning about unsupported expression for _meta.get_field() * lint
This commit is contained in:
@@ -259,8 +259,7 @@ def make_typeddict(api: CheckerPluginInterface, fields: 'OrderedDict[str, MypyTy
|
|||||||
return typed_dict_type
|
return typed_dict_type
|
||||||
|
|
||||||
|
|
||||||
def resolve_string_attribute_value(attr_expr: Expression, ctx: Union[FunctionContext, MethodContext],
|
def resolve_string_attribute_value(attr_expr: Expression, django_context: 'DjangoContext') -> Optional[str]:
|
||||||
django_context: 'DjangoContext') -> Optional[str]:
|
|
||||||
if isinstance(attr_expr, StrExpr):
|
if isinstance(attr_expr, StrExpr):
|
||||||
return attr_expr.value
|
return attr_expr.value
|
||||||
|
|
||||||
@@ -270,8 +269,6 @@ def resolve_string_attribute_value(attr_expr: Expression, ctx: Union[FunctionCon
|
|||||||
if isinstance(attr_expr.expr, NameExpr) and attr_expr.expr.fullname == 'django.conf.settings':
|
if isinstance(attr_expr.expr, NameExpr) and attr_expr.expr.fullname == 'django.conf.settings':
|
||||||
if hasattr(django_context.settings, member_name):
|
if hasattr(django_context.settings, member_name):
|
||||||
return getattr(django_context.settings, member_name)
|
return getattr(django_context.settings, member_name)
|
||||||
|
|
||||||
ctx.api.fail(f'Expression of type {type(attr_expr).__name__!r} is not supported', ctx.context)
|
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ def return_proper_field_type_from_get_field(ctx: MethodContext, django_context:
|
|||||||
if field_name_expr is None:
|
if field_name_expr is None:
|
||||||
return ctx.default_return_type
|
return ctx.default_return_type
|
||||||
|
|
||||||
field_name = helpers.resolve_string_attribute_value(field_name_expr, ctx, django_context)
|
field_name = helpers.resolve_string_attribute_value(field_name_expr, django_context)
|
||||||
if field_name is None:
|
if field_name is None:
|
||||||
return ctx.default_return_type
|
return ctx.default_return_type
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
from collections import OrderedDict
|
from collections import OrderedDict
|
||||||
from typing import List, Optional, Sequence, Type, Union
|
from typing import List, Optional, Sequence, Type
|
||||||
|
|
||||||
from django.core.exceptions import FieldError
|
from django.core.exceptions import FieldError
|
||||||
from django.db.models.base import Model
|
from django.db.models.base import Model
|
||||||
@@ -62,7 +62,7 @@ def get_field_type_from_lookup(ctx: MethodContext, django_context: DjangoContext
|
|||||||
|
|
||||||
def get_values_list_row_type(ctx: MethodContext, django_context: DjangoContext, model_cls: Type[Model],
|
def get_values_list_row_type(ctx: MethodContext, django_context: DjangoContext, model_cls: Type[Model],
|
||||||
flat: bool, named: bool) -> MypyType:
|
flat: bool, named: bool) -> MypyType:
|
||||||
field_lookups = resolve_field_lookups(ctx.args[0], ctx, django_context)
|
field_lookups = resolve_field_lookups(ctx.args[0], django_context)
|
||||||
if field_lookups is None:
|
if field_lookups is None:
|
||||||
return AnyType(TypeOfAny.from_error)
|
return AnyType(TypeOfAny.from_error)
|
||||||
|
|
||||||
@@ -148,11 +148,10 @@ def extract_proper_type_queryset_values_list(ctx: MethodContext, django_context:
|
|||||||
return helpers.reparametrize_instance(ctx.default_return_type, [model_type, row_type])
|
return helpers.reparametrize_instance(ctx.default_return_type, [model_type, row_type])
|
||||||
|
|
||||||
|
|
||||||
def resolve_field_lookups(lookup_exprs: Sequence[Expression], ctx: Union[FunctionContext, MethodContext],
|
def resolve_field_lookups(lookup_exprs: Sequence[Expression], django_context: DjangoContext) -> Optional[List[str]]:
|
||||||
django_context: DjangoContext) -> Optional[List[str]]:
|
|
||||||
field_lookups = []
|
field_lookups = []
|
||||||
for field_lookup_expr in lookup_exprs:
|
for field_lookup_expr in lookup_exprs:
|
||||||
field_lookup = helpers.resolve_string_attribute_value(field_lookup_expr, ctx, django_context)
|
field_lookup = helpers.resolve_string_attribute_value(field_lookup_expr, django_context)
|
||||||
if field_lookup is None:
|
if field_lookup is None:
|
||||||
return None
|
return None
|
||||||
field_lookups.append(field_lookup)
|
field_lookups.append(field_lookup)
|
||||||
@@ -172,7 +171,7 @@ def extract_proper_type_queryset_values(ctx: MethodContext, django_context: Djan
|
|||||||
if model_cls is None:
|
if model_cls is None:
|
||||||
return ctx.default_return_type
|
return ctx.default_return_type
|
||||||
|
|
||||||
field_lookups = resolve_field_lookups(ctx.args[0], ctx, django_context)
|
field_lookups = resolve_field_lookups(ctx.args[0], django_context)
|
||||||
if field_lookups is None:
|
if field_lookups is None:
|
||||||
return AnyType(TypeOfAny.from_error)
|
return AnyType(TypeOfAny.from_error)
|
||||||
|
|
||||||
|
|||||||
@@ -31,7 +31,6 @@ IGNORED_ERRORS = {
|
|||||||
re.compile(r'has no attribute ("|\')_[a-zA-Z_]+("|\')'),
|
re.compile(r'has no attribute ("|\')_[a-zA-Z_]+("|\')'),
|
||||||
"'Settings' object has no attribute",
|
"'Settings' object has no attribute",
|
||||||
'**Dict',
|
'**Dict',
|
||||||
re.compile(r"Expression of type '.*' is not supported"),
|
|
||||||
'has incompatible type "object"',
|
'has incompatible type "object"',
|
||||||
'undefined in superclass',
|
'undefined in superclass',
|
||||||
'Argument after ** must be a mapping',
|
'Argument after ** must be a mapping',
|
||||||
|
|||||||
Reference in New Issue
Block a user