[Twisted-Python] newbie: connecting to a PB service from a web resource
Paul Stevens
paul at nfg.nl
Fri Nov 1 11:38:22 MST 2002
Donovan,
It works ! Way cool. Thanks for your indepth and lucid explanation.
greetings,
Fri, 1 Nov 2002 07:38:27 -0800 Donovan Preston <dp at twistedmatrix.com> quoth:
> It's fairly simple, there's just one important detail you're missing --
> in order to get a node factory_* to wait for a deferred, you have to
> return it. (Ah, the joys of async programming.) Since you're also
> dealing with a series of deferreds, it's even more tricky. Here's what
> you do:
>
> In the factory_getStatus method, get the first Deferred by calling
> connect. Add a callback to it and make sure you pass the node to the
> callback. Return the Deferred. (DOMTemplate will know that in order to
> render this node, it will have to wait for the results of the Deferred.)
>
> In the readStatus callback method (whose signature should be modified
> to accept the node you passed to the callback above), get the second
> deferred, add the setResult callback to it, and pass the node along to
> that callback as well. *Return the Deferred*. (DOMTemplate sees that
> the results of the first Deferred are a second Deferred. It knows that
> in order to render this node, it will have to wait for the results of
> the second Deferred.)
>
> Finally, in the setResult callback method (whose signature should be
> modified to accept the node), you have the result data you wish to
> insert into the node. You also have a reference to the node, since you
> passed it along though all the callbacks. Mutate the node (clear it,
> then node.appendChild(self.d.createTextNode("%s", result))) and *Return
> the node*. (DOMTemplate sees that the results of the second deferred
> are a node, and it will be inserted into the DOM (in this case, since
> the returned node is the same as the node that was passed in, nothing
> happens) and when the DOM is rendered to XML your data will be in it.)
>
> Why is this fairly complicated procedure required? Well, in the
> original factory_getStatus, you call self.connect() which immediately
> returns a Deferred. You assume that self.result is ready -- this is not
> the case. Since the data will not be ready until the callback has
> fired, you have to defer doing the actual work until the callback, as
> well.
>
> Donovan
>
> On Friday, November 1, 2002, at 05:59 AM, Paul Stevens wrote:
>
> >
> >
> > Hi all,
> >
> > I'm trying to build a small webapp that will allow me to connect to a
> > remote PB
> > service. Results from the remote calls are to be used in a simple DOM
> > template.
> >
> > Is this feasable ?
> >
> > I've got all the building blocks functioning alright, using the
> > pbquote.py and
> > pbquoteclient.py code as examples.
> >
> > However, when I try to integrate the code from the commandline client
> > into the
> > dom resource, I'm lost.
> >
> > How can I make sure the client waits a while -- until all callbacks are
> > handled ?
> >
> > I can see the refcount growing on the server side each time I connect
> > to the
> > clientside webserver. But how to disconnect.
> >
> > Clues or pointers anyone ? Thanks.
> >
> >
> > --
> > ________________________________________________________________
> > Paul Stevens mailto:paul at nfg.nl
> > NET FACILITIES GROUP PGP: finger paul at nfg.nl
> > The Netherlands________________________________http://www.nfg.nl
> > <webstatusreporter.py>
>
>
> _______________________________________________
> Twisted-Python mailing list
> Twisted-Python at twistedmatrix.com
> http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python
>
--
________________________________________________________________
Paul Stevens mailto:paul at nfg.nl
NET FACILITIES GROUP PGP: finger paul at nfg.nl
The Netherlands________________________________http://www.nfg.nl
More information about the Twisted-Python
mailing list