summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy
diff options
context:
space:
mode:
authorHajime Nakagami <nakagami@gmail.com>2013-02-21 23:12:29 +0900
committerHajime Nakagami <nakagami@gmail.com>2013-02-21 23:12:29 +0900
commitd6472a81a794546ef51dc2c3cd7842b63cd3476c (patch)
tree9c80f42e61dc8fce85d8690662c1b3b19c7f5749 /lib/sqlalchemy
parent60028c360768ca7386294cae082b10356034d725 (diff)
parent26fb4b81638189547dd24f525ad0d146f2646916 (diff)
downloadsqlalchemy-d6472a81a794546ef51dc2c3cd7842b63cd3476c.tar.gz
merge from default
Diffstat (limited to 'lib/sqlalchemy')
-rw-r--r--lib/sqlalchemy/orm/__init__.py2
-rw-r--r--lib/sqlalchemy/orm/session.py4
-rw-r--r--lib/sqlalchemy/orm/util.py21
3 files changed, 27 insertions, 0 deletions
diff --git a/lib/sqlalchemy/orm/__init__.py b/lib/sqlalchemy/orm/__init__.py
index e9dde3ca7..0132bb389 100644
--- a/lib/sqlalchemy/orm/__init__.py
+++ b/lib/sqlalchemy/orm/__init__.py
@@ -35,6 +35,7 @@ from .util import (
object_mapper,
outerjoin,
polymorphic_union,
+ was_deleted,
with_parent,
with_polymorphic,
)
@@ -125,6 +126,7 @@ __all__ = (
'undefer',
'undefer_group',
'validates',
+ 'was_deleted',
'with_polymorphic'
)
diff --git a/lib/sqlalchemy/orm/session.py b/lib/sqlalchemy/orm/session.py
index 00c6d4227..2915fd4c8 100644
--- a/lib/sqlalchemy/orm/session.py
+++ b/lib/sqlalchemy/orm/session.py
@@ -255,6 +255,10 @@ class SessionTransaction(object):
if not self.nested and self.session.expire_on_commit:
for s in self.session.identity_map.all_states():
s._expire(s.dict, self.session.identity_map._modified)
+ for s in self._deleted:
+ s.session_id = None
+ self._deleted.clear()
+
def _connection_for_bind(self, bind):
self._assert_is_active()
diff --git a/lib/sqlalchemy/orm/util.py b/lib/sqlalchemy/orm/util.py
index 492523e63..cc9dd6ba5 100644
--- a/lib/sqlalchemy/orm/util.py
+++ b/lib/sqlalchemy/orm/util.py
@@ -1210,9 +1210,30 @@ def _orm_columns(entity):
def has_identity(object):
+ """Return True if the given object has a database
+ identity.
+
+ This typically corresponds to the object being
+ in either the persistent or detached state.
+
+ .. seealso::
+
+ :func:`.was_deleted`
+
+ """
state = attributes.instance_state(object)
return state.has_identity
+def was_deleted(object):
+ """Return True if the given object was deleted
+ within a session flush.
+
+ .. versionadded:: 0.8.0
+
+ """
+
+ state = attributes.instance_state(object)
+ return state.deleted
def instance_str(instance):
"""Return a string describing an instance."""