From b59304b99037431913781a3506998533618598ef Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Mon, 16 Jan 2023 20:01:15 -0500 Subject: fixes for mypy, error in stubs There's a critical mistake in the stubs that we may want to fix. Or we might just keep it that way as this is all obsolete anyway. not sure yet. Change-Id: I380a1dc177de571b94a176e0f5e5b5d8d4ea2453 --- lib/sqlalchemy/ext/mypy/apply.py | 10 ++++++++++ lib/sqlalchemy/ext/mypy/decl_class.py | 4 +++- 2 files changed, 13 insertions(+), 1 deletion(-) (limited to 'lib/sqlalchemy/ext/mypy') 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 -- cgit v1.2.1