summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/orm/unitofwork.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/sqlalchemy/orm/unitofwork.py')
-rw-r--r--lib/sqlalchemy/orm/unitofwork.py20
1 files changed, 16 insertions, 4 deletions
diff --git a/lib/sqlalchemy/orm/unitofwork.py b/lib/sqlalchemy/orm/unitofwork.py
index 4ac9c765e..407b702a8 100644
--- a/lib/sqlalchemy/orm/unitofwork.py
+++ b/lib/sqlalchemy/orm/unitofwork.py
@@ -96,6 +96,8 @@ class UOWTransaction(object):
# information.
self.attributes = {}
+ self.processors = set()
+
def get_attribute_history(self, state, key, passive=True):
hashkey = ("history", state, key)
@@ -136,6 +138,16 @@ class UOWTransaction(object):
else:
task.append(state, listonly=listonly, isdelete=isdelete)
+ # ensure the mapper for this object has had its
+ # DependencyProcessors added.
+ if mapper not in self.processors:
+ mapper._register_processors(self)
+ self.processors.add(mapper)
+
+ if mapper.base_mapper not in self.processors:
+ mapper.base_mapper._register_processors(self)
+ self.processors.add(mapper.base_mapper)
+
def set_row_switch(self, state):
"""mark a deleted object as a 'row switch'.
@@ -147,7 +159,7 @@ class UOWTransaction(object):
task = self.get_task_by_mapper(mapper)
taskelement = task._objects[state]
taskelement.isdelete = "rowswitch"
-
+
def is_deleted(self, state):
"""return true if the given state is marked as deleted within this UOWTransaction."""
@@ -201,9 +213,9 @@ class UOWTransaction(object):
self.dependencies.add((mapper, dependency))
def register_processor(self, mapper, processor, mapperfrom):
- """register a dependency processor, corresponding to dependencies between
- the two given mappers.
-
+ """register a dependency processor, corresponding to
+ operations which occur between two mappers.
+
"""
# correct for primary mapper
mapper = mapper.primary_mapper()