diff options
Diffstat (limited to 'lib/sqlalchemy/orm/identity.py')
-rw-r--r-- | lib/sqlalchemy/orm/identity.py | 66 |
1 files changed, 33 insertions, 33 deletions
diff --git a/lib/sqlalchemy/orm/identity.py b/lib/sqlalchemy/orm/identity.py index 83687d682..b3a7f8bc3 100644 --- a/lib/sqlalchemy/orm/identity.py +++ b/lib/sqlalchemy/orm/identity.py @@ -15,30 +15,30 @@ class IdentityMap(dict): self._mutable_attrs = set() self._modified = set() self._wr = weakref.ref(self) - + def replace(self, state): raise NotImplementedError() - + def add(self, state): raise NotImplementedError() - + def remove(self, state): raise NotImplementedError() - + def update(self, dict): raise NotImplementedError("IdentityMap uses add() to insert data") - + def clear(self): raise NotImplementedError("IdentityMap uses remove() to remove data") - + def _manage_incoming_state(self, state): state._instance_dict = self._wr - + if state.modified: - self._modified.add(state) + self._modified.add(state) if state.manager.mutable_attributes: self._mutable_attrs.add(state) - + def _manage_removed_state(self, state): del state._instance_dict self._mutable_attrs.discard(state) @@ -50,7 +50,7 @@ class IdentityMap(dict): def check_modified(self): """return True if any InstanceStates present have been marked as 'modified'.""" - + if self._modified: return True else: @@ -58,10 +58,10 @@ class IdentityMap(dict): if state.modified: return True return False - + def has_key(self, key): return key in self - + def popitem(self): raise NotImplementedError("IdentityMap uses remove() to remove data") @@ -79,7 +79,7 @@ class IdentityMap(dict): def __delitem__(self, key): raise NotImplementedError("IdentityMap uses remove() to remove data") - + class WeakInstanceDict(IdentityMap): def __init__(self): IdentityMap.__init__(self) @@ -107,10 +107,10 @@ class WeakInstanceDict(IdentityMap): return False else: return o is not None - + def contains_state(self, state): return dict.get(self, state.key) is state - + def replace(self, state): if dict.__contains__(self, state.key): existing = dict.__getitem__(self, state.key) @@ -118,7 +118,7 @@ class WeakInstanceDict(IdentityMap): self._manage_removed_state(existing) else: return - + dict.__setitem__(self, state.key, state) self._manage_incoming_state(state) @@ -146,7 +146,7 @@ class WeakInstanceDict(IdentityMap): def remove_key(self, key): state = dict.__getitem__(self, key) self.remove(state) - + def remove(self, state): self._remove_mutex.acquire() try: @@ -156,14 +156,14 @@ class WeakInstanceDict(IdentityMap): "identity map" % state) finally: self._remove_mutex.release() - + self._manage_removed_state(state) - + def discard(self, state): if self.contains_state(state): dict.__delitem__(self, state.key) self._manage_removed_state(state) - + def get(self, key, default=None): if not dict.__contains__(self, key): return default @@ -178,7 +178,7 @@ class WeakInstanceDict(IdentityMap): def items(self): # Py2K return list(self.iteritems()) - + def iteritems(self): # end Py2K self._remove_mutex.acquire() @@ -192,7 +192,7 @@ class WeakInstanceDict(IdentityMap): return iter(result) finally: self._remove_mutex.release() - + def values(self): # Py2K return list(self.itervalues()) @@ -210,29 +210,29 @@ class WeakInstanceDict(IdentityMap): return iter(result) finally: self._remove_mutex.release() - + def all_states(self): self._remove_mutex.acquire() try: # Py3K # return list(dict.values(self)) - + # Py2K return dict.values(self) # end Py2K finally: self._remove_mutex.release() - + def prune(self): return 0 - + class StrongInstanceDict(IdentityMap): def all_states(self): return [attributes.instance_state(o) for o in self.itervalues()] - + def contains_state(self, state): return state.key in self and attributes.instance_state(self[state.key]) is state - + def replace(self, state): if dict.__contains__(self, state.key): existing = dict.__getitem__(self, state.key) @@ -255,26 +255,26 @@ class StrongInstanceDict(IdentityMap): else: dict.__setitem__(self, state.key, state.obj()) self._manage_incoming_state(state) - + def remove(self, state): if attributes.instance_state(dict.pop(self, state.key)) \ is not state: raise AssertionError('State %s is not present in this ' 'identity map' % state) self._manage_removed_state(state) - + def discard(self, state): if self.contains_state(state): dict.__delitem__(self, state.key) self._manage_removed_state(state) - + def remove_key(self, key): state = attributes.instance_state(dict.__getitem__(self, key)) self.remove(state) def prune(self): """prune unreferenced, non-dirty states.""" - + ref_count = len(self) dirty = [s.obj() for s in self.all_states() if s.modified] @@ -286,4 +286,4 @@ class StrongInstanceDict(IdentityMap): dict.update(self, keepers) self.modified = bool(dirty) return ref_count - len(self) - + |