diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2009-08-02 17:51:33 +0000 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2009-08-02 17:51:33 +0000 |
| commit | 68c8b13ed6b8f88d958f72f6d0721b25817c6636 (patch) | |
| tree | 5afd662cfc661f503509a087ae040c35eccc244b /lib | |
| parent | e58b66838d95e9c5e57f3567940f619c730a7d69 (diff) | |
| download | sqlalchemy-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__.py | 2 | ||||
| -rw-r--r-- | lib/sqlalchemy/orm/mapper.py | 3 | ||||
| -rw-r--r-- | lib/sqlalchemy/orm/strategies.py | 5 |
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, |
