]> git.ipfire.org Git - ipfire.org.git/blob - www/webapp/handlers_rss.py
Remove obsolete pakfire CGI scripts.
[ipfire.org.git] / www / webapp / handlers_rss.py
1 #!/usr/bin/python
2
3 import textile
4 import tornado.database
5
6 import backend
7
8 from handlers_base import *
9
10 class RSSHandler(BaseHandler):
11 _cache_prefix = ""
12
13 @property
14 def cache_prefix(self):
15 return self._cache_prefix
16
17 def prepare(self):
18 self.set_header("Content-Type", "application/rss+xml")
19
20 def get(self):
21 offset = int(self.get_argument("offset", 0))
22 limit = int(self.get_argument("limit", 10))
23
24 rss_id = "rss-%s-locale=%s-limit=%s-offset=%s" % \
25 (self.cache_prefix, self.locale.code, limit, offset)
26
27 items = self.memcached.get(rss_id)
28 if not items:
29 items = self.generate()
30
31 self.memcached.set(rss_id, items, 15)
32
33 self.render("rss.xml", items=items, title=self.title,
34 url=self.url, description=self.description)
35
36 def generate(self):
37 raise NotImplementedError
38
39
40 class RSSNewsHandler(RSSHandler):
41 _cache_prefix = "news"
42
43 title = "IPFire.org - News"
44 url = "http://www.ipfire.org/"
45 description = "IPFire News Feed"
46
47 def generate(self):
48 offset = int(self.get_argument("offset", 0))
49 limit = int(self.get_argument("limit", 10))
50
51 news = self.news.get_latest(
52 locale=self.locale,
53 limit=limit,
54 offset=offset,
55 )
56
57 items = []
58 for n in news:
59 # Get author information
60 author = self.get_account(n.author_id)
61 n.author = tornado.database.Row(
62 name = author.cn,
63 mail = author.email,
64 )
65
66 # Render text
67 n.text = textile.textile(n.text)
68
69 item = tornado.database.Row({
70 "title" : n.title,
71 "author" : n.author,
72 "date" : n.date,
73 "url" : "http://www.ipfire.org/news/%s" % n.slug,
74 "text" : n.text,
75 })
76 items.append(item)
77
78 return items
79
80
81 class RSSPlanetAllHandler(RSSHandler):
82 _cache_prefix = "planet"
83
84 title = "IPFire.org - Planet"
85 url = "http://planet.ipfire.org/"
86 description = "IPFire Planet Feed"
87
88 def generate(self):
89 offset = int(self.get_argument("offset", 0))
90 limit = int(self.get_argument("limit", 10))
91
92 news = self.planet.get_entries(
93 limit=limit,
94 offset=offset,
95 )
96
97 items = []
98 for n in news:
99 # Get author information
100 author = tornado.database.Row(
101 name = n.author.cn,
102 mail = n.author.email,
103 )
104
105 item = tornado.database.Row({
106 "title" : n.title,
107 "author" : author,
108 "date" : n.published,
109 "url" : "http://planet.ipfire.org/post/%s" % n.slug,
110 "text" : textile.textile(n.text),
111 })
112 items.append(item)
113
114 return items
115
116
117 class RSSPlanetUserHandler(RSSPlanetAllHandler):
118 @property
119 def cache_prefix(self):
120 return "%s-user=%s" % (self._cache_prefix, self.user)
121
122 def get(self, user):
123 self.user = user
124
125 return RSSPlanetAllHandler.get(self)
126
127 def generate(self):
128 offset = int(self.get_argument("offset", 0))
129 limit = int(self.get_argument("limit", 10))
130
131 news = self.planet.get_entries_by_author(
132 self.user,
133 limit=limit,
134 offset=offset,
135 )
136
137 items = []
138 for n in news:
139 # Get author information
140 author = tornado.database.Row(
141 name = n.author.cn,
142 mail = n.author.email,
143 )
144
145 item = tornado.database.Row({
146 "title" : n.title,
147 "author" : author,
148 "date" : n.published,
149 "url" : "http://planet.ipfire.org/post/%s" % n.slug,
150 "text" : textile.textile(n.text),
151 })
152 items.append(item)
153
154 return items