summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/orm/dynamic.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2008-03-30 16:03:23 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2008-03-30 16:03:23 +0000
commit0f0b9552fb4523b1c373492495b2bb72478514b5 (patch)
treed51bcb117b6f15e13399738d1a18ce3929e48453 /lib/sqlalchemy/orm/dynamic.py
parent6a1970e978bea1fc4a95b17f69ce0af65d424806 (diff)
downloadsqlalchemy-0f0b9552fb4523b1c373492495b2bb72478514b5.tar.gz
- rearranged LoaderStrategies a bit
- removed awareness of "dynamic" from attributes and replaced with "impl_class" - moved DynaLoader into dynamic.py - removed create_strategy() method from StrategizedProperty; they set up 'strategy_class' so that StrategizedProperty treats the default the same as the optional loaders
Diffstat (limited to 'lib/sqlalchemy/orm/dynamic.py')
-rw-r--r--lib/sqlalchemy/orm/dynamic.py18
1 files changed, 15 insertions, 3 deletions
diff --git a/lib/sqlalchemy/orm/dynamic.py b/lib/sqlalchemy/orm/dynamic.py
index 09de60db2..133ad99c8 100644
--- a/lib/sqlalchemy/orm/dynamic.py
+++ b/lib/sqlalchemy/orm/dynamic.py
@@ -1,22 +1,34 @@
"""'dynamic' collection API. returns Query() objects on the 'read' side, alters
a special AttributeHistory on the 'write' side."""
-from sqlalchemy import exceptions, util
-from sqlalchemy.orm import attributes, object_session, util as mapperutil
+from sqlalchemy import exceptions, util, logging
+from sqlalchemy.orm import attributes, object_session, util as mapperutil, strategies
from sqlalchemy.orm.query import Query
from sqlalchemy.orm.mapper import has_identity, object_mapper
+
+class DynaLoader(strategies.AbstractRelationLoader):
+ def init_class_attribute(self):
+ self.is_class_level = True
+ self._register_attribute(self.parent.class_, impl_class=DynamicAttributeImpl, target_mapper=self.parent_property.mapper, order_by=self.parent_property.order_by)
+
+ def create_row_processor(self, selectcontext, mapper, row):
+ return (None, None, None)
+
+DynaLoader.logger = logging.class_logger(DynaLoader)
+
class DynamicAttributeImpl(attributes.AttributeImpl):
def __init__(self, class_, key, typecallable, target_mapper, order_by, **kwargs):
super(DynamicAttributeImpl, self).__init__(class_, key, typecallable, **kwargs)
self.target_mapper = target_mapper
self.order_by=order_by
+ self.query_class = AppenderQuery
def get(self, state, passive=False):
if passive:
return self._get_collection_history(state, passive=True).added_items
else:
- return AppenderQuery(self, state)
+ return self.query_class(self, state)
def get_collection(self, state, user_data=None, passive=True):
if passive: