summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/orm/util.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2010-11-20 11:39:44 -0500
committerMike Bayer <mike_mp@zzzcomputing.com>2010-11-20 11:39:44 -0500
commitd505ea71aed44ecae718052131dc0a2fb2c9dd99 (patch)
tree8ecf16d2aa1c23bf7721403d6ff13d0ee5b1da48 /lib/sqlalchemy/orm/util.py
parent4af7bc6cfc8790bf6ef267c059a47952de7c64fa (diff)
parent61c76f92df7c0b5b1ce0178148bab71bc4a64ec7 (diff)
downloadsqlalchemy-d505ea71aed44ecae718052131dc0a2fb2c9dd99.tar.gz
- merge events branch, [ticket:1902]
Diffstat (limited to 'lib/sqlalchemy/orm/util.py')
-rw-r--r--lib/sqlalchemy/orm/util.py74
1 files changed, 1 insertions, 73 deletions
diff --git a/lib/sqlalchemy/orm/util.py b/lib/sqlalchemy/orm/util.py
index db28089ef..9447eed30 100644
--- a/lib/sqlalchemy/orm/util.py
+++ b/lib/sqlalchemy/orm/util.py
@@ -185,78 +185,6 @@ def identity_key(*args, **kwargs):
mapper = object_mapper(instance)
return mapper.identity_key_from_instance(instance)
-class ExtensionCarrier(dict):
- """Fronts an ordered collection of MapperExtension objects.
-
- Bundles multiple MapperExtensions into a unified callable unit,
- encapsulating ordering, looping and EXT_CONTINUE logic. The
- ExtensionCarrier implements the MapperExtension interface, e.g.::
-
- carrier.after_insert(...args...)
-
- The dictionary interface provides containment for implemented
- method names mapped to a callable which executes that method
- for participating extensions.
-
- """
-
- interface = set(method for method in dir(MapperExtension)
- if not method.startswith('_'))
-
- def __init__(self, extensions=None):
- self._extensions = []
- for ext in extensions or ():
- self.append(ext)
-
- def copy(self):
- return ExtensionCarrier(self._extensions)
-
- def push(self, extension):
- """Insert a MapperExtension at the beginning of the collection."""
- self._register(extension)
- self._extensions.insert(0, extension)
-
- def append(self, extension):
- """Append a MapperExtension at the end of the collection."""
- self._register(extension)
- self._extensions.append(extension)
-
- def __iter__(self):
- """Iterate over MapperExtensions in the collection."""
- return iter(self._extensions)
-
- def _register(self, extension):
- """Register callable fronts for overridden interface methods."""
-
- for method in self.interface.difference(self):
- impl = getattr(extension, method, None)
- if impl and impl is not getattr(MapperExtension, method):
- self[method] = self._create_do(method)
-
- def _create_do(self, method):
- """Return a closure that loops over impls of the named method."""
-
- def _do(*args, **kwargs):
- for ext in self._extensions:
- ret = getattr(ext, method)(*args, **kwargs)
- if ret is not EXT_CONTINUE:
- return ret
- else:
- return EXT_CONTINUE
- _do.__name__ = method
- return _do
-
- @staticmethod
- def _pass(*args, **kwargs):
- return EXT_CONTINUE
-
- def __getattr__(self, key):
- """Delegate MapperExtension methods to bundled fronts."""
-
- if key not in self.interface:
- raise AttributeError(key)
- return self.get(key, self._pass)
-
class ORMAdapter(sql_util.ColumnAdapter):
"""Extends ColumnAdapter to accept ORM entities.
@@ -341,7 +269,7 @@ class AliasedClass(object):
existing = getattr(self.__target, prop.key)
comparator = existing.comparator.adapted(self.__adapt_element)
- queryattr = attributes.QueryableAttribute(prop.key,
+ queryattr = attributes.QueryableAttribute(self, prop.key,
impl=existing.impl, parententity=self, comparator=comparator)
setattr(self, prop.key, queryattr)
return queryattr