--- /dev/null
+.. change::
+ :tags: bug, orm
+ :tickets: 3858
+
+ An ``UnmappedInstanceError`` is now raised for :class:`.InstrumentedAttribute`
+ if an instance is an unmapped object. Prior to this an ``AttributeError``
+ was raised. Pull request courtesy Ramon Williams.
if self._supports_population and self.key in dict_:
return dict_[self.key]
else:
- return self.impl.get(instance_state(instance), dict_)
+ try:
+ state = instance_state(instance)
+ except AttributeError as err:
+ util.raise_(
+ orm_exc.UnmappedInstanceError(instance),
+ replace_context=err,
+ )
+ return self.impl.get(state, dict_)
HasEntityNamespace = util.namedtuple(
lambda: Foo().bars.append(Bar()),
)
+ def test_unmapped_instance_raises(self):
+ class User(object):
+ pass
+
+ instrumentation.register_class(User)
+ attributes.register_attribute(
+ User, "user_name", uselist=False, useobject=False
+ )
+
+ class Blog(object):
+ name = User.user_name
+
+ def go():
+ b = Blog()
+ return b.name
+
+ assert_raises(
+ orm_exc.UnmappedInstanceError, go,
+ )
+
def test_del_scalar_nonobject(self):
class Foo(object):
pass