diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/sqlalchemy/ext/mypy/apply.py | 10 | ||||
-rw-r--r-- | lib/sqlalchemy/ext/mypy/decl_class.py | 4 |
2 files changed, 13 insertions, 1 deletions
diff --git a/lib/sqlalchemy/ext/mypy/apply.py b/lib/sqlalchemy/ext/mypy/apply.py index 99be194cd..745a8d759 100644 --- a/lib/sqlalchemy/ext/mypy/apply.py +++ b/lib/sqlalchemy/ext/mypy/apply.py @@ -44,6 +44,7 @@ def apply_mypy_mapped_attr( api: SemanticAnalyzerPluginInterface, item: Union[NameExpr, StrExpr], attributes: List[util.SQLAlchemyAttribute], + reset_statement_type: bool = False, ) -> None: if isinstance(item, NameExpr): name = item.name @@ -91,6 +92,11 @@ def apply_mypy_mapped_attr( api, stmt, stmt.lvalues[0], left_hand_explicit_type, None ) + if reset_statement_type: + stmt.type = api.named_type( + NAMED_TYPE_SQLA_MAPPED, [AnyType(TypeOfAny.special_form)] + ) + def re_apply_declarative_assignments( cls: ClassDef, @@ -226,6 +232,10 @@ def apply_type_to_mapped_statement( # internally stmt.rvalue = util.expr_to_mapped_constructor(stmt.rvalue) + # this works for every test except the dataclasses one + if stmt.type is not None and python_type_for_type is not None: + stmt.type = python_type_for_type + def add_additional_orm_attributes( cls: ClassDef, diff --git a/lib/sqlalchemy/ext/mypy/decl_class.py b/lib/sqlalchemy/ext/mypy/decl_class.py index c33c30e25..3c9847b73 100644 --- a/lib/sqlalchemy/ext/mypy/decl_class.py +++ b/lib/sqlalchemy/ext/mypy/decl_class.py @@ -398,7 +398,9 @@ def _scan_declarative_assignment_stmt( else: for item in stmt.rvalue.items: if isinstance(item, (NameExpr, StrExpr)): - apply.apply_mypy_mapped_attr(cls, api, item, attributes) + apply.apply_mypy_mapped_attr( + cls, api, item, attributes, reset_statement_type=True + ) left_hand_mapped_type: Optional[Type] = None left_hand_explicit_type: Optional[ProperType] = None |