parententity=adapt_to_entity,
)
- def of_type(self, entity: _EntityType[Any]) -> QueryableAttribute[_T]:
+ def of_type(self, entity: _EntityType[_T]) -> QueryableAttribute[_T]:
return QueryableAttribute(
self.class_,
self.key,
)
+class Employee(Base):
+ __tablename__ = "employee"
+ id: Mapped[int] = mapped_column(primary_key=True)
+ team_id: Mapped[int] = mapped_column(ForeignKey("team.id"))
+ team: Mapped["Team"] = relationship(back_populates="employees")
+
+ __mapper_args__ = {
+ "polymorphic_on": "type",
+ "polymorphic_identity": "employee",
+ }
+
+
+class Team(Base):
+ __tablename__ = "team"
+ id: Mapped[int] = mapped_column(primary_key=True)
+ employees: Mapped[list[Employee]] = relationship("Employee")
+
+
+class Engineer(Employee):
+ engineer_info: Mapped[str]
+
+ __mapper_args__ = {"polymorphic_identity": "engineer"}
+
+
if typing.TYPE_CHECKING:
# EXPECTED_RE_TYPE: sqlalchemy.*.InstrumentedAttribute\[Union\[builtins.str, None\]\]
reveal_type(User.extra)
# EXPECTED_RE_TYPE: sqlalchemy.*.InstrumentedAttribute\[builtins.set\*?\[relationship.MoreMail\]\]
reveal_type(Address.rel_style_one_anno_only)
+ # EXPECTED_RE_TYPE: sqlalchemy.*.QueryableAttribute\[relationship.Engineer\]
+ reveal_type(Team.employees.of_type(Engineer))
+
mapper_registry: registry = registry()