From f4b1484ff570125ba511ed931e8e5e53d53f4866 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Sat, 17 Feb 2007 03:14:36 +0000 Subject: - extension() query option propigates to Mapper._instance() method so that all loading-related methods get called [ticket:454] --- lib/sqlalchemy/orm/mapper.py | 10 +++++----- lib/sqlalchemy/orm/query.py | 5 +++-- 2 files changed, 8 insertions(+), 7 deletions(-) (limited to 'lib') diff --git a/lib/sqlalchemy/orm/mapper.py b/lib/sqlalchemy/orm/mapper.py index 1d4ce6bb9..18c4c3acb 100644 --- a/lib/sqlalchemy/orm/mapper.py +++ b/lib/sqlalchemy/orm/mapper.py @@ -1200,9 +1200,9 @@ class Mapper(object): if not context.identity_map.has_key(identitykey): context.identity_map[identitykey] = instance isnew = True - if self.extension.populate_instance(self, context, row, instance, identitykey, isnew) is EXT_PASS: + if context.extension.populate_instance(self, context, row, instance, identitykey, isnew) is EXT_PASS: self.populate_instance(context, instance, row, identitykey, isnew) - if self.extension.append_result(self, context, row, instance, identitykey, result, isnew) is EXT_PASS: + if context.extension.append_result(self, context, row, instance, identitykey, result, isnew) is EXT_PASS: if result is not None: result.append(instance) return instance @@ -1228,7 +1228,7 @@ class Mapper(object): return None # plugin point - instance = self.extension.create_instance(self, context, row, self.class_) + instance = context.extension.create_instance(self, context, row, self.class_) if instance is EXT_PASS: instance = self._create_instance(context.session) else: @@ -1243,9 +1243,9 @@ class Mapper(object): # call further mapper properties on the row, to pull further # instances from the row and possibly populate this item. - if self.extension.populate_instance(self, context, row, instance, identitykey, isnew) is EXT_PASS: + if context.extension.populate_instance(self, context, row, instance, identitykey, isnew) is EXT_PASS: self.populate_instance(context, instance, row, identitykey, isnew) - if self.extension.append_result(self, context, row, instance, identitykey, result, isnew) is EXT_PASS: + if context.extension.append_result(self, context, row, instance, identitykey, result, isnew) is EXT_PASS: if result is not None: result.append(instance) return instance diff --git a/lib/sqlalchemy/orm/query.py b/lib/sqlalchemy/orm/query.py index 4c0a4b1ec..e7b124372 100644 --- a/lib/sqlalchemy/orm/query.py +++ b/lib/sqlalchemy/orm/query.py @@ -323,7 +323,7 @@ class Query(object): session = self.session - context = SelectionContext(self.select_mapper, session, with_options=self.with_options, **kwargs) + context = SelectionContext(self.select_mapper, session, self.extension, with_options=self.with_options, **kwargs) result = util.UniqueAppender([]) if mappers: @@ -525,10 +525,11 @@ class SelectionContext(OperationContext): to the freshly loaded value """ - def __init__(self, mapper, session, **kwargs): + def __init__(self, mapper, session, extension, **kwargs): self.populate_existing = kwargs.pop('populate_existing', False) self.version_check = kwargs.pop('version_check', False) self.session = session + self.extension = extension self.identity_map = {} super(SelectionContext, self).__init__(mapper, kwargs.pop('with_options', []), **kwargs) def accept_option(self, opt): -- cgit v1.2.1