]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
Fix up extensions in wake of r2852 mapper.props change
authorJason Kirtland <jek@discorporate.us>
Thu, 5 Jul 2007 23:20:04 +0000 (23:20 +0000)
committerJason Kirtland <jek@discorporate.us>
Thu, 5 Jul 2007 23:20:04 +0000 (23:20 +0000)
lib/sqlalchemy/ext/assignmapper.py
lib/sqlalchemy/ext/associationproxy.py
test/ext/activemapper.py
test/ext/assignmapper.py

index 2170be72fe0d55162cbb278364a1f0237d45c442..f78e464933d4144dd59da220623887bba0f1e327 100644 (file)
@@ -27,11 +27,12 @@ def assign_mapper(ctx, class_, *args, **kwargs):
     validate = kwargs.pop('validate', False)
     if not isinstance(getattr(class_, '__init__'), types.MethodType):
         def __init__(self, **kwargs):
-             for key, value in kwargs.items():
-                 if validate:
-                     if not key in self.mapper.props:
-                         raise exceptions.ArgumentError("Invalid __init__ argument: '%s'" % key)
-                 setattr(self, key, value)
+            if validate:
+                keys = [p.key for p in self.mapper.iterate_properties]
+            for key, value in kwargs.items():
+                if validate and key not in keys:
+                    raise exceptions.ArgumentError("Invalid __init__ argument: '%s'" % key)
+                setattr(self, key, value)
         class_.__init__ = __init__
     extension = kwargs.pop('extension', None)
     if extension is not None:
index 60e6dc0e48d64aa8f436c3af2ec36caac2beb335..b077a433a7f4c15bb6e636dc64ca1d1bb5cda190 100644 (file)
@@ -108,7 +108,7 @@ class AssociationProxy(object):
         self.collection_class = None
 
     def _get_property(self):
-        return orm.class_mapper(self.owning_class).props[self.target_collection]
+        return orm.class_mapper(self.owning_class).get_property(self.target_collection)
 
     def _target_class(self):
         return self._get_property().mapper.class_
index 78aad0c93476b9f55911986b609563ac5bc68f89..dd967d9ec45e2b959b5c17ed2635661e68a11efd 100644 (file)
@@ -313,8 +313,6 @@ class testmanytomany(testbase.PersistTest):
 
          # Optimistically based on activemapper one_to_many test, try  to append
          # baz1 to foo1.bazrel - (AttributeError: 'foo' object has no attribute 'bazrel')
-         print class_mapper(foo).props
-         print class_mapper(baz).props
          foo1.bazrel.append(baz1)
          assert (foo1.bazrel == [baz1])
         
index c5a2d31916ca205baee4cae081a32f6a484044bd..17c10d3d72acbbd1128a05694f594add34acd14d 100644 (file)
@@ -45,6 +45,19 @@ class OverrideAttributesTest(PersistTest):
         ctx.current.clear()
         
         assert SomeObject.get_by(id=s.id).options[0].id == sso.id
+
+        s2 = SomeObject(someid=12)
+        s3 = SomeOtherObject(someid=123, bogus=345)
+         
+        class ValidatedOtherObject(object):pass
+        assign_mapper(ctx, ValidatedOtherObject, table2, validate=True)
+
+        v1 = ValidatedOtherObject(someid=12)
+        try:
+            v2 = ValidatedOtherObject(someid=12, bogus=345)
+            assert False
+        except exceptions.ArgumentError:
+            pass
         
 if __name__ == '__main__':
     testbase.main()