]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
patched **kwargs enhancement for [ticket:361]
authorMike Bayer <mike_mp@zzzcomputing.com>
Fri, 10 Nov 2006 17:17:08 +0000 (17:17 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Fri, 10 Nov 2006 17:17:08 +0000 (17:17 +0000)
examples/association/proxied_association.py
lib/sqlalchemy/ext/associationproxy.py

index 3e80ffa1648eff825e6a4fb1b93098ef1bc6996b..e6180ad8a9775dbf12e08c11cc56ba919515650c 100644 (file)
@@ -35,7 +35,7 @@ metadata.create_all()
 class Order(object):
     def __init__(self, customer_name):
         self.customer_name = customer_name
-    items = AssociationProxy('itemassociations', 'item', creator=lambda x:OrderItem(x))
+    items = AssociationProxy('itemassociations', 'item', creator=lambda x, **kw:OrderItem(x, **kw))
     
 class Item(object):
     def __init__(self, description, price):
@@ -79,6 +79,9 @@ order.itemassociations.append(OrderItem(item('MySQL Crowbar'), 10.99))
 order.items.append(item('SA Mug'))
 order.items.append(item('SA Hat'))
 
+# now append one more item, overriding the price
+order.items.append(item('SA T-Shirt'), price=2.99)
+
 session.save(order)
 session.flush()
 
@@ -97,6 +100,10 @@ print [(item.description, item.price) for item in order.items]
 result = SelectResults(session.query(Order)).join_to('item').select(and_(items.c.description=='MySQL Crowbar', items.c.price>orderitems.c.price))
 print [order.customer_name for order in result]
 
+# print customers who got the special T-shirt discount
+result = SelectResults(session.query(Order)).join_to('item').select(and_(items.c.description=='SA T-Shirt', items.c.price>orderitems.c.price))
+print [order.customer_name for order in result]
+
 
 
 
index 644427902bdb60ce1e45a13e03b95b9f286ec77e..c9160ded4672e7e6c4aa90b836bf67523b7c3452 100644 (file)
@@ -42,11 +42,11 @@ class AssociationProxy(object):
             return self._uselist
     cls = property(_get_class)
     uselist = property(_get_uselist)
-    def create(self, target):
+    def create(self, target, **kw):
         if self.creator is not None:
-            return self.creator(target)
+            return self.creator(target, **kw)
         else:
-            assoc = self.cls()
+            assoc = self.cls(**kw)
             setattr(assoc, self.attr, target)
             return assoc
     def __get__(self, obj, owner):
@@ -79,8 +79,8 @@ class _AssociationList(object):
         """create a new AssociationList."""
         self.proxy = proxy
         self.parent = parent
-    def append(self, item):
-        a = self.proxy.create(item)
+    def append(self, item, **kw):
+        a = self.proxy.create(item, **kw)
         getattr(self.parent, self.proxy.targetcollection).append(a)
     def __iter__(self):
         return iter([getattr(x, self.proxy.attr) for x in getattr(self.parent, self.proxy.targetcollection)])