> > self.call(<procedure>, <arg>)
> > self.call("square", 6).addCallback(self.call,
> > "sqrt").addCallback(self.show)
> 
> The easiest way to do this is probably:
> 
> from functools import partial
> self.call("square", 6).addCallback(partial(self.call,
> "sqrt")).addCallback(self.show)

Thanks alot! Did not knew about partial .. I checked the solution you proposed: 
works.

It rectifies the arg order, but introduces more boilerplate to write (and making
usage convenient is my goal).

===

In the meantime, I've come up with 3 others options:

No chaining (no problem here):

      self.call("add", 23*23, 5).addCallback(self.show)

Chaining Option 1:

      self.call("square", 23).addCallback(self.rcall, "add", 
5).addCallback(self.show)

Chaining Option 2:

      self.call("square", 23).addCallback(lambda res: self.call("add", res, 
5)).addCallback(self.show)

Chaining Option 3:

      self.call("square", 23).call("add", 5).addCallback(self.show)


Option 1
=======

Makes use of rcall() vs call()  where rcall() does the reordering of arguments

   def rcall(self, *args):
      a = []
      a.append(args[1]) # procedure ID
      if args[0]:
         a.append(args[0]) # result from previous deferred
         a.extend(args[2:]) # new args
      return self.call(*a)

Pro:    terse, can handle callback&errback
Con:    user needs to remember to use rcall() not call()


Option 2
======
Similar to yours .. just using lambda.

Pro:    standard Python (as yours), can handle callbacks&errbacks
Con:    verbose


Option 3
=======

Makes use of

class AutobahnDeferred(Deferred):
   def call(self, *args):
      return self.addCallback(self.protocol.rcall, *args)

Pro:    most terse
Con:    only supports single callback no errback

====

Currently my thinking is: why not provide all variants?

Anything why I shouldn't do?


> mithrandi, i Ainil en-Balandor, a faer Ambar

ok. nice;) but what does it mean?


> 
> _______________________________________________
> Twisted-Python mailing list
> Twisted-Python@twistedmatrix.com
> http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python

_______________________________________________
Twisted-Python mailing list
Twisted-Python@twistedmatrix.com
http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python

Reply via email to