]>
Commit | Line | Data |
---|---|---|
bcc3ed4d MT |
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 |