From 269d387cbe40e2e69171e3aefed994eff5b0a34e Mon Sep 17 00:00:00 2001 From: RamonWill Date: Tue, 7 Apr 2020 19:57:40 +0100 Subject: [PATCH] corrections to resolution for issue 4212 --- lib/sqlalchemy/orm/util.py | 7 +++++++ test/orm/inheritance/test_with_poly.py | 16 ++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/lib/sqlalchemy/orm/util.py b/lib/sqlalchemy/orm/util.py index 48e9b19bfe..388bf76ec7 100644 --- a/lib/sqlalchemy/orm/util.py +++ b/lib/sqlalchemy/orm/util.py @@ -932,6 +932,13 @@ def with_polymorphic( only be specified if querying for one specific subtype only """ primary_mapper = _class_to_mapper(base) + + if selectable not in (None, False) and flat: + raise sa_exc.ArgumentError( + "the 'flat' and 'selectable' arguments cannot be passed " + "simultaneously to with_polymorphic()" + ) + if _existing_alias: assert _existing_alias.mapper is primary_mapper classes = util.to_set(classes) diff --git a/test/orm/inheritance/test_with_poly.py b/test/orm/inheritance/test_with_poly.py index 3ff6c191c4..0b0138e213 100644 --- a/test/orm/inheritance/test_with_poly.py +++ b/test/orm/inheritance/test_with_poly.py @@ -1,4 +1,5 @@ from sqlalchemy import and_ +from sqlalchemy import exc from sqlalchemy import or_ from sqlalchemy import testing from sqlalchemy.orm import create_session @@ -16,6 +17,21 @@ from ._poly_fixtures import Manager from ._poly_fixtures import Person +class WithPolymorphicAPITest(_Polymorphic, _PolymorphicFixtureBase): + def test_no_use_flat_and_aliased(self): + sess = create_session() + + subq = sess.query(Person).subquery() + + testing.assert_raises_message( + exc.ArgumentError, + "the 'flat' and 'selectable' arguments cannot be passed " + "simultaneously to with_polymorphic()", + with_polymorphic, Person, [Engineer], + selectable=subq, flat=True + ) + + class _WithPolymorphicBase(_PolymorphicFixtureBase): def test_join_base_to_sub(self): sess = create_session() -- 2.47.3