From 9b6a9b7aeab79ba28737f394fa6cfaaf1f1f1bcf Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Sun, 17 Aug 2008 21:55:00 +0000 Subject: [PATCH] temporary check for unmapped class, until [ticket:1142] is resolved --- lib/sqlalchemy/orm/properties.py | 4 +++- lib/sqlalchemy/orm/util.py | 5 +++++ test/orm/mapper.py | 11 +++++++++++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/lib/sqlalchemy/orm/properties.py b/lib/sqlalchemy/orm/properties.py index 4056c2ff91..ebe61b19e2 100644 --- a/lib/sqlalchemy/orm/properties.py +++ b/lib/sqlalchemy/orm/properties.py @@ -530,7 +530,9 @@ class PropertyLoader(StrategizedProperty): self.mapper = mapper.class_mapper(self.argument(), compile=False) else: raise sa_exc.ArgumentError("relation '%s' expects a class or a mapper argument (received: %s)" % (self.key, type(self.argument))) - assert isinstance(self.mapper, mapper.Mapper), self.mapper + + # TODO: an informative assertion ? + assert isinstance(self.mapper, mapper.Mapper) # accept callables for other attributes which may require deferred initialization for attr in ('order_by', 'primaryjoin', 'secondaryjoin', 'secondary', '_foreign_keys', 'remote_side'): diff --git a/lib/sqlalchemy/orm/util.py b/lib/sqlalchemy/orm/util.py index 928b38fd3f..4915d930d6 100644 --- a/lib/sqlalchemy/orm/util.py +++ b/lib/sqlalchemy/orm/util.py @@ -464,6 +464,11 @@ def class_mapper(class_, compile=True, raiseerror=True): try: class_manager = attributes.manager_of_class(class_) mapper = class_manager.mapper + + # HACK until [ticket:1142] is complete + if mapper is None: + raise exc.NO_STATE + except exc.NO_STATE: if not raiseerror: return diff --git a/test/orm/mapper.py b/test/orm/mapper.py index 73afd3b998..57bcba20ce 100644 --- a/test/orm/mapper.py +++ b/test/orm/mapper.py @@ -834,6 +834,17 @@ class MapperTest(_fixtures.FixtureTest): create_session().query(User).first() eq_(recon, ['go']) + @testing.resolve_artifact_names + 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) + class OptionsTest(_fixtures.FixtureTest): @testing.fails_on('maxdb') -- 2.47.3