]>
git.ipfire.org Git - ipfire.org.git/blob - src/web/handlers_rss.py
8 from handlers_base
import *
10 class RSSHandler(BaseHandler
):
15 self
.set_header("Content-Type", "application/rss+xml")
19 value
= self
.get_argument("limit", None)
23 except (TypeError, ValueError):
24 return self
._default
_limit
28 value
= self
.get_argument("offset", None)
32 except (TypeError, ValueError):
33 return self
._default
_offset
35 def get(self
, *args
, **kwargs
):
36 url
= "%s%s" % (self
.request
.host
, self
.request
.path
)
38 rss_id
= "rss-%s-locale=%s-limit=%s-offset=%s" % \
39 (url
, self
.locale
.code
, self
.limit
, self
.offset
)
41 rss
= self
.memcached
.get(rss_id
)
43 logging
.debug("Generating RSS feed (%s)..." % rss_id
)
44 rss
= self
.generate(*args
, **kwargs
)
46 self
.memcached
.set(rss_id
, rss
, 900)
51 raise NotImplementedError
54 class RSSNewsHandler(RSSHandler
):
56 news
= self
.news
.get_latest(locale
=self
.locale
,
57 limit
=self
.limit
, offset
=self
.offset
)
61 # Get author information
62 n
.author
= self
.get_account(n
.author_id
)
65 n
.text
= textile
.textile(n
.text
.decode("utf-8"))
67 item
= backend
.database
.Row({
70 "published" : n
.published
,
71 "url" : "https://www.ipfire.org/news/%s" % n
.slug
,
76 return self
.render_string("feeds/news.xml", items
=items
)
79 class RSSPlanetAllHandler(RSSHandler
):
81 items
= self
.planet
.get_entries(limit
=self
.limit
, offset
=self
.offset
)
83 return self
.render_string("feeds/planet.xml", items
=items
)
86 class RSSPlanetUserHandler(RSSPlanetAllHandler
):
87 def generate(self
, user
):
88 items
= self
.planet
.get_entries_by_author(user
,
89 limit
=self
.limit
, offset
=self
.offset
)
91 return self
.render_string("feeds/planet.xml", items
=items
)