|
1 | 1 | from typing import NamedTuple, Optional, Union
|
2 | 2 |
|
3 | 3 | from mypy.checker import TypeChecker
|
4 |
| -from mypy.nodes import AssignmentStmt, Expression, NameExpr, StrExpr, TypeInfo |
| 4 | +from mypy.nodes import AssignmentStmt, Expression, MemberExpr, NameExpr, StrExpr, TypeInfo |
5 | 5 | from mypy.plugin import FunctionContext
|
6 | 6 | from mypy.semanal import SemanticAnalyzer
|
7 | 7 | from mypy.types import Instance, ProperType, UninhabitedType
|
@@ -129,16 +129,25 @@ def get_model_from_expression(
|
129 | 129 | Attempts to resolve an expression to a 'TypeInfo' instance. Any lazy reference
|
130 | 130 | argument(e.g. "<app_label>.<object_name>") to a Django model is also attempted.
|
131 | 131 | """
|
132 |
| - # TODO: Handle settings.AUTH_USER_MODEL? |
133 | 132 | if isinstance(expr, NameExpr) and isinstance(expr.node, TypeInfo):
|
134 | 133 | if (
|
135 | 134 | expr.node.metaclass_type is not None
|
136 | 135 | and expr.node.metaclass_type.type.fullname == fullnames.MODEL_METACLASS_FULLNAME
|
137 | 136 | ):
|
138 | 137 | return Instance(expr.node, [])
|
139 |
| - elif isinstance(expr, StrExpr): |
140 |
| - model_info = helpers.resolve_lazy_reference(expr.value, api=api, django_context=django_context, ctx=expr) |
| 138 | + |
| 139 | + lazy_reference = None |
| 140 | + if isinstance(expr, StrExpr): |
| 141 | + lazy_reference = expr.value |
| 142 | + elif ( |
| 143 | + isinstance(expr, MemberExpr) |
| 144 | + and isinstance(expr.expr, NameExpr) |
| 145 | + and f"{expr.expr.fullname}.{expr.name}" == fullnames.AUTH_USER_MODEL_FULLNAME |
| 146 | + ): |
| 147 | + lazy_reference = django_context.settings.AUTH_USER_MODEL |
| 148 | + |
| 149 | + if lazy_reference is not None: |
| 150 | + model_info = helpers.resolve_lazy_reference(lazy_reference, api=api, django_context=django_context, ctx=expr) |
141 | 151 | if model_info is not None:
|
142 | 152 | return Instance(model_info, [])
|
143 |
| - |
144 | 153 | return None
|
0 commit comments