« Return to Thread: Examples with Stackless Python Re: InlineCallback Friendly ?

Examples with Stackless Python Re: InlineCallback Friendly ?

by Andrew Francis :: Rate this Message:

Reply to Author | View in Thread

Hi Folks:

--- Andrew Francis <andrewfr_ice@...> wrote:

[J-P Calderone]
The only kind of dispatcher which is really hostile
towards inlineCallbacks is the kind which is
hostile towards Deferreds in general - ie, one which
requires a return value and does not support
Deferreds.

[A Francis]
Once again Jean-Paul, I find your explanation super
helpful and save me time going down the wrong path.


Starting off from where I left off in the "Adventures"
presentation, here are code snippets showing how to
handle other protocols with Stackless Python and
Twisted.

I am starting to experiment with resources as a part
of  prototyping REST support in WS-BPEL. I am also
interested in developing front-ends with Flex.

This is an example with resources adapted from the Abe
Fettig example on page 48 of "Twisted Network
Programming Essentials." I am still getting my feet
wet with resources

class HomePage(resource.Resource):
   
    def doWork(self):
        message = """
        <html>
        <head>
        </head>
        <body>
        Hello World    
        </body>
        </html>
        """
        self.request.write(message)
        self.request.finish()
       
       
    def render(self, request):
        self.request = request
        stackless.tasklet(self.doWork)()
        return server.NOT_DONE_YET


and here is one with PyAMF .2

(I remember sketching this one out on a napkin at
PyCon 2008)

class EchoServer(TwistedGateway):
    def __init__(self):
        super(EchoServer, self).__init__()
        self.request = None
        return
       
    def __echo__(self, request, deferred, y):
        print "=>", request, deferred, y
        deferred.callback(y)
       
   
    def echo(self, request, y):
        print "=>", request, y
        deferred = defer.Deferred()
        stackless.tasklet(self.__echo__)(request,
deferred, y)
        return deferred

Cheers,
Andrew





      ____________________________________________________________________________________
Be a better friend, newshound, and
know-it-all with Yahoo! Mobile.  Try it now.  http://mobile.yahoo.com/;_ylt=Ahu06i62sR8HDtDypao8Wcj9tAcJ
from twisted.web              import resource, server
from twisted.internet         import reactor
from twisted.internet         import defer
from twisted.internet         import task
import stackless


class HomePage(resource.Resource):
   
    def doWork(self):
        message = """
        <html>
        <head>
        </head>
        <body>
        Hello World from Andrew    
        </body>
        </html>
        """
        self.request.write(message)
        self.request.finish()
       
       
    def render(self, request):
        self.request = request
        stackless.tasklet(self.doWork)()
        return server.NOT_DONE_YET
       
if __name__ == "__main__":
    root = resource.Resource()
    root.putChild('', HomePage())
    reactor.listenTCP(8000, server.Site(root))
    print "programme starting"
    task.LoopingCall(stackless.schedule).start(.01)
    stackless.tasklet(reactor.run)()
    stackless.run()
   
   
#!/usr/bin/env python
"""

"""
import stackless

from   twisted.web                                     import resource, http, server, error
from   twisted.internet                                import reactor
from   twisted.python                                  import log

from   pyamf                                           import remoting
from   pyamf.remoting.gateway.twisted                  import TwistedGateway
from   twisted.internet                                import defer
from   twisted.internet                                import task

class EchoServer(TwistedGateway):
    def __init__(self):
        super(EchoServer, self).__init__()
        self.request = None
        return
   
   
    def __echo__(self, request, deferred, y):
        print "=>", request, deferred, y
        deferred.callback(y)
       
   
    def echo(self, request, y):
        print "=>", request, y
        deferred = defer.Deferred()
        stackless.tasklet(self.__echo__)(request, deferred, y)
        return deferred
   
   
if __name__== "__main__":
    gw = EchoServer()
    gw.addService(gw.echo, "echo", "echo")
    root = resource.Resource()
    root.putChild('gwplayer', gw)
    reactor.listenTCP(8080, server.Site(root))
    print "reactor running"
    task.LoopingCall(stackless.schedule).start(.01)
    stackless.tasklet(reactor.run)()
    stackless.run()
   
   

 « Return to Thread: Examples with Stackless Python Re: InlineCallback Friendly ?