summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2009-08-02 17:51:33 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2009-08-02 17:51:33 +0000
commit68c8b13ed6b8f88d958f72f6d0721b25817c6636 (patch)
tree5afd662cfc661f503509a087ae040c35eccc244b /lib
parente58b66838d95e9c5e57f3567940f619c730a7d69 (diff)
downloadsqlalchemy-68c8b13ed6b8f88d958f72f6d0721b25817c6636.tar.gz
- Simplified the sweep of instrumentation in strategies._register_attribute
- Improved support for MapperProperty objects overriding that of an inherited mapper for non-concrete inheritance setups - attribute extensions won't randomly collide with each other. [ticket:1488] - Added AttributeExtension to sqlalchemy.orm.__all__
Diffstat (limited to 'lib')
-rw-r--r--lib/sqlalchemy/orm/__init__.py2
-rw-r--r--lib/sqlalchemy/orm/mapper.py3
-rw-r--r--lib/sqlalchemy/orm/strategies.py5
3 files changed, 8 insertions, 2 deletions
diff --git a/lib/sqlalchemy/orm/__init__.py b/lib/sqlalchemy/orm/__init__.py
index 4c4ec8513..2a20b05ef 100644
--- a/lib/sqlalchemy/orm/__init__.py
+++ b/lib/sqlalchemy/orm/__init__.py
@@ -26,6 +26,7 @@ from sqlalchemy.orm.interfaces import (
MapperExtension,
PropComparator,
SessionExtension,
+ AttributeExtension,
)
from sqlalchemy.orm.util import (
AliasedClass as aliased,
@@ -61,6 +62,7 @@ __all__ = (
'EXT_STOP',
'InstrumentationManager',
'MapperExtension',
+ 'AttributeExtension',
'Validator',
'PropComparator',
'Query',
diff --git a/lib/sqlalchemy/orm/mapper.py b/lib/sqlalchemy/orm/mapper.py
index d53faacf7..078056a01 100644
--- a/lib/sqlalchemy/orm/mapper.py
+++ b/lib/sqlalchemy/orm/mapper.py
@@ -649,6 +649,9 @@ class Mapper(object):
return self
# initialize properties on all mappers
+ # note that _mapper_registry is unordered, which
+ # may randomly conceal/reveal issues related to
+ # the order of mapper compilation
for mapper in list(_mapper_registry):
if getattr(mapper, '_compile_failed', False):
raise sa_exc.InvalidRequestError("One or more mappers failed to compile. Exception was probably "
diff --git a/lib/sqlalchemy/orm/strategies.py b/lib/sqlalchemy/orm/strategies.py
index 1da2231a3..f739fb1dd 100644
--- a/lib/sqlalchemy/orm/strategies.py
+++ b/lib/sqlalchemy/orm/strategies.py
@@ -45,9 +45,10 @@ def _register_attribute(strategy, mapper, useobject,
if useobject:
attribute_ext.append(sessionlib.UOWEventHandler(prop.key))
-
+
for m in mapper.polymorphic_iterator():
- if (m is prop.parent or not m.concrete) and m.has_property(prop.key):
+ if prop is m._props.get(prop.key):
+
attributes.register_attribute_impl(
m.class_,
prop.key,