summaryrefslogtreecommitdiff
path: root/vendor/Twisted-10.0.0/doc/web/examples/lj.rpy.py
diff options
context:
space:
mode:
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.py35
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()