Added missing parameter :paramref:`_orm.with_polymorphic.name` that
allows specifying the name of returned :class:`_orm.AliasedClass`.
Fixes: #11361
Change-Id: I1eae550452526d85da1377207c5fa5e93ac673c3
(cherry picked from commit
02001e9458802ebb512a140aa24e663b364dc3ad)
--- /dev/null
+.. change::
+ :tags: usecase, orm
+ :tickets: 11361
+
+ Added missing parameter :paramref:`_orm.with_polymorphic.name` that
+ allows specifying the name of returned :class:`_orm.AliasedClass`.
aliased: bool = False,
innerjoin: bool = False,
adapt_on_names: bool = False,
+ name: Optional[str] = None,
_use_mapper_path: bool = False,
) -> AliasedClass[_O]:
"""Produce an :class:`.AliasedClass` construct which specifies
.. versionadded:: 1.4.33
+ :param name: Name given to the generated :class:`.AliasedClass`.
+
+ .. versionadded:: 2.0.31
+
"""
return AliasedInsp._with_polymorphic_factory(
base,
adapt_on_names=adapt_on_names,
aliased=aliased,
innerjoin=innerjoin,
+ name=name,
_use_mapper_path=_use_mapper_path,
)
aliased: bool = False,
innerjoin: bool = False,
adapt_on_names: bool = False,
+ name: Optional[str] = None,
_use_mapper_path: bool = False,
) -> AliasedClass[_O]:
primary_mapper = _class_to_mapper(base)
return AliasedClass(
base,
selectable,
+ name=name,
with_polymorphic_mappers=mappers,
adapt_on_names=adapt_on_names,
with_polymorphic_discriminator=polymorphic_on,
[(e3.name,)],
)
+ def test_with_polymorphic_named(self):
+ session = fixture_session()
+ poly = with_polymorphic(Person, "*", name="poly_name")
+
+ res = session.execute(select(poly)).mappings()
+ eq_(res.keys(), ["poly_name"])
+ eq_(len(res.all()), 5)
+
class PolymorphicTest(_PolymorphicTestBase, _Polymorphic):
def test_joined_aliasing_unrelated_subuqery(self):
self._run_cache_key_fixture(
lambda: (
inspect(Person),
- inspect(
- aliased(Person, me_stmt),
- ),
- inspect(
- aliased(Person, meb_stmt),
- ),
- inspect(
- with_polymorphic(Person, [Manager, Engineer]),
- ),
+ inspect(aliased(Person, me_stmt)),
+ inspect(aliased(Person, meb_stmt)),
+ inspect(with_polymorphic(Person, [Manager, Engineer])),
# aliased=True is the same as flat=True for default selectable
inspect(
with_polymorphic(
aliased=True,
),
),
- inspect(
- with_polymorphic(Person, [Manager, Engineer, Boss]),
- ),
+ inspect(with_polymorphic(Person, [Manager, Engineer, Boss])),
inspect(
with_polymorphic(
Person,
polymorphic_on=literal_column("bar"),
),
),
+ inspect(with_polymorphic(Person, "*", name="foo")),
),
compare_values=True,
)