diff options
| author | Hajime Nakagami <nakagami@gmail.com> | 2013-02-21 23:12:29 +0900 |
|---|---|---|
| committer | Hajime Nakagami <nakagami@gmail.com> | 2013-02-21 23:12:29 +0900 |
| commit | d6472a81a794546ef51dc2c3cd7842b63cd3476c (patch) | |
| tree | 9c80f42e61dc8fce85d8690662c1b3b19c7f5749 /lib/sqlalchemy | |
| parent | 60028c360768ca7386294cae082b10356034d725 (diff) | |
| parent | 26fb4b81638189547dd24f525ad0d146f2646916 (diff) | |
| download | sqlalchemy-d6472a81a794546ef51dc2c3cd7842b63cd3476c.tar.gz | |
merge from default
Diffstat (limited to 'lib/sqlalchemy')
| -rw-r--r-- | lib/sqlalchemy/orm/__init__.py | 2 | ||||
| -rw-r--r-- | lib/sqlalchemy/orm/session.py | 4 | ||||
| -rw-r--r-- | lib/sqlalchemy/orm/util.py | 21 |
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.""" |
