]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- a change to the previous __mapper_args__ commit.
authorMike Bayer <mike_mp@zzzcomputing.com>
Tue, 23 Feb 2010 00:57:08 +0000 (00:57 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Tue, 23 Feb 2010 00:57:08 +0000 (00:57 +0000)
- the __mapper_args__ dict is copied when propagating to a subclass,
and is taken straight off the class __dict__ to avoid any
propagation from the parent.  mapper inheritance already
propagates the things you want from the parent mapper.
[ticket:1393]

CHANGES
lib/sqlalchemy/ext/declarative.py
test/ext/test_declarative.py

diff --git a/CHANGES b/CHANGES
index 1c29c4787b5c4772770183fb1cc9b9d77d3da55d..ff260e1bb1c22d3133e2d4f37e9b9848f0fd8ba5 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -166,9 +166,11 @@ CHANGES
     in theory make it easier for custom metaclasses to modify
     the state passed into _as_declarative.
 
-   - the __mapper_args__ dict is copied when propagating to a subclass.
-     Still need to decide how the argument propagation should
-     work in the bigger picture.  [ticket:1393]
+   - the __mapper_args__ dict is copied when propagating to a subclass,
+     and is taken straight off the class __dict__ to avoid any
+     propagation from the parent.  mapper inheritance already
+     propagates the things you want from the parent mapper.
+     [ticket:1393]
      
 - mysql
   - Fixed reflection bug whereby when COLLATE was present, 
index cc972fc6f74619d19a43d14563367452db2c8494..43177e2e239f027f12c309f0fe8b3056c528edf9 100644 (file)
@@ -499,8 +499,11 @@ def _as_declarative(cls, classname, dict_):
                 if not table.c.contains_column(c):
                     raise exceptions.ArgumentError(
                                 "Can't add additional column %r when specifying __table__" % key)
-            
-    mapper_args = dict(getattr(cls, '__mapper_args__', {}))
+    
+    if '__mapper_args__' in dict_:
+        mapper_args = dict(dict_['__mapper_args__'])
+    else:
+        mapper_args = {}
     if 'inherits' not in mapper_args:
         for c in cls.__bases__:
             if _is_mapped_class(c):
index ad99727563d4589226348372efcd802aa1e67a5e..4722427d50420424079fa719814984735bb1caa2 100644 (file)
@@ -924,13 +924,15 @@ class DeclarativeInheritanceTest(DeclarativeTestBase):
             __tablename__ = 'people'
             id = Column(Integer, primary_key=True)
             discriminator = Column('type', String(50))
-            __mapper_args__ = {'polymorphic_on': discriminator}
+            __mapper_args__ = {'polymorphic_on': discriminator,'polymorphic_identity':'person'}
             
         class Engineer(Person):
             primary_language = Column(String(50))
 
         assert 'inherits' not in Person.__mapper_args__
-    
+        assert class_mapper(Engineer).polymorphic_on is None
+        
+        
     def test_custom_join_condition(self):
         class Foo(Base):
             __tablename__ = 'foo'