in some UNION situations, would fail to
propagate the inner columns completely to
the outer query. [ticket:1852]
+
+ - object_session() raises the proper
+ UnmappedInstanceError when presented with an
+ unmapped instance. [ticket:1881]
- sql
- Added basic math expression coercion for
def object_session(instance):
- """Return the ``Session`` to which instance belongs, or None."""
+ """Return the ``Session`` to which instance belongs.
+
+ If the instance is not a mapped instance, an error is raised.
- return _state_session(attributes.instance_state(instance))
+ """
+
+ try:
+ return _state_session(attributes.instance_state(instance))
+ except exc.NO_STATE:
+ raise exc.UnmappedInstanceError(instance)
+
def _state_session(state):
if state.session_id:
from sqlalchemy.test import engines, testing, config
from sqlalchemy import Integer, String, Sequence
from sqlalchemy.test.schema import Table, Column
-from sqlalchemy.orm import mapper, relationship, backref, joinedload
+from sqlalchemy.orm import mapper, relationship, backref, joinedload, \
+ exc as orm_exc, object_session
from sqlalchemy.test.testing import eq_
from test.engine import _base as engine_base
from test.orm import _base, _fixtures
finally:
c.close()
+ @testing.resolve_artifact_names
+ def test_object_session_raises(self):
+ assert_raises(
+ orm_exc.UnmappedInstanceError,
+ object_session,
+ object()
+ )
+
+ assert_raises(
+ orm_exc.UnmappedInstanceError,
+ object_session,
+ User()
+ )
+
@testing.requires.sequences
def test_sequence_execute(self):
seq = Sequence("some_sequence")