]>
git.ipfire.org Git - people/shoehn/ipfire.org.git/blob - webapp/handlers_rss.py
5 import tornado
.database
9 from handlers_base
import *
11 class RSSHandler(BaseHandler
):
16 self
.set_header("Content-Type", "application/rss+xml")
20 value
= self
.get_argument("limit", None)
24 except (TypeError, ValueError):
25 return self
._default
_limit
29 value
= self
.get_argument("offset", None)
33 except (TypeError, ValueError):
34 return self
._default
_offset
36 def get(self
, *args
, **kwargs
):
37 url
= "%s%s" % (self
.request
.host
, self
.request
.path
)
39 rss_id
= "rss-%s-locale=%s-limit=%s-offset=%s" % \
40 (url
, self
.locale
.code
, self
.limit
, self
.offset
)
42 rss
= self
.memcached
.get(rss_id
)
44 logging
.debug("Generating RSS feed (%s)..." % rss_id
)
45 rss
= self
.generate(*args
, **kwargs
)
47 self
.memcached
.set(rss_id
, rss
, 900)
52 raise NotImplementedError
55 class RSSNewsHandler(RSSHandler
):
57 news
= self
.news
.get_latest(locale
=self
.locale
,
58 limit
=self
.limit
, offset
=self
.offset
)
62 # Get author information
63 n
.author
= self
.get_account(n
.author_id
)
66 n
.text
= textile
.textile(n
.text
)
68 item
= tornado
.database
.Row({
71 "published" : n
.published
,
72 "url" : "http://www.ipfire.org/news/%s" % n
.slug
,
77 return self
.render_string("feeds/news.xml", items
=items
)
80 class RSSPlanetAllHandler(RSSHandler
):
82 items
= self
.planet
.get_entries(limit
=self
.limit
, offset
=self
.offset
)
84 return self
.render_string("feeds/planet.xml", items
=items
)
87 class RSSPlanetUserHandler(RSSPlanetAllHandler
):
88 def generate(self
, user
):
89 items
= self
.planet
.get_entries_by_author(user
,
90 limit
=self
.limit
, offset
=self
.offset
)
92 return self
.render_string("feeds/planet.xml", items
=items
)