diff options
Diffstat (limited to 'test/ext/declarative/test_inheritance.py')
| -rw-r--r-- | test/ext/declarative/test_inheritance.py | 1585 |
1 files changed, 892 insertions, 693 deletions
diff --git a/test/ext/declarative/test_inheritance.py b/test/ext/declarative/test_inheritance.py index a453bc165..6cf0073b2 100644 --- a/test/ext/declarative/test_inheritance.py +++ b/test/ext/declarative/test_inheritance.py @@ -1,16 +1,34 @@ - -from sqlalchemy.testing import eq_, le_, assert_raises, \ - assert_raises_message, is_, is_true, is_false +from sqlalchemy.testing import ( + eq_, + le_, + assert_raises, + assert_raises_message, + is_, + is_true, + is_false, +) from sqlalchemy.ext import declarative as decl import sqlalchemy as sa from sqlalchemy import testing from sqlalchemy import Integer, String, ForeignKey from sqlalchemy.testing.schema import Table, Column -from sqlalchemy.orm import relationship, create_session, class_mapper, \ - configure_mappers, clear_mappers, \ - polymorphic_union, deferred, Session, mapper -from sqlalchemy.ext.declarative import declared_attr, AbstractConcreteBase, \ - ConcreteBase, has_inherited_table +from sqlalchemy.orm import ( + relationship, + create_session, + class_mapper, + configure_mappers, + clear_mappers, + polymorphic_union, + deferred, + Session, + mapper, +) +from sqlalchemy.ext.declarative import ( + declared_attr, + AbstractConcreteBase, + ConcreteBase, + has_inherited_table, +) from sqlalchemy.testing import fixtures, mock from test.orm.test_events import _RemoveListeners @@ -18,7 +36,6 @@ Base = None class DeclarativeTestBase(fixtures.TestBase, testing.AssertsExecutionResults): - def setup(self): global Base Base = decl.declarative_base(testing.db) @@ -30,119 +47,133 @@ class DeclarativeTestBase(fixtures.TestBase, testing.AssertsExecutionResults): class DeclarativeInheritanceTest(DeclarativeTestBase): - def test_we_must_copy_mapper_args(self): - class Person(Base): - __tablename__ = 'people' + __tablename__ = "people" id = Column(Integer, primary_key=True) - discriminator = Column('type', String(50)) - __mapper_args__ = {'polymorphic_on': discriminator, - 'polymorphic_identity': 'person'} + discriminator = Column("type", String(50)) + __mapper_args__ = { + "polymorphic_on": discriminator, + "polymorphic_identity": "person", + } class Engineer(Person): primary_language = Column(String(50)) - assert 'inherits' not in Person.__mapper_args__ + assert "inherits" not in Person.__mapper_args__ assert class_mapper(Engineer).polymorphic_identity is None assert class_mapper(Engineer).polymorphic_on is Person.__table__.c.type def test_we_must_only_copy_column_mapper_args(self): - class Person(Base): - __tablename__ = 'people' + __tablename__ = "people" id = Column(Integer, primary_key=True) a = Column(Integer) b = Column(Integer) c = Column(Integer) d = Column(Integer) - discriminator = Column('type', String(50)) - __mapper_args__ = {'polymorphic_on': discriminator, - 'polymorphic_identity': 'person', - 'version_id_col': 'a', - 'column_prefix': 'bar', - 'include_properties': ['id', 'a', 'b'], - } - assert class_mapper(Person).version_id_col == 'a' - assert class_mapper(Person).include_properties == set(['id', 'a', 'b']) + discriminator = Column("type", String(50)) + __mapper_args__ = { + "polymorphic_on": discriminator, + "polymorphic_identity": "person", + "version_id_col": "a", + "column_prefix": "bar", + "include_properties": ["id", "a", "b"], + } - def test_custom_join_condition(self): + assert class_mapper(Person).version_id_col == "a" + assert class_mapper(Person).include_properties == set(["id", "a", "b"]) + def test_custom_join_condition(self): class Foo(Base): - __tablename__ = 'foo' - id = Column('id', Integer, primary_key=True) + __tablename__ = "foo" + id = Column("id", Integer, primary_key=True) class Bar(Foo): - __tablename__ = 'bar' - bar_id = Column('id', Integer, primary_key=True) - foo_id = Column('foo_id', Integer) - __mapper_args__ = {'inherit_condition': foo_id == Foo.id} + __tablename__ = "bar" + bar_id = Column("id", Integer, primary_key=True) + foo_id = Column("foo_id", Integer) + __mapper_args__ = {"inherit_condition": foo_id == Foo.id} # compile succeeds because inherit_condition is honored configure_mappers() def test_joined(self): - class Company(Base, fixtures.ComparableEntity): - __tablename__ = 'companies' - id = Column('id', Integer, primary_key=True, - test_needs_autoincrement=True) - name = Column('name', String(50)) - employees = relationship('Person') + __tablename__ = "companies" + id = Column( + "id", Integer, primary_key=True, test_needs_autoincrement=True + ) + name = Column("name", String(50)) + employees = relationship("Person") class Person(Base, fixtures.ComparableEntity): - __tablename__ = 'people' - id = Column('id', Integer, primary_key=True, - test_needs_autoincrement=True) - company_id = Column('company_id', Integer, - ForeignKey('companies.id')) - name = Column('name', String(50)) - discriminator = Column('type', String(50)) - __mapper_args__ = {'polymorphic_on': discriminator} + __tablename__ = "people" + id = Column( + "id", Integer, primary_key=True, test_needs_autoincrement=True + ) + company_id = Column( + "company_id", Integer, ForeignKey("companies.id") + ) + name = Column("name", String(50)) + discriminator = Column("type", String(50)) + __mapper_args__ = {"polymorphic_on": discriminator} class Engineer(Person): - __tablename__ = 'engineers' - __mapper_args__ = {'polymorphic_identity': 'engineer'} - id = Column('id', Integer, ForeignKey('people.id'), - primary_key=True) - primary_language = Column('primary_language', String(50)) + __tablename__ = "engineers" + __mapper_args__ = {"polymorphic_identity": "engineer"} + id = Column( + "id", Integer, ForeignKey("people.id"), primary_key=True + ) + primary_language = Column("primary_language", String(50)) class Manager(Person): - __tablename__ = 'managers' - __mapper_args__ = {'polymorphic_identity': 'manager'} - id = Column('id', Integer, ForeignKey('people.id'), - primary_key=True) - golf_swing = Column('golf_swing', String(50)) + __tablename__ = "managers" + __mapper_args__ = {"polymorphic_identity": "manager"} + id = Column( + "id", Integer, ForeignKey("people.id"), primary_key=True + ) + golf_swing = Column("golf_swing", String(50)) Base.metadata.create_all() sess = create_session() c1 = Company( - name='MegaCorp, Inc.', + name="MegaCorp, Inc.", employees=[ - Engineer(name='dilbert', primary_language='java'), - Engineer(name='wally', primary_language='c++'), - Manager(name='dogbert', golf_swing='fore!')]) + Engineer(name="dilbert", primary_language="java"), + Engineer(name="wally", primary_language="c++"), + Manager(name="dogbert", golf_swing="fore!"), + ], + ) - c2 = Company(name='Elbonia, Inc.', - employees=[Engineer(name='vlad', - primary_language='cobol')]) + c2 = Company( + name="Elbonia, Inc.", + employees=[Engineer(name="vlad", primary_language="cobol")], + ) sess.add(c1) sess.add(c2) sess.flush() sess.expunge_all() - eq_(sess.query(Company).filter(Company.employees.of_type(Engineer). - any(Engineer.primary_language - == 'cobol')).first(), c2) + eq_( + sess.query(Company) + .filter( + Company.employees.of_type(Engineer).any( + Engineer.primary_language == "cobol" + ) + ) + .first(), + c2, + ) # ensure that the Manager mapper was compiled with the Manager id # column as higher priority. this ensures that "Manager.id" @@ -151,7 +182,7 @@ class DeclarativeInheritanceTest(DeclarativeTestBase): eq_( Manager.id.property.columns, - [Manager.__table__.c.id, Person.__table__.c.id] + [Manager.__table__.c.id, Person.__table__.c.id], ) # assert that the "id" column is available without a second @@ -161,120 +192,130 @@ class DeclarativeInheritanceTest(DeclarativeTestBase): sess.expunge_all() def go(): - assert sess.query(Manager).filter(Manager.name == 'dogbert' - ).one().id + assert ( + sess.query(Manager).filter(Manager.name == "dogbert").one().id + ) + self.assert_sql_count(testing.db, go, 1) sess.expunge_all() def go(): - assert sess.query(Person).filter(Manager.name == 'dogbert' - ).one().id + assert ( + sess.query(Person).filter(Manager.name == "dogbert").one().id + ) self.assert_sql_count(testing.db, go, 1) def test_add_subcol_after_the_fact(self): - class Person(Base, fixtures.ComparableEntity): - __tablename__ = 'people' - id = Column('id', Integer, primary_key=True, - test_needs_autoincrement=True) - name = Column('name', String(50)) - discriminator = Column('type', String(50)) - __mapper_args__ = {'polymorphic_on': discriminator} + __tablename__ = "people" + id = Column( + "id", Integer, primary_key=True, test_needs_autoincrement=True + ) + name = Column("name", String(50)) + discriminator = Column("type", String(50)) + __mapper_args__ = {"polymorphic_on": discriminator} class Engineer(Person): - __tablename__ = 'engineers' - __mapper_args__ = {'polymorphic_identity': 'engineer'} - id = Column('id', Integer, ForeignKey('people.id'), - primary_key=True) + __tablename__ = "engineers" + __mapper_args__ = {"polymorphic_identity": "engineer"} + id = Column( + "id", Integer, ForeignKey("people.id"), primary_key=True + ) - Engineer.primary_language = Column('primary_language', - String(50)) + Engineer.primary_language = Column("primary_language", String(50)) Base.metadata.create_all() sess = create_session() - e1 = Engineer(primary_language='java', name='dilbert') + e1 = Engineer(primary_language="java", name="dilbert") sess.add(e1) sess.flush() sess.expunge_all() - eq_(sess.query(Person).first(), - Engineer(primary_language='java', name='dilbert')) + eq_( + sess.query(Person).first(), + Engineer(primary_language="java", name="dilbert"), + ) def test_add_parentcol_after_the_fact(self): - class Person(Base, fixtures.ComparableEntity): - __tablename__ = 'people' - id = Column('id', Integer, primary_key=True, - test_needs_autoincrement=True) - discriminator = Column('type', String(50)) - __mapper_args__ = {'polymorphic_on': discriminator} + __tablename__ = "people" + id = Column( + "id", Integer, primary_key=True, test_needs_autoincrement=True + ) + discriminator = Column("type", String(50)) + __mapper_args__ = {"polymorphic_on": discriminator} class Engineer(Person): - __tablename__ = 'engineers' - __mapper_args__ = {'polymorphic_identity': 'engineer'} + __tablename__ = "engineers" + __mapper_args__ = {"polymorphic_identity": "engineer"} primary_language = Column(String(50)) - id = Column('id', Integer, ForeignKey('people.id'), - primary_key=True) + id = Column( + "id", Integer, ForeignKey("people.id"), primary_key=True + ) - Person.name = Column('name', String(50)) + Person.name = Column("name", String(50)) Base.metadata.create_all() sess = create_session() - e1 = Engineer(primary_language='java', name='dilbert') + e1 = Engineer(primary_language="java", name="dilbert") sess.add(e1) sess.flush() sess.expunge_all() - eq_(sess.query(Person).first(), - Engineer(primary_language='java', name='dilbert')) + eq_( + sess.query(Person).first(), + Engineer(primary_language="java", name="dilbert"), + ) def test_add_sub_parentcol_after_the_fact(self): - class Person(Base, fixtures.ComparableEntity): - __tablename__ = 'people' - id = Column('id', Integer, primary_key=True, - test_needs_autoincrement=True) - discriminator = Column('type', String(50)) - __mapper_args__ = {'polymorphic_on': discriminator} + __tablename__ = "people" + id = Column( + "id", Integer, primary_key=True, test_needs_autoincrement=True + ) + discriminator = Column("type", String(50)) + __mapper_args__ = {"polymorphic_on": discriminator} class Engineer(Person): - __tablename__ = 'engineers' - __mapper_args__ = {'polymorphic_identity': 'engineer'} + __tablename__ = "engineers" + __mapper_args__ = {"polymorphic_identity": "engineer"} primary_language = Column(String(50)) - id = Column('id', Integer, ForeignKey('people.id'), - primary_key=True) + id = Column( + "id", Integer, ForeignKey("people.id"), primary_key=True + ) class Admin(Engineer): - __tablename__ = 'admins' - __mapper_args__ = {'polymorphic_identity': 'admin'} + __tablename__ = "admins" + __mapper_args__ = {"polymorphic_identity": "admin"} workstation = Column(String(50)) - id = Column('id', Integer, ForeignKey('engineers.id'), - primary_key=True) + id = Column( + "id", Integer, ForeignKey("engineers.id"), primary_key=True + ) - Person.name = Column('name', String(50)) + Person.name = Column("name", String(50)) Base.metadata.create_all() sess = create_session() - e1 = Admin(primary_language='java', name='dilbert', - workstation='foo') + e1 = Admin(primary_language="java", name="dilbert", workstation="foo") sess.add(e1) sess.flush() sess.expunge_all() - eq_(sess.query(Person).first(), - Admin(primary_language='java', name='dilbert', workstation='foo')) + eq_( + sess.query(Person).first(), + Admin(primary_language="java", name="dilbert", workstation="foo"), + ) def test_subclass_mixin(self): - class Person(Base, fixtures.ComparableEntity): - __tablename__ = 'people' - id = Column('id', Integer, primary_key=True) - name = Column('name', String(50)) - discriminator = Column('type', String(50)) - __mapper_args__ = {'polymorphic_on': discriminator} + __tablename__ = "people" + id = Column("id", Integer, primary_key=True) + name = Column("name", String(50)) + discriminator = Column("type", String(50)) + __mapper_args__ = {"polymorphic_on": discriminator} class MyMixin(object): @@ -282,11 +323,12 @@ class DeclarativeInheritanceTest(DeclarativeTestBase): class Engineer(MyMixin, Person): - __tablename__ = 'engineers' - __mapper_args__ = {'polymorphic_identity': 'engineer'} - id = Column('id', Integer, ForeignKey('people.id'), - primary_key=True) - primary_language = Column('primary_language', String(50)) + __tablename__ = "engineers" + __mapper_args__ = {"polymorphic_identity": "engineer"} + id = Column( + "id", Integer, ForeignKey("people.id"), primary_key=True + ) + primary_language = Column("primary_language", String(50)) assert class_mapper(Engineer).inherits is class_mapper(Person) @@ -294,69 +336,88 @@ class DeclarativeInheritanceTest(DeclarativeTestBase): class Person(object): pass - person_table = Table('people', Base.metadata, - Column('id', Integer, primary_key=True), - Column('kind', String(50))) + person_table = Table( + "people", + Base.metadata, + Column("id", Integer, primary_key=True), + Column("kind", String(50)), + ) - mapper(Person, person_table, - polymorphic_on='kind', polymorphic_identity='person') + mapper( + Person, + person_table, + polymorphic_on="kind", + polymorphic_identity="person", + ) class SpecialPerson(Person): __abstract__ = True class Manager(SpecialPerson, Base): - __tablename__ = 'managers' + __tablename__ = "managers" id = Column(Integer, ForeignKey(Person.id), primary_key=True) - __mapper_args__ = { - 'polymorphic_identity': 'manager' - } + __mapper_args__ = {"polymorphic_identity": "manager"} from sqlalchemy import inspect + assert inspect(Manager).inherits is inspect(Person) - eq_(set(class_mapper(Person).class_manager), {'id', 'kind'}) - eq_(set(class_mapper(Manager).class_manager), {'id', 'kind'}) + eq_(set(class_mapper(Person).class_manager), {"id", "kind"}) + eq_(set(class_mapper(Manager).class_manager), {"id", "kind"}) def test_intermediate_unmapped_class_on_classical(self): class Person(object): pass - person_table = Table('people', Base.metadata, - Column('id', Integer, primary_key=True), - Column('kind', String(50))) + person_table = Table( + "people", + Base.metadata, + Column("id", Integer, primary_key=True), + Column("kind", String(50)), + ) - mapper(Person, person_table, - polymorphic_on='kind', polymorphic_identity='person') + mapper( + Person, + person_table, + polymorphic_on="kind", + polymorphic_identity="person", + ) class SpecialPerson(Person): pass class Manager(SpecialPerson, Base): - __tablename__ = 'managers' + __tablename__ = "managers" id = Column(Integer, ForeignKey(Person.id), primary_key=True) - __mapper_args__ = { - 'polymorphic_identity': 'manager' - } + __mapper_args__ = {"polymorphic_identity": "manager"} from sqlalchemy import inspect + assert inspect(Manager).inherits is inspect(Person) - eq_(set(class_mapper(Person).class_manager), {'id', 'kind'}) - eq_(set(class_mapper(Manager).class_manager), {'id', 'kind'}) + eq_(set(class_mapper(Person).class_manager), {"id", "kind"}) + eq_(set(class_mapper(Manager).class_manager), {"id", "kind"}) def test_class_w_invalid_multiple_bases(self): class Person(object): pass - person_table = Table('people', Base.metadata, - Column('id', Integer, primary_key=True), - Column('kind', String(50))) + person_table = Table( + "people", + Base.metadata, + Column("id", Integer, primary_key=True), + Column("kind", String(50)), + ) - mapper(Person, person_table, - polymorphic_on='kind', polymorphic_identity='person') + mapper( + Person, + person_table, + polymorphic_on="kind", + polymorphic_identity="person", + ) class DeclPerson(Base): - __tablename__ = 'decl_people' + __tablename__ = "decl_people" id = Column(Integer, primary_key=True) kind = Column(String(50)) @@ -365,48 +426,47 @@ class DeclarativeInheritanceTest(DeclarativeTestBase): def go(): class Manager(SpecialPerson, DeclPerson): - __tablename__ = 'managers' - id = Column(Integer, - ForeignKey(DeclPerson.id), primary_key=True) - __mapper_args__ = { - 'polymorphic_identity': 'manager' - } + __tablename__ = "managers" + id = Column( + Integer, ForeignKey(DeclPerson.id), primary_key=True + ) + __mapper_args__ = {"polymorphic_identity": "manager"} assert_raises_message( sa.exc.InvalidRequestError, r"Class .*Manager.* has multiple mapped " r"bases: \[.*Person.*DeclPerson.*\]", - go + go, ) def test_with_undefined_foreignkey(self): - class Parent(Base): - __tablename__ = 'parent' - id = Column('id', Integer, primary_key=True) - tp = Column('type', String(50)) + __tablename__ = "parent" + id = Column("id", Integer, primary_key=True) + tp = Column("type", String(50)) __mapper_args__ = dict(polymorphic_on=tp) class Child1(Parent): - __tablename__ = 'child1' - id = Column('id', Integer, ForeignKey('parent.id'), - primary_key=True) - related_child2 = Column('c2', Integer, - ForeignKey('child2.id')) - __mapper_args__ = dict(polymorphic_identity='child1') + __tablename__ = "child1" + id = Column( + "id", Integer, ForeignKey("parent.id"), primary_key=True + ) + related_child2 = Column("c2", Integer, ForeignKey("child2.id")) + __mapper_args__ = dict(polymorphic_identity="child1") # no exception is raised by the ForeignKey to "child2" even # though child2 doesn't exist yet class Child2(Parent): - __tablename__ = 'child2' - id = Column('id', Integer, ForeignKey('parent.id'), - primary_key=True) - related_child1 = Column('c1', Integer) - __mapper_args__ = dict(polymorphic_identity='child2') + __tablename__ = "child2" + id = Column( + "id", Integer, ForeignKey("parent.id"), primary_key=True + ) + related_child1 = Column("c1", Integer) + __mapper_args__ = dict(polymorphic_identity="child2") sa.orm.configure_mappers() # no exceptions here @@ -419,31 +479,29 @@ class DeclarativeInheritanceTest(DeclarativeTestBase): """ class Booking(Base): - __tablename__ = 'booking' + __tablename__ = "booking" id = Column(Integer, primary_key=True) class PlanBooking(Booking): - __tablename__ = 'plan_booking' - id = Column(Integer, ForeignKey(Booking.id), - primary_key=True) + __tablename__ = "plan_booking" + id = Column(Integer, ForeignKey(Booking.id), primary_key=True) # referencing PlanBooking.id gives us the column # on plan_booking, not booking class FeatureBooking(Booking): - __tablename__ = 'feature_booking' - id = Column(Integer, ForeignKey(Booking.id), - primary_key=True) - plan_booking_id = Column(Integer, - ForeignKey(PlanBooking.id)) + __tablename__ = "feature_booking" + id = Column(Integer, ForeignKey(Booking.id), primary_key=True) + plan_booking_id = Column(Integer, ForeignKey(PlanBooking.id)) - plan_booking = relationship(PlanBooking, - backref='feature_bookings') + plan_booking = relationship( + PlanBooking, backref="feature_bookings" + ) - assert FeatureBooking.__table__.c.plan_booking_id.\ - references(PlanBooking.__table__.c.id) + assert FeatureBooking.__table__.c.plan_booking_id.references( + PlanBooking.__table__.c.id + ) - assert FeatureBooking.__table__.c.id.\ - references(Booking.__table__.c.id) + assert FeatureBooking.__table__.c.id.references(Booking.__table__.c.id) def test_single_colsonbase(self): """test single inheritance where all the columns are on the base @@ -451,55 +509,71 @@ class DeclarativeInheritanceTest(DeclarativeTestBase): class Company(Base, fixtures.ComparableEntity): - __tablename__ = 'companies' - id = Column('id', Integer, primary_key=True, - test_needs_autoincrement=True) - name = Column('name', String(50)) - employees = relationship('Person') + __tablename__ = "companies" + id = Column( + "id", Integer, primary_key=True, test_needs_autoincrement=True + ) + name = Column("name", String(50)) + employees = relationship("Person") class Person(Base, fixtures.ComparableEntity): - __tablename__ = 'people' - id = Column('id', Integer, primary_key=True, - test_needs_autoincrement=True) - company_id = Column('company_id', Integer, - ForeignKey('companies.id')) - name = Column('name', String(50)) - discriminator = Column('type', String(50)) - primary_language = Column('primary_language', String(50)) - golf_swing = Column('golf_swing', String(50)) - __mapper_args__ = {'polymorphic_on': discriminator} + __tablename__ = "people" + id = Column( + "id", Integer, primary_key=True, test_needs_autoincrement=True + ) + company_id = Column( + "company_id", Integer, ForeignKey("companies.id") + ) + name = Column("name", String(50)) + discriminator = Column("type", String(50)) + primary_language = Column("primary_language", String(50)) + golf_swing = Column("golf_swing", String(50)) + __mapper_args__ = {"polymorphic_on": discriminator} class Engineer(Person): - __mapper_args__ = {'polymorphic_identity': 'engineer'} + __mapper_args__ = {"polymorphic_identity": "engineer"} class Manager(Person): - __mapper_args__ = {'polymorphic_identity': 'manager'} + __mapper_args__ = {"polymorphic_identity": "manager"} Base.metadata.create_all() sess = create_session() c1 = Company( - name='MegaCorp, Inc.', + name="MegaCorp, Inc.", employees=[ - Engineer(name='dilbert', primary_language='java'), - Engineer(name='wally', primary_language='c++'), - Manager(name='dogbert', golf_swing='fore!')]) + Engineer(name="dilbert", primary_language="java"), + Engineer(name="wally", primary_language="c++"), + Manager(name="dogbert", golf_swing="fore!"), + ], + ) - c2 = Company(name='Elbonia, Inc.', - employees=[Engineer(name='vlad', - primary_language='cobol')]) + c2 = Company( + name="Elbonia, Inc.", + employees=[Engineer(name="vlad", primary_language="cobol")], + ) sess.add(c1) sess.add(c2) sess.flush() sess.expunge_all() - eq_(sess.query(Person).filter(Engineer.primary_language - == 'cobol').first(), - Engineer(name='vlad')) - eq_(sess.query(Company).filter(Company.employees.of_type(Engineer). - any(Engineer.primary_language - == 'cobol')).first(), c2) + eq_( + sess.query(Person) + .filter(Engineer.primary_language == "cobol") + .first(), + Engineer(name="vlad"), + ) + eq_( + sess.query(Company) + .filter( + Company.employees.of_type(Engineer).any( + Engineer.primary_language == "cobol" + ) + ) + .first(), + c2, + ) def test_single_colsonsub(self): """test single inheritance where the columns are local to their @@ -511,30 +585,32 @@ class DeclarativeInheritanceTest(DeclarativeTestBase): class Company(Base, fixtures.ComparableEntity): - __tablename__ = 'companies' - id = Column('id', Integer, primary_key=True, - test_needs_autoincrement=True) - name = Column('name', String(50)) - employees = relationship('Person') + __tablename__ = "companies" + id = Column( + "id", Integer, primary_key=True, test_needs_autoincrement=True + ) + name = Column("name", String(50)) + employees = relationship("Person") class Person(Base, fixtures.ComparableEntity): - __tablename__ = 'people' - id = Column(Integer, primary_key=True, - test_needs_autoincrement=True) - company_id = Column(Integer, ForeignKey('companies.id')) + __tablename__ = "people" + id = Column( + Integer, primary_key=True, test_needs_autoincrement=True + ) + company_id = Column(Integer, ForeignKey("companies.id")) name = Column(String(50)) - discriminator = Column('type', String(50)) - __mapper_args__ = {'polymorphic_on': discriminator} + discriminator = Column("type", String(50)) + __mapper_args__ = {"polymorphic_on": discriminator} class Engineer(Person): - __mapper_args__ = {'polymorphic_identity': 'engineer'} + __mapper_args__ = {"polymorphic_identity": "engineer"} primary_language = Column(String(50)) class Manager(Person): - __mapper_args__ = {'polymorphic_identity': 'manager'} + __mapper_args__ = {"polymorphic_identity": "manager"} golf_swing = Column(String(50)) # we have here a situation that is somewhat unique. the Person @@ -549,31 +625,42 @@ class DeclarativeInheritanceTest(DeclarativeTestBase): assert Person.__table__.c.primary_language is not None assert Engineer.primary_language is not None assert Manager.golf_swing is not None - assert not hasattr(Person, 'primary_language') - assert not hasattr(Person, 'golf_swing') - assert not hasattr(Engineer, 'golf_swing') - assert not hasattr(Manager, 'primary_language') + assert not hasattr(Person, "primary_language") + assert not hasattr(Person, "golf_swing") + assert not hasattr(Engineer, "golf_swing") + assert not hasattr(Manager, "primary_language") Base.metadata.create_all() sess = create_session() - e1 = Engineer(name='dilbert', primary_language='java') - e2 = Engineer(name='wally', primary_language='c++') - m1 = Manager(name='dogbert', golf_swing='fore!') - c1 = Company(name='MegaCorp, Inc.', employees=[e1, e2, m1]) - e3 = Engineer(name='vlad', primary_language='cobol') - c2 = Company(name='Elbonia, Inc.', employees=[e3]) + e1 = Engineer(name="dilbert", primary_language="java") + e2 = Engineer(name="wally", primary_language="c++") + m1 = Manager(name="dogbert", golf_swing="fore!") + c1 = Company(name="MegaCorp, Inc.", employees=[e1, e2, m1]) + e3 = Engineer(name="vlad", primary_language="cobol") + c2 = Company(name="Elbonia, Inc.", employees=[e3]) sess.add(c1) sess.add(c2) sess.flush() sess.expunge_all() - eq_(sess.query(Person).filter(Engineer.primary_language - == 'cobol').first(), - Engineer(name='vlad')) - eq_(sess.query(Company).filter(Company.employees.of_type(Engineer). - any(Engineer.primary_language - == 'cobol')).first(), c2) - eq_(sess.query(Engineer).filter_by(primary_language='cobol' - ).one(), - Engineer(name='vlad', primary_language='cobol')) + eq_( + sess.query(Person) + .filter(Engineer.primary_language == "cobol") + .first(), + Engineer(name="vlad"), + ) + eq_( + sess.query(Company) + .filter( + Company.employees.of_type(Engineer).any( + Engineer.primary_language == "cobol" + ) + ) + .first(), + c2, + ) + eq_( + sess.query(Engineer).filter_by(primary_language="cobol").one(), + Engineer(name="vlad", primary_language="cobol"), + ) def test_single_cols_on_sub_base_of_joined(self): """test [ticket:3895]""" @@ -584,16 +671,12 @@ class DeclarativeInheritanceTest(DeclarativeTestBase): id = Column(Integer, primary_key=True) type = Column(String) - __mapper_args__ = { - "polymorphic_on": type, - } + __mapper_args__ = {"polymorphic_on": type} class Contractor(Person): contractor_field = Column(String) - __mapper_args__ = { - "polymorphic_identity": "contractor", - } + __mapper_args__ = {"polymorphic_identity": "contractor"} class Employee(Person): __tablename__ = "employee" @@ -601,104 +684,115 @@ class DeclarativeInheritanceTest(DeclarativeTestBase): id = Column(Integer, ForeignKey(Person.id), primary_key=True) class Engineer(Employee): - __mapper_args__ = { - "polymorphic_identity": "engineer", - } + __mapper_args__ = {"polymorphic_identity": "engineer"} configure_mappers() - is_false(hasattr(Person, 'contractor_field')) - is_true(hasattr(Contractor, 'contractor_field')) - is_false(hasattr(Employee, 'contractor_field')) - is_false(hasattr(Engineer, 'contractor_field')) + is_false(hasattr(Person, "contractor_field")) + is_true(hasattr(Contractor, "contractor_field")) + is_false(hasattr(Employee, "contractor_field")) + is_false(hasattr(Engineer, "contractor_field")) def test_single_cols_on_sub_to_joined(self): """test [ticket:3797]""" class BaseUser(Base): - __tablename__ = 'root' + __tablename__ = "root" id = Column(Integer, primary_key=True) row_type = Column(String) __mapper_args__ = { - 'polymorphic_on': row_type, - 'polymorphic_identity': 'baseuser' + "polymorphic_on": row_type, + "polymorphic_identity": "baseuser", } class User(BaseUser): - __tablename__ = 'user' + __tablename__ = "user" - __mapper_args__ = { - 'polymorphic_identity': 'user' - } + __mapper_args__ = {"polymorphic_identity": "user"} baseuser_id = Column( - Integer, ForeignKey('root.id'), primary_key=True) + Integer, ForeignKey("root.id"), primary_key=True + ) class Bat(Base): - __tablename__ = 'bat' + __tablename__ = "bat" id = Column(Integer, primary_key=True) class Thing(Base): - __tablename__ = 'thing' + __tablename__ = "thing" id = Column(Integer, primary_key=True) - owner_id = Column(Integer, ForeignKey('user.baseuser_id')) - owner = relationship('User') + owner_id = Column(Integer, ForeignKey("user.baseuser_id")) + owner = relationship("User") class SubUser(User): - __mapper_args__ = { - 'polymorphic_identity': 'subuser' - } + __mapper_args__ = {"polymorphic_identity": "subuser"} - sub_user_custom_thing = Column(Integer, ForeignKey('bat.id')) + sub_user_custom_thing = Column(Integer, ForeignKey("bat.id")) eq_( User.__table__.foreign_keys, User.baseuser_id.foreign_keys.union( - SubUser.sub_user_custom_thing.foreign_keys)) - is_true(Thing.owner.property.primaryjoin.compare( - Thing.owner_id == User.baseuser_id)) + SubUser.sub_user_custom_thing.foreign_keys + ), + ) + is_true( + Thing.owner.property.primaryjoin.compare( + Thing.owner_id == User.baseuser_id + ) + ) def test_single_constraint_on_sub(self): """test the somewhat unusual case of [ticket:3341]""" class Person(Base, fixtures.ComparableEntity): - __tablename__ = 'people' - id = Column(Integer, primary_key=True, - test_needs_autoincrement=True) + __tablename__ = "people" + id = Column( + Integer, primary_key=True, test_needs_autoincrement=True + ) name = Column(String(50)) - discriminator = Column('type', String(50)) - __mapper_args__ = {'polymorphic_on': discriminator} + discriminator = Column("type", String(50)) + __mapper_args__ = {"polymorphic_on": discriminator} class Engineer(Person): - __mapper_args__ = {'polymorphic_identity': 'engineer'} + __mapper_args__ = {"polymorphic_identity": "engineer"} primary_language = Column(String(50)) __hack_args_one__ = sa.UniqueConstraint( - Person.name, primary_language) + Person.name, primary_language + ) __hack_args_two__ = sa.CheckConstraint( - Person.name != primary_language) - - uq = [c for c in Person.__table__.constraints - if isinstance(c, sa.UniqueConstraint)][0] - ck = [c for c in Person.__table__.constraints - if isinstance(c, sa.CheckConstraint)][0] + Person.name != primary_language + ) + + uq = [ + c + for c in Person.__table__.constraints + if isinstance(c, sa.UniqueConstraint) + ][0] + ck = [ + c + for c in Person.__table__.constraints + if isinstance(c, sa.CheckConstraint) + ][0] eq_( list(uq.columns), - [Person.__table__.c.name, Person.__table__.c.primary_language] + [Person.__table__.c.name, Person.__table__.c.primary_language], ) eq_( list(ck.columns), - [Person.__table__.c.name, Person.__table__.c.primary_language] + [Person.__table__.c.name, Person.__table__.c.primary_language], ) - @testing.skip_if(lambda: testing.against('oracle'), - "Test has an empty insert in it at the moment") + @testing.skip_if( + lambda: testing.against("oracle"), + "Test has an empty insert in it at the moment", + ) def test_columns_single_inheritance_conflict_resolution(self): """Test that a declared_attr can return the existing column and it will be ignored. this allows conditional columns to be added. @@ -706,8 +800,9 @@ class DeclarativeInheritanceTest(DeclarativeTestBase): See [ticket:2472]. """ + class Person(Base): - __tablename__ = 'person' + __tablename__ = "person" id = Column(Integer, primary_key=True) class Engineer(Person): @@ -717,8 +812,8 @@ class DeclarativeInheritanceTest(DeclarativeTestBase): @declared_attr def target_id(cls): return cls.__table__.c.get( - 'target_id', - Column(Integer, ForeignKey('other.id'))) + "target_id", Column(Integer, ForeignKey("other.id")) + ) @declared_attr def target(cls): @@ -731,34 +826,31 @@ class DeclarativeInheritanceTest(DeclarativeTestBase): @declared_attr def target_id(cls): return cls.__table__.c.get( - 'target_id', - Column(Integer, ForeignKey('other.id'))) + "target_id", Column(Integer, ForeignKey("other.id")) + ) @declared_attr def target(cls): return relationship("Other") class Other(Base): - __tablename__ = 'other' + __tablename__ = "other" id = Column(Integer, primary_key=True) is_( Engineer.target_id.property.columns[0], - Person.__table__.c.target_id + Person.__table__.c.target_id, ) is_( - Manager.target_id.property.columns[0], - Person.__table__.c.target_id + Manager.target_id.property.columns[0], Person.__table__.c.target_id ) # do a brief round trip on this Base.metadata.create_all() session = Session() o1, o2 = Other(), Other() - session.add_all([ - Engineer(target=o1), - Manager(target=o2), - Manager(target=o1) - ]) + session.add_all( + [Engineer(target=o1), Manager(target=o2), Manager(target=o1)] + ) session.commit() eq_(session.query(Engineer).first().target, o1) @@ -767,8 +859,9 @@ class DeclarativeInheritanceTest(DeclarativeTestBase): #4352. """ + class Person(Base): - __tablename__ = 'person' + __tablename__ = "person" id = Column(Integer, primary_key=True) target_id = Column(Integer, primary_key=True) @@ -780,8 +873,8 @@ class DeclarativeInheritanceTest(DeclarativeTestBase): @declared_attr def target_id(cls): return cls.__table__.c.get( - 'target_id', - Column(Integer, primary_key=True)) + "target_id", Column(Integer, primary_key=True) + ) class Manager(Person): @@ -790,22 +883,22 @@ class DeclarativeInheritanceTest(DeclarativeTestBase): @declared_attr def target_id(cls): return cls.__table__.c.get( - 'target_id', - Column(Integer, primary_key=True)) + "target_id", Column(Integer, primary_key=True) + ) is_( Engineer.target_id.property.columns[0], - Person.__table__.c.target_id + Person.__table__.c.target_id, ) is_( - Manager.target_id.property.columns[0], - Person.__table__.c.target_id + Manager.target_id.property.columns[0], Person.__table__.c.target_id ) def test_columns_single_inheritance_cascading_resolution_pk(self): """An additional test for #4352 in terms of the requested use case. """ + class TestBase(Base): __abstract__ = True @@ -813,14 +906,15 @@ class DeclarativeInheritanceTest(DeclarativeTestBase): def id(cls): col_val = None if TestBase not in cls.__bases__: - col_val = cls.__table__.c.get('id') + col_val = cls.__table__.c.get("id") if col_val is None: col_val = Column(Integer, primary_key=True) return col_val class Person(TestBase): """single table base class""" - __tablename__ = 'person' + + __tablename__ = "person" class Engineer(Person): """ single table inheritance, no extra cols """ @@ -832,130 +926,143 @@ class DeclarativeInheritanceTest(DeclarativeTestBase): is_(Manager.id.property.columns[0], Person.__table__.c.id) def test_joined_from_single(self): - class Company(Base, fixtures.ComparableEntity): - __tablename__ = 'companies' - id = Column('id', Integer, primary_key=True, - test_needs_autoincrement=True) - name = Column('name', String(50)) - employees = relationship('Person') + __tablename__ = "companies" + id = Column( + "id", Integer, primary_key=True, test_needs_autoincrement=True + ) + name = Column("name", String(50)) + employees = relationship("Person") class Person(Base, fixtures.ComparableEntity): - __tablename__ = 'people' - id = Column(Integer, primary_key=True, - test_needs_autoincrement=True) - company_id = Column(Integer, ForeignKey('companies.id')) + __tablename__ = "people" + id = Column( + Integer, primary_key=True, test_needs_autoincrement=True + ) + company_id = Column(Integer, ForeignKey("companies.id")) name = Column(String(50)) - discriminator = Column('type', String(50)) - __mapper_args__ = {'polymorphic_on': discriminator} + discriminator = Column("type", String(50)) + __mapper_args__ = {"polymorphic_on": discriminator} class Manager(Person): - __mapper_args__ = {'polymorphic_identity': 'manager'} + __mapper_args__ = {"polymorphic_identity": "manager"} golf_swing = Column(String(50)) class Engineer(Person): - __tablename__ = 'engineers' - __mapper_args__ = {'polymorphic_identity': 'engineer'} - id = Column(Integer, ForeignKey('people.id'), - primary_key=True) + __tablename__ = "engineers" + __mapper_args__ = {"polymorphic_identity": "engineer"} + id = Column(Integer, ForeignKey("people.id"), primary_key=True) primary_language = Column(String(50)) assert Person.__table__.c.golf_swing is not None - assert 'primary_language' not in Person.__table__.c + assert "primary_language" not in Person.__table__.c assert Engineer.__table__.c.primary_language is not None assert Engineer.primary_language is not None assert Manager.golf_swing is not None - assert not hasattr(Person, 'primary_language') - assert not hasattr(Person, 'golf_swing') - assert not hasattr(Engineer, 'golf_swing') - assert not hasattr(Manager, 'primary_language') + assert not hasattr(Person, "primary_language") + assert not hasattr(Person, "golf_swing") + assert not hasattr(Engineer, "golf_swing") + assert not hasattr(Manager, "primary_language") Base.metadata.create_all() sess = create_session() - e1 = Engineer(name='dilbert', primary_language='java') - e2 = Engineer(name='wally', primary_language='c++') - m1 = Manager(name='dogbert', golf_swing='fore!') - c1 = Company(name='MegaCorp, Inc.', employees=[e1, e2, m1]) - e3 = Engineer(name='vlad', primary_language='cobol') - c2 = Company(name='Elbonia, Inc.', employees=[e3]) + e1 = Engineer(name="dilbert", primary_language="java") + e2 = Engineer(name="wally", primary_language="c++") + m1 = Manager(name="dogbert", golf_swing="fore!") + c1 = Company(name="MegaCorp, Inc.", employees=[e1, e2, m1]) + e3 = Engineer(name="vlad", primary_language="cobol") + c2 = Company(name="Elbonia, Inc.", employees=[e3]) sess.add(c1) sess.add(c2) sess.flush() sess.expunge_all() - eq_(sess.query(Person).with_polymorphic(Engineer). - filter(Engineer.primary_language - == 'cobol').first(), Engineer(name='vlad')) - eq_(sess.query(Company).filter(Company.employees.of_type(Engineer). - any(Engineer.primary_language - == 'cobol')).first(), c2) - eq_(sess.query(Engineer).filter_by(primary_language='cobol' - ).one(), - Engineer(name='vlad', primary_language='cobol')) + eq_( + sess.query(Person) + .with_polymorphic(Engineer) + .filter(Engineer.primary_language == "cobol") + .first(), + Engineer(name="vlad"), + ) + eq_( + sess.query(Company) + .filter( + Company.employees.of_type(Engineer).any( + Engineer.primary_language == "cobol" + ) + ) + .first(), + c2, + ) + eq_( + sess.query(Engineer).filter_by(primary_language="cobol").one(), + Engineer(name="vlad", primary_language="cobol"), + ) def test_single_from_joined_colsonsub(self): class Person(Base, fixtures.ComparableEntity): - __tablename__ = 'people' - id = Column(Integer, primary_key=True, - test_needs_autoincrement=True) + __tablename__ = "people" + id = Column( + Integer, primary_key=True, test_needs_autoincrement=True + ) name = Column(String(50)) - discriminator = Column('type', String(50)) - __mapper_args__ = {'polymorphic_on': discriminator} + discriminator = Column("type", String(50)) + __mapper_args__ = {"polymorphic_on": discriminator} class Manager(Person): - __tablename__ = 'manager' - __mapper_args__ = {'polymorphic_identity': 'manager'} - id = Column(Integer, ForeignKey('people.id'), primary_key=True) + __tablename__ = "manager" + __mapper_args__ = {"polymorphic_identity": "manager"} + id = Column(Integer, ForeignKey("people.id"), primary_key=True) golf_swing = Column(String(50)) class Boss(Manager): boss_name = Column(String(50)) is_( - Boss.__mapper__.column_attrs['boss_name'].columns[0], - Manager.__table__.c.boss_name + Boss.__mapper__.column_attrs["boss_name"].columns[0], + Manager.__table__.c.boss_name, ) def test_polymorphic_on_converted_from_inst(self): class A(Base): - __tablename__ = 'A' + __tablename__ = "A" id = Column(Integer, primary_key=True) discriminator = Column(String) @declared_attr def __mapper_args__(cls): return { - 'polymorphic_identity': cls.__name__, - 'polymorphic_on': cls.discriminator + "polymorphic_identity": cls.__name__, + "polymorphic_on": cls.discriminator, } class B(A): pass + is_(B.__mapper__.polymorphic_on, A.__table__.c.discriminator) def test_add_deferred(self): - class Person(Base, fixtures.ComparableEntity): - __tablename__ = 'people' - id = Column('id', Integer, primary_key=True, - test_needs_autoincrement=True) + __tablename__ = "people" + id = Column( + "id", Integer, primary_key=True, test_needs_autoincrement=True + ) Person.name = deferred(Column(String(10))) Base.metadata.create_all() sess = create_session() - p = Person(name='ratbert') + p = Person(name="ratbert") sess.add(p) sess.flush() sess.expunge_all() - eq_(sess.query(Person).all(), [Person(name='ratbert')]) + eq_(sess.query(Person).all(), [Person(name="ratbert")]) sess.expunge_all() - person = sess.query(Person).filter(Person.name == 'ratbert' - ).one() - assert 'name' not in person.__dict__ + person = sess.query(Person).filter(Person.name == "ratbert").one() + assert "name" not in person.__dict__ def test_single_fksonsub(self): """test single inheritance with a foreign key-holding column on @@ -965,78 +1072,90 @@ class DeclarativeInheritanceTest(DeclarativeTestBase): class Person(Base, fixtures.ComparableEntity): - __tablename__ = 'people' - id = Column(Integer, primary_key=True, - test_needs_autoincrement=True) + __tablename__ = "people" + id = Column( + Integer, primary_key=True, test_needs_autoincrement=True + ) name = Column(String(50)) - discriminator = Column('type', String(50)) - __mapper_args__ = {'polymorphic_on': discriminator} + discriminator = Column("type", String(50)) + __mapper_args__ = {"polymorphic_on": discriminator} class Engineer(Person): - __mapper_args__ = {'polymorphic_identity': 'engineer'} - primary_language_id = Column(Integer, - ForeignKey('languages.id')) - primary_language = relationship('Language') + __mapper_args__ = {"polymorphic_identity": "engineer"} + primary_language_id = Column(Integer, ForeignKey("languages.id")) + primary_language = relationship("Language") class Language(Base, fixtures.ComparableEntity): - __tablename__ = 'languages' - id = Column(Integer, primary_key=True, - test_needs_autoincrement=True) + __tablename__ = "languages" + id = Column( + Integer, primary_key=True, test_needs_autoincrement=True + ) name = Column(String(50)) - assert not hasattr(Person, 'primary_language_id') + assert not hasattr(Person, "primary_language_id") Base.metadata.create_all() sess = create_session() - java, cpp, cobol = Language(name='java'), Language(name='cpp'), \ - Language(name='cobol') - e1 = Engineer(name='dilbert', primary_language=java) - e2 = Engineer(name='wally', primary_language=cpp) - e3 = Engineer(name='vlad', primary_language=cobol) + java, cpp, cobol = ( + Language(name="java"), + Language(name="cpp"), + Language(name="cobol"), + ) + e1 = Engineer(name="dilbert", primary_language=java) + e2 = Engineer(name="wally", primary_language=cpp) + e3 = Engineer(name="vlad", primary_language=cobol) sess.add_all([e1, e2, e3]) sess.flush() sess.expunge_all() - eq_(sess.query(Person).filter(Engineer.primary_language.has( - Language.name - == 'cobol')).first(), - Engineer(name='vlad', primary_language=Language(name='cobol'))) - eq_(sess.query(Engineer).filter(Engineer.primary_language.has( - Language.name - == 'cobol')).one(), - Engineer(name='vlad', primary_language=Language(name='cobol'))) - eq_(sess.query(Person).join(Engineer.primary_language).order_by( - Language.name).all(), - [Engineer(name='vlad', - primary_language=Language(name='cobol')), - Engineer(name='wally', primary_language=Language(name='cpp' - )), - Engineer(name='dilbert', primary_language=Language(name='java'))]) + eq_( + sess.query(Person) + .filter(Engineer.primary_language.has(Language.name == "cobol")) + .first(), + Engineer(name="vlad", primary_language=Language(name="cobol")), + ) + eq_( + sess.query(Engineer) + .filter(Engineer.primary_language.has(Language.name == "cobol")) + .one(), + Engineer(name="vlad", primary_language=Language(name="cobol")), + ) + eq_( + sess.query(Person) + .join(Engineer.primary_language) + .order_by(Language.name) + .all(), + [ + Engineer(name="vlad", primary_language=Language(name="cobol")), + Engineer(name="wally", primary_language=Language(name="cpp")), + Engineer( + name="dilbert", primary_language=Language(name="java") + ), + ], + ) def test_single_three_levels(self): - class Person(Base, fixtures.ComparableEntity): - __tablename__ = 'people' + __tablename__ = "people" id = Column(Integer, primary_key=True) name = Column(String(50)) - discriminator = Column('type', String(50)) - __mapper_args__ = {'polymorphic_on': discriminator} + discriminator = Column("type", String(50)) + __mapper_args__ = {"polymorphic_on": discriminator} class Engineer(Person): - __mapper_args__ = {'polymorphic_identity': 'engineer'} + __mapper_args__ = {"polymorphic_identity": "engineer"} primary_language = Column(String(50)) class JuniorEngineer(Engineer): - __mapper_args__ = \ - {'polymorphic_identity': 'junior_engineer'} + __mapper_args__ = {"polymorphic_identity": "junior_engineer"} nerf_gun = Column(String(50)) class Manager(Person): - __mapper_args__ = {'polymorphic_identity': 'manager'} + __mapper_args__ = {"polymorphic_identity": "manager"} golf_swing = Column(String(50)) assert JuniorEngineer.nerf_gun @@ -1044,33 +1163,31 @@ class DeclarativeInheritanceTest(DeclarativeTestBase): assert JuniorEngineer.name assert Manager.golf_swing assert Engineer.primary_language - assert not hasattr(Engineer, 'golf_swing') - assert not hasattr(Engineer, 'nerf_gun') - assert not hasattr(Manager, 'nerf_gun') - assert not hasattr(Manager, 'primary_language') + assert not hasattr(Engineer, "golf_swing") + assert not hasattr(Engineer, "nerf_gun") + assert not hasattr(Manager, "nerf_gun") + assert not hasattr(Manager, "primary_language") def test_single_detects_conflict(self): - class Person(Base): - __tablename__ = 'people' + __tablename__ = "people" id = Column(Integer, primary_key=True) name = Column(String(50)) - discriminator = Column('type', String(50)) - __mapper_args__ = {'polymorphic_on': discriminator} + discriminator = Column("type", String(50)) + __mapper_args__ = {"polymorphic_on": discriminator} class Engineer(Person): - __mapper_args__ = {'polymorphic_identity': 'engineer'} + __mapper_args__ = {"polymorphic_identity": "engineer"} primary_language = Column(String(50)) # test sibling col conflict def go(): - class Manager(Person): - __mapper_args__ = {'polymorphic_identity': 'manager'} + __mapper_args__ = {"polymorphic_identity": "manager"} golf_swing = Column(String(50)) primary_language = Column(String(50)) @@ -1079,72 +1196,64 @@ class DeclarativeInheritanceTest(DeclarativeTestBase): # test parent col conflict def go(): - class Salesman(Person): - __mapper_args__ = {'polymorphic_identity': 'manager'} + __mapper_args__ = {"polymorphic_identity": "manager"} name = Column(String(50)) assert_raises(sa.exc.ArgumentError, go) def test_single_no_special_cols(self): - class Person(Base, fixtures.ComparableEntity): - __tablename__ = 'people' - id = Column('id', Integer, primary_key=True) - name = Column('name', String(50)) - discriminator = Column('type', String(50)) - __mapper_args__ = {'polymorphic_on': discriminator} + __tablename__ = "people" + id = Column("id", Integer, primary_key=True) + name = Column("name", String(50)) + discriminator = Column("type", String(50)) + __mapper_args__ = {"polymorphic_on": discriminator} def go(): - class Engineer(Person): - __mapper_args__ = {'polymorphic_identity': 'engineer'} - primary_language = Column('primary_language', - String(50)) + __mapper_args__ = {"polymorphic_identity": "engineer"} + primary_language = Column("primary_language", String(50)) foo_bar = Column(Integer, primary_key=True) - assert_raises_message(sa.exc.ArgumentError, - 'place primary key', go) + assert_raises_message(sa.exc.ArgumentError, "place primary key", go) def test_single_no_table_args(self): - class Person(Base, fixtures.ComparableEntity): - __tablename__ = 'people' - id = Column('id', Integer, primary_key=True) - name = Column('name', String(50)) - discriminator = Column('type', String(50)) - __mapper_args__ = {'polymorphic_on': discriminator} + __tablename__ = "people" + id = Column("id", Integer, primary_key=True) + name = Column("name", String(50)) + discriminator = Column("type", String(50)) + __mapper_args__ = {"polymorphic_on": discriminator} def go(): - class Engineer(Person): - __mapper_args__ = {'polymorphic_identity': 'engineer'} - primary_language = Column('primary_language', - String(50)) + __mapper_args__ = {"polymorphic_identity": "engineer"} + primary_language = Column("primary_language", String(50)) # this should be on the Person class, as this is single # table inheritance, which is why we test that this # throws an exception! - __table_args__ = {'mysql_engine': 'InnoDB'} + __table_args__ = {"mysql_engine": "InnoDB"} - assert_raises_message(sa.exc.ArgumentError, - 'place __table_args__', go) + assert_raises_message(sa.exc.ArgumentError, "place __table_args__", go) @testing.emits_warning("This declarative") def test_dupe_name_in_hierarchy(self): class A(Base): __tablename__ = "a" id = Column(Integer, primary_key=True) + a_1 = A class A(a_1): - __tablename__ = 'b' + __tablename__ = "b" id = Column(Integer(), ForeignKey(a_1.id), primary_key=True) assert A.__mapper__.inherits is a_1.__mapper__ @@ -1155,68 +1264,76 @@ class OverlapColPrecedenceTest(DeclarativeTestBase): """test #1892 cases when declarative does column precedence.""" def _run_test(self, Engineer, e_id, p_id): - p_table = Base.metadata.tables['person'] - e_table = Base.metadata.tables['engineer'] + p_table = Base.metadata.tables["person"] + e_table = Base.metadata.tables["engineer"] assert Engineer.id.property.columns[0] is e_table.c[e_id] assert Engineer.id.property.columns[1] is p_table.c[p_id] def test_basic(self): class Person(Base): - __tablename__ = 'person' + __tablename__ = "person" id = Column(Integer, primary_key=True) class Engineer(Person): - __tablename__ = 'engineer' - id = Column(Integer, ForeignKey('person.id'), primary_key=True) + __tablename__ = "engineer" + id = Column(Integer, ForeignKey("person.id"), primary_key=True) self._run_test(Engineer, "id", "id") def test_alt_name_base(self): class Person(Base): - __tablename__ = 'person' + __tablename__ = "person" id = Column("pid", Integer, primary_key=True) class Engineer(Person): - __tablename__ = 'engineer' - id = Column(Integer, ForeignKey('person.pid'), primary_key=True) + __tablename__ = "engineer" + id = Column(Integer, ForeignKey("person.pid"), primary_key=True) self._run_test(Engineer, "id", "pid") def test_alt_name_sub(self): class Person(Base): - __tablename__ = 'person' + __tablename__ = "person" id = Column(Integer, primary_key=True) class Engineer(Person): - __tablename__ = 'engineer' - id = Column("eid", Integer, ForeignKey('person.id'), - primary_key=True) + __tablename__ = "engineer" + id = Column( + "eid", Integer, ForeignKey("person.id"), primary_key=True + ) self._run_test(Engineer, "eid", "id") def test_alt_name_both(self): class Person(Base): - __tablename__ = 'person' + __tablename__ = "person" id = Column("pid", Integer, primary_key=True) class Engineer(Person): - __tablename__ = 'engineer' - id = Column("eid", Integer, ForeignKey('person.pid'), - primary_key=True) + __tablename__ = "engineer" + id = Column( + "eid", Integer, ForeignKey("person.pid"), primary_key=True + ) self._run_test(Engineer, "eid", "pid") class ConcreteInhTest(_RemoveListeners, DeclarativeTestBase): - - def _roundtrip(self, Employee, Manager, Engineer, Boss, - polymorphic=True, explicit_type=False): + def _roundtrip( + self, + Employee, + Manager, + Engineer, + Boss, + polymorphic=True, + explicit_type=False, + ): Base.metadata.create_all() sess = create_session() - e1 = Engineer(name='dilbert', primary_language='java') - e2 = Engineer(name='wally', primary_language='c++') - m1 = Manager(name='dogbert', golf_swing='fore!') - e3 = Engineer(name='vlad', primary_language='cobol') + e1 = Engineer(name="dilbert", primary_language="java") + e2 = Engineer(name="wally", primary_language="c++") + m1 = Manager(name="dogbert", golf_swing="fore!") + e3 = Engineer(name="vlad", primary_language="cobol") b1 = Boss(name="pointy haired") if polymorphic: @@ -1228,7 +1345,9 @@ class ConcreteInhTest(_RemoveListeners, DeclarativeTestBase): AttributeError, "does not implement attribute .?'type' " "at the instance level.", - getattr, obj, "type" + getattr, + obj, + "type", ) else: assert "type" not in Engineer.__dict__ @@ -1239,66 +1358,93 @@ class ConcreteInhTest(_RemoveListeners, DeclarativeTestBase): sess.flush() sess.expunge_all() if polymorphic: - eq_(sess.query(Employee).order_by(Employee.name).all(), - [Engineer(name='dilbert'), Manager(name='dogbert'), - Boss(name='pointy haired'), - Engineer(name='vlad'), Engineer(name='wally')]) + eq_( + sess.query(Employee).order_by(Employee.name).all(), + [ + Engineer(name="dilbert"), + Manager(name="dogbert"), + Boss(name="pointy haired"), + Engineer(name="vlad"), + Engineer(name="wally"), + ], + ) else: - eq_(sess.query(Engineer).order_by(Engineer.name).all(), - [Engineer(name='dilbert'), Engineer(name='vlad'), - Engineer(name='wally')]) - eq_(sess.query(Manager).all(), [Manager(name='dogbert')]) - eq_(sess.query(Boss).all(), [Boss(name='pointy haired')]) + eq_( + sess.query(Engineer).order_by(Engineer.name).all(), + [ + Engineer(name="dilbert"), + Engineer(name="vlad"), + Engineer(name="wally"), + ], + ) + eq_(sess.query(Manager).all(), [Manager(name="dogbert")]) + eq_(sess.query(Boss).all(), [Boss(name="pointy haired")]) e1 = sess.query(Engineer).order_by(Engineer.name).first() sess.expire(e1) - eq_(e1.name, 'dilbert') + eq_(e1.name, "dilbert") def test_explicit(self): engineers = Table( - 'engineers', Base.metadata, - Column('id', - Integer, primary_key=True, test_needs_autoincrement=True), - Column('name', String(50)), - Column('primary_language', String(50))) - managers = Table('managers', Base.metadata, - Column('id', Integer, primary_key=True, - test_needs_autoincrement=True), - Column('name', String(50)), - Column('golf_swing', String(50)) - ) - boss = Table('boss', Base.metadata, - Column('id', Integer, primary_key=True, - test_needs_autoincrement=True), - Column('name', String(50)), - Column('golf_swing', String(50)) - ) - punion = polymorphic_union({ - 'engineer': engineers, - 'manager': managers, - 'boss': boss}, 'type', 'punion') + "engineers", + Base.metadata, + Column( + "id", Integer, primary_key=True, test_needs_autoincrement=True + ), + Column("name", String(50)), + Column("primary_language", String(50)), + ) + managers = Table( + "managers", + Base.metadata, + Column( + "id", Integer, primary_key=True, test_needs_autoincrement=True + ), + Column("name", String(50)), + Column("golf_swing", String(50)), + ) + boss = Table( + "boss", + Base.metadata, + Column( + "id", Integer, primary_key=True, test_needs_autoincrement=True + ), + Column("name", String(50)), + Column("golf_swing", String(50)), + ) + punion = polymorphic_union( + {"engineer": engineers, "manager": managers, "boss": boss}, + "type", + "punion", + ) class Employee(Base, fixtures.ComparableEntity): __table__ = punion - __mapper_args__ = {'polymorphic_on': punion.c.type} + __mapper_args__ = {"polymorphic_on": punion.c.type} class Engineer(Employee): __table__ = engineers - __mapper_args__ = {'polymorphic_identity': 'engineer', - 'concrete': True} + __mapper_args__ = { + "polymorphic_identity": "engineer", + "concrete": True, + } class Manager(Employee): __table__ = managers - __mapper_args__ = {'polymorphic_identity': 'manager', - 'concrete': True} + __mapper_args__ = { + "polymorphic_identity": "manager", + "concrete": True, + } class Boss(Manager): __table__ = boss - __mapper_args__ = {'polymorphic_identity': 'boss', - 'concrete': True} + __mapper_args__ = { + "polymorphic_identity": "boss", + "concrete": True, + } self._roundtrip(Employee, Manager, Engineer, Boss) @@ -1307,34 +1453,38 @@ class ConcreteInhTest(_RemoveListeners, DeclarativeTestBase): class Employee(Base, fixtures.ComparableEntity): - __tablename__ = 'people' - id = Column(Integer, primary_key=True, - test_needs_autoincrement=True) + __tablename__ = "people" + id = Column( + Integer, primary_key=True, test_needs_autoincrement=True + ) name = Column(String(50)) class Engineer(Employee): - __tablename__ = 'engineers' - __mapper_args__ = {'concrete': True} - id = Column(Integer, primary_key=True, - test_needs_autoincrement=True) + __tablename__ = "engineers" + __mapper_args__ = {"concrete": True} + id = Column( + Integer, primary_key=True, test_needs_autoincrement=True + ) primary_language = Column(String(50)) name = Column(String(50)) class Manager(Employee): - __tablename__ = 'manager' - __mapper_args__ = {'concrete': True} - id = Column(Integer, primary_key=True, - test_needs_autoincrement=True) + __tablename__ = "manager" + __mapper_args__ = {"concrete": True} + id = Column( + Integer, primary_key=True, test_needs_autoincrement=True + ) golf_swing = Column(String(50)) name = Column(String(50)) class Boss(Manager): - __tablename__ = 'boss' - __mapper_args__ = {'concrete': True} - id = Column(Integer, primary_key=True, - test_needs_autoincrement=True) + __tablename__ = "boss" + __mapper_args__ = {"concrete": True} + id = Column( + Integer, primary_key=True, test_needs_autoincrement=True + ) golf_swing = Column(String(50)) name = Column(String(50)) @@ -1345,33 +1495,40 @@ class ConcreteInhTest(_RemoveListeners, DeclarativeTestBase): pass class Manager(Employee): - __tablename__ = 'manager' - employee_id = Column(Integer, primary_key=True, - test_needs_autoincrement=True) + __tablename__ = "manager" + employee_id = Column( + Integer, primary_key=True, test_needs_autoincrement=True + ) name = Column(String(50)) golf_swing = Column(String(40)) __mapper_args__ = { - 'polymorphic_identity': 'manager', - 'concrete': True} + "polymorphic_identity": "manager", + "concrete": True, + } class Boss(Manager): - __tablename__ = 'boss' - employee_id = Column(Integer, primary_key=True, - test_needs_autoincrement=True) + __tablename__ = "boss" + employee_id = Column( + Integer, primary_key=True, test_needs_autoincrement=True + ) name = Column(String(50)) golf_swing = Column(String(40)) __mapper_args__ = { - 'polymorphic_identity': 'boss', - 'concrete': True} + "polymorphic_identity": "boss", + "concrete": True, + } class Engineer(Employee): - __tablename__ = 'engineer' - employee_id = Column(Integer, primary_key=True, - test_needs_autoincrement=True) + __tablename__ = "engineer" + employee_id = Column( + Integer, primary_key=True, test_needs_autoincrement=True + ) name = Column(String(50)) primary_language = Column(String(40)) - __mapper_args__ = {'polymorphic_identity': 'engineer', - 'concrete': True} + __mapper_args__ = { + "polymorphic_identity": "engineer", + "concrete": True, + } self._roundtrip(Employee, Manager, Engineer, Boss) @@ -1382,104 +1539,120 @@ class ConcreteInhTest(_RemoveListeners, DeclarativeTestBase): return Column(String(50)) class Manager(Employee): - __tablename__ = 'manager' - employee_id = Column(Integer, primary_key=True, - test_needs_autoincrement=True) + __tablename__ = "manager" + employee_id = Column( + Integer, primary_key=True, test_needs_autoincrement=True + ) paperwork = Column(String(10)) __mapper_args__ = { - 'polymorphic_identity': 'manager', 'concrete': True} + "polymorphic_identity": "manager", + "concrete": True, + } class Engineer(Employee): - __tablename__ = 'engineer' - employee_id = Column(Integer, primary_key=True, - test_needs_autoincrement=True) + __tablename__ = "engineer" + employee_id = Column( + Integer, primary_key=True, test_needs_autoincrement=True + ) @property def paperwork(self): return "p" __mapper_args__ = { - 'polymorphic_identity': 'engineer', 'concrete': True} + "polymorphic_identity": "engineer", + "concrete": True, + } Base.metadata.create_all() sess = Session() - sess.add(Engineer(name='d')) + sess.add(Engineer(name="d")) sess.commit() # paperwork is excluded because there's a descritor; so it is # not in the Engineers mapped properties at all, though is inside the # class manager. Maybe it shouldn't be in the class manager either. - assert 'paperwork' in Engineer.__mapper__.class_manager - assert 'paperwork' not in Engineer.__mapper__.attrs.keys() + assert "paperwork" in Engineer.__mapper__.class_manager + assert "paperwork" not in Engineer.__mapper__.attrs.keys() # type currently does get mapped, as a # ConcreteInheritedProperty, which means, "ignore this thing inherited # from the concrete base". if we didn't specify concrete=True, then # this one gets stuck in the error condition also. - assert 'type' in Engineer.__mapper__.class_manager - assert 'type' in Engineer.__mapper__.attrs.keys() + assert "type" in Engineer.__mapper__.class_manager + assert "type" in Engineer.__mapper__.attrs.keys() e1 = sess.query(Engineer).first() - eq_(e1.name, 'd') + eq_(e1.name, "d") sess.expire(e1) - eq_(e1.name, 'd') + eq_(e1.name, "d") def test_concrete_extension(self): class Employee(ConcreteBase, Base, fixtures.ComparableEntity): - __tablename__ = 'employee' - employee_id = Column(Integer, primary_key=True, - test_needs_autoincrement=True) + __tablename__ = "employee" + employee_id = Column( + Integer, primary_key=True, test_needs_autoincrement=True + ) name = Column(String(50)) __mapper_args__ = { - 'polymorphic_identity': 'employee', - 'concrete': True} + "polymorphic_identity": "employee", + "concrete": True, + } class Manager(Employee): - __tablename__ = 'manager' - employee_id = Column(Integer, primary_key=True, - test_needs_autoincrement=True) + __tablename__ = "manager" + employee_id = Column( + Integer, primary_key=True, test_needs_autoincrement=True + ) name = Column(String(50)) golf_swing = Column(String(40)) __mapper_args__ = { - 'polymorphic_identity': 'manager', - 'concrete': True} + "polymorphic_identity": "manager", + "concrete": True, + } class Boss(Manager): - __tablename__ = 'boss' - employee_id = Column(Integer, primary_key=True, - test_needs_autoincrement=True) + __tablename__ = "boss" + employee_id = Column( + Integer, primary_key=True, test_needs_autoincrement=True + ) name = Column(String(50)) golf_swing = Column(String(40)) __mapper_args__ = { - 'polymorphic_identity': 'boss', - 'concrete': True} + "polymorphic_identity": "boss", + "concrete": True, + } class Engineer(Employee): - __tablename__ = 'engineer' - employee_id = Column(Integer, primary_key=True, - test_needs_autoincrement=True) + __tablename__ = "engineer" + employee_id = Column( + Integer, primary_key=True, test_needs_autoincrement=True + ) name = Column(String(50)) primary_language = Column(String(40)) - __mapper_args__ = {'polymorphic_identity': 'engineer', - 'concrete': True} + __mapper_args__ = { + "polymorphic_identity": "engineer", + "concrete": True, + } + self._roundtrip(Employee, Manager, Engineer, Boss) def test_has_inherited_table_doesnt_consider_base(self): class A(Base): - __tablename__ = 'a' + __tablename__ = "a" id = Column(Integer, primary_key=True) assert not has_inherited_table(A) class B(A): - __tablename__ = 'b' - id = Column(Integer, ForeignKey('a.id'), primary_key=True) + __tablename__ = "b" + id = Column(Integer, ForeignKey("a.id"), primary_key=True) assert has_inherited_table(B) def test_has_inherited_table_in_mapper_args(self): class Test(Base): - __tablename__ = 'test' + __tablename__ = "test" id = Column(Integer, primary_key=True) type = Column(String(20)) @@ -1487,15 +1660,15 @@ class ConcreteInhTest(_RemoveListeners, DeclarativeTestBase): def __mapper_args__(cls): if not has_inherited_table(cls): ret = { - 'polymorphic_identity': 'default', - 'polymorphic_on': cls.type, + "polymorphic_identity": "default", + "polymorphic_on": cls.type, } else: - ret = {'polymorphic_identity': cls.__name__} + ret = {"polymorphic_identity": cls.__name__} return ret class PolyTest(Test): - __tablename__ = 'poly_test' + __tablename__ = "poly_test" id = Column(Integer, ForeignKey(Test.id), primary_key=True) configure_mappers() @@ -1508,9 +1681,10 @@ class ConcreteInhTest(_RemoveListeners, DeclarativeTestBase): pass class Manager(Employee): - __tablename__ = 'manager' - employee_id = Column(Integer, primary_key=True, - test_needs_autoincrement=True) + __tablename__ = "manager" + employee_id = Column( + Integer, primary_key=True, test_needs_autoincrement=True + ) name = Column(String(50)) golf_swing = Column(String(40)) @@ -1519,13 +1693,15 @@ class ConcreteInhTest(_RemoveListeners, DeclarativeTestBase): return "manager" __mapper_args__ = { - 'polymorphic_identity': "manager", - 'concrete': True} + "polymorphic_identity": "manager", + "concrete": True, + } class Boss(Manager): - __tablename__ = 'boss' - employee_id = Column(Integer, primary_key=True, - test_needs_autoincrement=True) + __tablename__ = "boss" + employee_id = Column( + Integer, primary_key=True, test_needs_autoincrement=True + ) name = Column(String(50)) golf_swing = Column(String(40)) @@ -1534,94 +1710,116 @@ class ConcreteInhTest(_RemoveListeners, DeclarativeTestBase): return "boss" __mapper_args__ = { - 'polymorphic_identity': "boss", - 'concrete': True} + "polymorphic_identity": "boss", + "concrete": True, + } class Engineer(Employee): - __tablename__ = 'engineer' - employee_id = Column(Integer, primary_key=True, - test_needs_autoincrement=True) + __tablename__ = "engineer" + employee_id = Column( + Integer, primary_key=True, test_needs_autoincrement=True + ) name = Column(String(50)) primary_language = Column(String(40)) @property def type(self): return "engineer" - __mapper_args__ = {'polymorphic_identity': "engineer", - 'concrete': True} + + __mapper_args__ = { + "polymorphic_identity": "engineer", + "concrete": True, + } + self._roundtrip(Employee, Manager, Engineer, Boss, explicit_type=True) class ConcreteExtensionConfigTest( - _RemoveListeners, testing.AssertsCompiledSQL, DeclarativeTestBase): - __dialect__ = 'default' + _RemoveListeners, testing.AssertsCompiledSQL, DeclarativeTestBase +): + __dialect__ = "default" def test_classreg_setup(self): class A(Base, fixtures.ComparableEntity): - __tablename__ = 'a' - id = Column(Integer, - primary_key=True, test_needs_autoincrement=True) + __tablename__ = "a" + id = Column( + Integer, primary_key=True, test_needs_autoincrement=True + ) data = Column(String(50)) - collection = relationship("BC", primaryjoin="BC.a_id == A.id", - collection_class=set) + collection = relationship( + "BC", primaryjoin="BC.a_id == A.id", collection_class=set + ) class BC(AbstractConcreteBase, Base, fixtures.ComparableEntity): pass class B(BC): - __tablename__ = 'b' - id = Column(Integer, - primary_key=True, test_needs_autoincrement=True) + __tablename__ = "b" + id = Column( + Integer, primary_key=True, test_needs_autoincrement=True + ) - a_id = Column(Integer, ForeignKey('a.id')) + a_id = Column(Integer, ForeignKey("a.id")) data = Column(String(50)) b_data = Column(String(50)) - __mapper_args__ = { - "polymorphic_identity": "b", - "concrete": True - } + __mapper_args__ = {"polymorphic_identity": "b", "concrete": True} class C(BC): - __tablename__ = 'c' - id = Column(Integer, - primary_key=True, test_needs_autoincrement=True) - a_id = Column(Integer, ForeignKey('a.id')) + __tablename__ = "c" + id = Column( + Integer, primary_key=True, test_needs_autoincrement=True + ) + a_id = Column(Integer, ForeignKey("a.id")) data = Column(String(50)) c_data = Column(String(50)) - __mapper_args__ = { - "polymorphic_identity": "c", - "concrete": True - } + __mapper_args__ = {"polymorphic_identity": "c", "concrete": True} Base.metadata.create_all() sess = Session() - sess.add_all([ - A(data='a1', collection=set([ - B(data='a1b1', b_data='a1b1'), - C(data='a1b2', c_data='a1c1'), - B(data='a1b2', b_data='a1b2'), - C(data='a1c2', c_data='a1c2'), - ])), - A(data='a2', collection=set([ - B(data='a2b1', b_data='a2b1'), - C(data='a2c1', c_data='a2c1'), - B(data='a2b2', b_data='a2b2'), - C(data='a2c2', c_data='a2c2'), - ])) - ]) + sess.add_all( + [ + A( + data="a1", + collection=set( + [ + B(data="a1b1", b_data="a1b1"), + C(data="a1b2", c_data="a1c1"), + B(data="a1b2", b_data="a1b2"), + C(data="a1c2", c_data="a1c2"), + ] + ), + ), + A( + data="a2", + collection=set( + [ + B(data="a2b1", b_data="a2b1"), + C(data="a2c1", c_data="a2c1"), + B(data="a2b2", b_data="a2b2"), + C(data="a2c2", c_data="a2c2"), + ] + ), + ), + ] + ) sess.commit() sess.expunge_all() eq_( - sess.query(A).filter_by(data='a2').all(), + sess.query(A).filter_by(data="a2").all(), [ - A(data='a2', collection=set([ - B(data='a2b1', b_data='a2b1'), - B(data='a2b2', b_data='a2b2'), - C(data='a2c1', c_data='a2c1'), - C(data='a2c2', c_data='a2c2'), - ])) - ] + A( + data="a2", + collection=set( + [ + B(data="a2b1", b_data="a2b1"), + B(data="a2b2", b_data="a2b2"), + C(data="a2c1", c_data="a2c1"), + C(data="a2c2", c_data="a2c2"), + ] + ), + ) + ], ) self.assert_compile( @@ -1632,7 +1830,7 @@ class ConcreteExtensionConfigTest( "'c' AS type FROM c UNION ALL SELECT b.id AS id, b.a_id AS a_id, " "b.data AS data, CAST(NULL AS VARCHAR(50)) AS c_data, " "b.b_data AS b_data, 'b' AS type FROM b) AS pjoin " - "ON pjoin.a_id = a.id" + "ON pjoin.a_id = a.id", ) def test_prop_on_base(self): @@ -1641,7 +1839,7 @@ class ConcreteExtensionConfigTest( counter = mock.Mock() class Something(Base): - __tablename__ = 'something' + __tablename__ = "something" id = Column(Integer, primary_key=True) class AbstractConcreteAbstraction(AbstractConcreteBase, Base): @@ -1664,23 +1862,22 @@ class ConcreteExtensionConfigTest( return relationship("Something") class ConcreteConcreteAbstraction(AbstractConcreteAbstraction): - __tablename__ = 'cca' - __mapper_args__ = { - 'polymorphic_identity': 'ccb', - 'concrete': True} + __tablename__ = "cca" + __mapper_args__ = {"polymorphic_identity": "ccb", "concrete": True} # concrete is mapped, the abstract base is not (yet) assert ConcreteConcreteAbstraction.__mapper__ - assert not hasattr(AbstractConcreteAbstraction, '__mapper__') + assert not hasattr(AbstractConcreteAbstraction, "__mapper__") session = Session() self.assert_compile( session.query(ConcreteConcreteAbstraction).filter( - ConcreteConcreteAbstraction.something.has(id=1)), + ConcreteConcreteAbstraction.something.has(id=1) + ), "SELECT cca.id AS cca_id, cca.x AS cca_x, cca.y AS cca_y, " "cca.something_id AS cca_something_id FROM cca WHERE EXISTS " "(SELECT 1 FROM something WHERE something.id = cca.something_id " - "AND something.id = :id_1)" + "AND something.id = :id_1)", ) # now it is @@ -1688,35 +1885,38 @@ class ConcreteExtensionConfigTest( self.assert_compile( session.query(ConcreteConcreteAbstraction).filter( - ConcreteConcreteAbstraction.something_else.has(id=1)), + ConcreteConcreteAbstraction.something_else.has(id=1) + ), "SELECT cca.id AS cca_id, cca.x AS cca_x, cca.y AS cca_y, " "cca.something_id AS cca_something_id FROM cca WHERE EXISTS " "(SELECT 1 FROM something WHERE something.id = cca.something_id " - "AND something.id = :id_1)" + "AND something.id = :id_1)", ) self.assert_compile( session.query(AbstractConcreteAbstraction).filter( - AbstractConcreteAbstraction.something.has(id=1)), + AbstractConcreteAbstraction.something.has(id=1) + ), "SELECT pjoin.id AS pjoin_id, pjoin.x AS pjoin_x, " "pjoin.y AS pjoin_y, pjoin.something_id AS pjoin_something_id, " "pjoin.type AS pjoin_type FROM " "(SELECT cca.id AS id, cca.x AS x, cca.y AS y, " "cca.something_id AS something_id, 'ccb' AS type FROM cca) " "AS pjoin WHERE EXISTS (SELECT 1 FROM something " - "WHERE something.id = pjoin.something_id AND something.id = :id_1)" + "WHERE something.id = pjoin.something_id AND something.id = :id_1)", ) self.assert_compile( session.query(AbstractConcreteAbstraction).filter( - AbstractConcreteAbstraction.something_else.has(id=1)), + AbstractConcreteAbstraction.something_else.has(id=1) + ), "SELECT pjoin.id AS pjoin_id, pjoin.x AS pjoin_x, " "pjoin.y AS pjoin_y, pjoin.something_id AS pjoin_something_id, " "pjoin.type AS pjoin_type FROM " "(SELECT cca.id AS id, cca.x AS x, cca.y AS y, " "cca.something_id AS something_id, 'ccb' AS type FROM cca) " "AS pjoin WHERE EXISTS (SELECT 1 FROM something " - "WHERE something.id = pjoin.something_id AND something.id = :id_1)" + "WHERE something.id = pjoin.something_id AND something.id = :id_1)", ) def test_abstract_in_hierarchy(self): @@ -1729,10 +1929,11 @@ class ConcreteExtensionConfigTest( send_method = Column(String) class ActualDocument(ContactDocument): - __tablename__ = 'actual_documents' + __tablename__ = "actual_documents" __mapper_args__ = { - 'concrete': True, - 'polymorphic_identity': 'actual'} + "concrete": True, + "polymorphic_identity": "actual", + } id = Column(Integer, primary_key=True) @@ -1746,22 +1947,20 @@ class ConcreteExtensionConfigTest( "FROM (SELECT actual_documents.doctype AS doctype, " "actual_documents.send_method AS send_method, " "actual_documents.id AS id, 'actual' AS type " - "FROM actual_documents) AS pjoin" + "FROM actual_documents) AS pjoin", ) def test_column_attr_names(self): """test #3480""" class Document(Base, AbstractConcreteBase): - documentType = Column('documenttype', String) + documentType = Column("documenttype", String) class Offer(Document): - __tablename__ = 'offers' + __tablename__ = "offers" id = Column(Integer, primary_key=True) - __mapper_args__ = { - 'polymorphic_identity': 'offer' - } + __mapper_args__ = {"polymorphic_identity": "offer"} configure_mappers() session = Session() @@ -1770,12 +1969,12 @@ class ConcreteExtensionConfigTest( "SELECT pjoin.documenttype AS pjoin_documenttype, " "pjoin.id AS pjoin_id, pjoin.type AS pjoin_type FROM " "(SELECT offers.documenttype AS documenttype, offers.id AS id, " - "'offer' AS type FROM offers) AS pjoin" + "'offer' AS type FROM offers) AS pjoin", ) self.assert_compile( session.query(Document.documentType), "SELECT pjoin.documenttype AS pjoin_documenttype FROM " "(SELECT offers.documenttype AS documenttype, offers.id AS id, " - "'offer' AS type FROM offers) AS pjoin" + "'offer' AS type FROM offers) AS pjoin", ) |
