summaryrefslogtreecommitdiff
path: root/test/ext/declarative/test_basic.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/ext/declarative/test_basic.py')
-rw-r--r--test/ext/declarative/test_basic.py33
1 files changed, 33 insertions, 0 deletions
diff --git a/test/ext/declarative/test_basic.py b/test/ext/declarative/test_basic.py
index 8b60a1176..3fe2f1bfe 100644
--- a/test/ext/declarative/test_basic.py
+++ b/test/ext/declarative/test_basic.py
@@ -15,6 +15,7 @@ from sqlalchemy import util
from sqlalchemy.ext import declarative as decl
from sqlalchemy.ext.declarative import declared_attr
from sqlalchemy.ext.declarative import synonym_for
+from sqlalchemy.ext.declarative.base import _DeferredMapperConfig
from sqlalchemy.ext.hybrid import hybrid_property
from sqlalchemy.orm import backref
from sqlalchemy.orm import class_mapper
@@ -25,6 +26,7 @@ from sqlalchemy.orm import composite
from sqlalchemy.orm import configure_mappers
from sqlalchemy.orm import create_session
from sqlalchemy.orm import deferred
+from sqlalchemy.orm import exc as orm_exc
from sqlalchemy.orm import joinedload
from sqlalchemy.orm import mapper
from sqlalchemy.orm import properties
@@ -116,6 +118,37 @@ class DeclarativeTest(DeclarativeTestBase):
eq_(a1, Address(email="two"))
eq_(a1.user, User(name="u1"))
+ def test_deferred_reflection_default_error(self):
+ class MyExt(object):
+ @classmethod
+ def prepare(cls):
+ "sample prepare method"
+ to_map = _DeferredMapperConfig.classes_for_base(cls)
+ for thingy in to_map:
+ thingy.map()
+
+ @classmethod
+ def _sa_decl_prepare(cls):
+ pass
+
+ class User(MyExt, Base):
+ __tablename__ = "user"
+ id = Column(Integer, primary_key=True)
+
+ assert_raises_message(
+ orm_exc.UnmappedClassError,
+ "Class test.ext.declarative.test_basic.User has a deferred "
+ "mapping on it. It is not yet usable as a mapped class.",
+ Session().query,
+ User,
+ )
+
+ User.prepare()
+
+ self.assert_compile(
+ Session().query(User), 'SELECT "user".id AS user_id FROM "user"'
+ )
+
def test_unicode_string_resolve(self):
class User(Base, fixtures.ComparableEntity):
__tablename__ = "users"