summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/orm/identity.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/sqlalchemy/orm/identity.py')
-rw-r--r--lib/sqlalchemy/orm/identity.py66
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)
-
+