From: Mike Bayer Date: Fri, 10 Nov 2006 17:17:08 +0000 (+0000) Subject: patched **kwargs enhancement for [ticket:361] X-Git-Tag: rel_0_3_1~8 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=527626a19a47f6a477009b9b1109b99ca9b3d77f;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git patched **kwargs enhancement for [ticket:361] --- diff --git a/examples/association/proxied_association.py b/examples/association/proxied_association.py index 3e80ffa164..e6180ad8a9 100644 --- a/examples/association/proxied_association.py +++ b/examples/association/proxied_association.py @@ -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] + diff --git a/lib/sqlalchemy/ext/associationproxy.py b/lib/sqlalchemy/ext/associationproxy.py index 644427902b..c9160ded46 100644 --- a/lib/sqlalchemy/ext/associationproxy.py +++ b/lib/sqlalchemy/ext/associationproxy.py @@ -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)])