]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
broke up various class-level mapper/instance fanfare into class_level_loader; load...
authorMike Bayer <mike_mp@zzzcomputing.com>
Fri, 21 Dec 2007 07:10:14 +0000 (07:10 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Fri, 21 Dec 2007 07:10:14 +0000 (07:10 +0000)
lib/sqlalchemy/orm/strategies.py

index 33981f16145100efd469cf1a0cfbcb796c2b3756..7c53e4d254d02a0bb2b7d0a2d6c848776541e5f6 100644 (file)
@@ -120,7 +120,7 @@ class DeferredColumnLoader(LoaderStrategy):
     def init_class_attribute(self):
         self.is_class_level = True
         self.logger.info("register managed attribute %s on class %s" % (self.key, self.parent.class_.__name__))
-        sessionlib.register_attribute(self.parent.class_, self.key, uselist=False, useobject=False, callable_=self.setup_loader, copy_function=self.columns[0].type.copy_value, compare_function=self.columns[0].type.compare_values, mutable_scalars=self.columns[0].type.is_mutable(), comparator=self.parent_property.comparator)
+        sessionlib.register_attribute(self.parent.class_, self.key, uselist=False, useobject=False, callable_=self.class_level_loader, copy_function=self.columns[0].type.copy_value, compare_function=self.columns[0].type.compare_values, mutable_scalars=self.columns[0].type.is_mutable(), comparator=self.parent_property.comparator)
 
     def setup_query(self, context, only_load_props=None, **kwargs):
         if \
@@ -128,8 +128,8 @@ class DeferredColumnLoader(LoaderStrategy):
             (only_load_props and self.key in only_load_props):
             
             self.parent_property._get_strategy(ColumnLoader).setup_query(context, **kwargs)
-        
-    def setup_loader(self, instance, props=None, create_statement=None):
+    
+    def class_level_loader(self, instance, props=None):
         if not mapper.has_mapper(instance):
             return None
             
@@ -143,6 +143,9 @@ class DeferredColumnLoader(LoaderStrategy):
         if prop is not self.parent_property:
             return prop._get_strategy(DeferredColumnLoader).setup_loader(instance)
 
+        return LoadDeferredColumns(instance, self.key, props)
+        
+    def setup_loader(self, instance, props=None, create_statement=None):
         return LoadDeferredColumns(instance, self.key, props, optimizing_statement=create_statement)
                 
 DeferredColumnLoader.logger = logging.class_logger(DeferredColumnLoader)
@@ -150,7 +153,7 @@ DeferredColumnLoader.logger = logging.class_logger(DeferredColumnLoader)
 class LoadDeferredColumns(object):
     """callable, serializable loader object used by DeferredColumnLoader"""
     
-    def __init__(self, instance, key, keys, optimizing_statement):
+    def __init__(self, instance, key, keys, optimizing_statement=None):
         self.instance = instance
         self.key = key
         self.keys = keys
@@ -275,7 +278,7 @@ class LazyLoader(AbstractRelationLoader):
 
     def init_class_attribute(self):
         self.is_class_level = True
-        self._register_attribute(self.parent.class_, callable_=lambda i: self.setup_loader(i))
+        self._register_attribute(self.parent.class_, callable_=self.class_level_loader)
 
     def lazy_clause(self, instance, reverse_direction=False):
         if instance is None:
@@ -314,7 +317,7 @@ class LazyLoader(AbstractRelationLoader):
         
         return visitors.traverse(criterion, clone=True, visit_binary=visit_binary)
         
-    def setup_loader(self, instance, options=None, path=None):
+    def class_level_loader(self, instance, options=None, path=None):
         if not mapper.has_mapper(instance):
             return None
 
@@ -330,6 +333,9 @@ class LazyLoader(AbstractRelationLoader):
         
         return LoadLazyAttribute(instance, self.key, options, path)
 
+    def setup_loader(self, instance, options=None, path=None):
+        return LoadLazyAttribute(instance, self.key, options, path)
+
     def create_row_processor(self, selectcontext, mapper, row):
         if not self.is_class_level or len(selectcontext.options):
             def new_execute(instance, row, ispostselect, **flags):