]> git.ipfire.org Git - ipfire.org.git/blame - src/web/blog.py
blog: Add RSS feed to the blog
[ipfire.org.git] / src / web / blog.py
CommitLineData
12e5de7e
MT
1#!/usr/bin/python
2
f0714277 3import email.utils
12e5de7e
MT
4import tornado.web
5
6import handlers_base as base
7
f91dfcc7
MT
8from . import ui_modules
9
8a897d25
MT
10class IndexHandler(base.BaseHandler):
11 def get(self):
12 posts = self.planet.get_entries(limit=3)
13
14 self.render("blog/index.html", posts=posts)
15
16
cfc0823a
MT
17class AuthorHandler(base.BaseHandler):
18 def get(self, uid):
19 author = self.accounts.get_by_uid(uid)
20 if not author:
21 raise tornado.web.HTTPError(404, "User is unknown")
22
23 # Get all posts from this author
24 posts = self.planet.get_entries_by_author(author.uid)
25 if not posts:
26 raise tornado.web.HTTPError(404, "User has no posts")
27
28 self.render("blog/author.html", author=author, posts=posts)
29
30
f0714277
MT
31class FeedHandler(base.BaseHandler):
32 def get(self):
33 cache_key = "%s-%s" % (self.request.host, self.request.path)
34
35 # Get feed from cache if possible
36 feed = self.memcached.get(cache_key)
37 if not feed:
38 posts = self.planet.get_entries(limit=50)
39
40 # Render the feed
41 feed = self.render_string("blog/feed.xml", posts=posts,
42 now=email.utils.formatdate())
43
44 # Store in cache for 5min
45 self.memcached.set(cache_key, feed, 300)
46
47 # Set correct content type
48 self.set_header("Content-Type", "application/rss+xml")
49
50 # Deliver content
51 self.finish(feed)
52
53
12e5de7e
MT
54class PostHandler(base.BaseHandler):
55 def get(self, slug):
56 entry = self.planet.get_entry_by_slug(slug)
57 if not entry:
58 raise tornado.web.HTTPError(404)
59
60 self.render("blog/post.html", post=entry)
f91dfcc7
MT
61
62
e6b18dce
MT
63class SearchHandler(base.BaseHandler):
64 def get(self):
65 q = self.get_argument("q")
66
67 posts = self.planet.search(q)
68 if not posts:
69 raise tornado.web.HTTPError(404, "Nothing found")
70
71 self.render("blog/search-results.html", q=q, posts=posts)
72
73
f91dfcc7
MT
74class PostModule(ui_modules.UIModule):
75 def render(self, post):
76 return self.render_string("blog/modules/post.html", post=post)
8a897d25
MT
77
78
79class PostsModule(ui_modules.UIModule):
80 def render(self, posts):
81 return self.render_string("blog/modules/posts.html", posts=posts)