summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/sqlalchemy/orm/attributes.py2
-rw-r--r--test/orm/mapper.py22
2 files changed, 22 insertions, 2 deletions
diff --git a/lib/sqlalchemy/orm/attributes.py b/lib/sqlalchemy/orm/attributes.py
index d8f32d625..ff6c7b02c 100644
--- a/lib/sqlalchemy/orm/attributes.py
+++ b/lib/sqlalchemy/orm/attributes.py
@@ -1044,6 +1044,8 @@ class ClassManager(dict):
self.local_attrs = {}
self.originals = {}
for base in class_.__mro__[-2:0:-1]: # reverse, skipping 1st and last
+ if not isinstance(base, type):
+ continue
cls_state = manager_of_class(base)
if cls_state:
self.update(cls_state)
diff --git a/test/orm/mapper.py b/test/orm/mapper.py
index 57bcba20c..bcc75e402 100644
--- a/test/orm/mapper.py
+++ b/test/orm/mapper.py
@@ -838,13 +838,31 @@ class MapperTest(_fixtures.FixtureTest):
def test_unmapped_error(self):
mapper(Address, addresses)
sa.orm.clear_mappers()
-
+
mapper(User, users, properties={
'addresses':relation(Address)
})
self.assertRaises(sa.orm.exc.UnmappedClassError, sa.orm.compile_mappers)
-
+
+ @testing.resolve_artifact_names
+ def test_oldstyle_mixin(self):
+ class OldStyle:
+ pass
+ class NewStyle(object):
+ pass
+
+ class A(NewStyle, OldStyle):
+ pass
+
+ mapper(A, users)
+
+ class B(OldStyle, NewStyle):
+ pass
+
+ mapper(B, users)
+
+
class OptionsTest(_fixtures.FixtureTest):
@testing.fails_on('maxdb')