diff options
Diffstat (limited to 'vendor/Twisted-10.0.0/doc/web/examples/lj.rpy.py')
-rw-r--r-- | vendor/Twisted-10.0.0/doc/web/examples/lj.rpy.py | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/vendor/Twisted-10.0.0/doc/web/examples/lj.rpy.py b/vendor/Twisted-10.0.0/doc/web/examples/lj.rpy.py new file mode 100644 index 0000000000..796ca37d48 --- /dev/null +++ b/vendor/Twisted-10.0.0/doc/web/examples/lj.rpy.py @@ -0,0 +1,35 @@ +# Copyright (c) 2001-2004 Twisted Matrix Laboratories. +# See LICENSE for details. + +# +# Syndicate LiveJournal users +# Demonstrates how to use chained callbacks +from __future__ import nested_scopes + +from twisted.web import resource as resourcelib +from twisted.web import client, microdom, domhelpers, server + +urlTemplate = 'http://www.livejournal.com/users/%s/rss' + +class LJSyndicatingResource(resourcelib.Resource): + + def render_GET(self, request): + url = urlTemplate % request.args['user'][0] + client.getPage(url).addCallback( + microdom.parseString).addCallback( + lambda t: domhelpers.findNodesNamed(t, 'item')).addCallback( + lambda itms: zip([domhelpers.findNodesNamed(x, 'title')[0] + for x in itms], + [domhelpers.findNodesNamed(x, 'link')[0] + for x in itms] + )).addCallback( + lambda itms: '<html><head></head><body><ul>%s</ul></body></html>' % + '\n'.join( + ['<li><a href="%s">%s</a></li>' % ( + domhelpers.getNodeText(link), domhelpers.getNodeText(title)) + for (title, link) in itms]) + ).addCallback(lambda s: (request.write(s),request.finish())).addErrback( + lambda e: (request.write('Error: %s' % e),request.finish())) + return server.NOT_DONE_YET + +resource = LJSyndicatingResource() |