]> git.ipfire.org Git - ipfire.org.git/blame - webapp/handlers_planet.py
planet: Slight face-lift and add hottest posts
[ipfire.org.git] / webapp / handlers_planet.py
CommitLineData
940227cb
MT
1#!/usr/bin/python
2
3import tornado.web
4
5from handlers_base import *
6
940227cb 7class PlanetBaseHandler(BaseHandler):
a6dc0bad 8 pass
940227cb
MT
9
10
11class PlanetMainHandler(PlanetBaseHandler):
bcc3ed4d
MT
12 rss_url = "/rss"
13
940227cb
MT
14 def get(self):
15 offset = int(self.get_argument("offset", 0))
16 limit = int(self.get_argument("limit", 4))
17
18 entries = self.planet.get_entries(offset=offset, limit=limit)
19
fa7e1a0a 20 self.render("planet/index.html", entries=entries, offset=offset + limit, limit=limit)
940227cb
MT
21
22
d88b8f41
MT
23class PlanetHotEntriesHandler(PlanetBaseHandler):
24 def get(self):
25 days = self.get_argument("days", None)
26 try:
27 days = int(days)
28 except (TypeError, ValueError):
29 days = 30
30
31 entries = self.planet.get_hot_entries(days, limit=25)
32
33 self.render("planet/hottest.html", entries=entries)
34
35
940227cb
MT
36class PlanetUserHandler(PlanetBaseHandler):
37 def get(self, author):
66862195 38 author = self.accounts.get_by_uid(author)
940227cb
MT
39 if not author:
40 raise tornado.web.HTTPError(404, "User is unknown")
41
42 offset = int(self.get_argument("offset", 0))
43 limit = int(self.get_argument("limit", 4))
44
45 entries = self.planet.get_entries_by_author(author.uid,
46 offset=offset, limit=limit)
47
55b162d6 48 self.render("planet/user.html", author=author, entries=entries,
bcc3ed4d 49 offset=offset + limit, limit=limit, rss_url="/user/%s/rss" % author.uid)
940227cb
MT
50
51
52class PlanetPostingHandler(PlanetBaseHandler):
53 def get(self, slug):
d88b8f41 54 self.entry = self.planet.get_entry_by_slug(slug)
940227cb 55
d88b8f41 56 if not self.entry:
940227cb
MT
57 raise tornado.web.HTTPError(404)
58
55b162d6 59 self.render("planet/posting.html",
d88b8f41
MT
60 author=self.entry.author, entry=self.entry)
61
62 def on_finish(self):
63 assert self.entry
64
65 # Get the referer and location for statistical purposes
66 referer = self.request.headers.get("Referer", None)
67 location = self.get_remote_location()
68 if location:
69 location = location.country
70
71 self.entry.count_view(referer=referer, location=location)
2bdd073f
MT
72
73
74class PlanetSearchHandler(PlanetBaseHandler):
75 def get(self):
76 query = self.get_argument("q", "")
77
78 if query:
79 entries = self.planet.search(query)
80 else:
81 entries = []
82
83 self.render("planet/search.html", entries=entries, query=query)
cc3b928d
MT
84
85
86class PlanetYearHandler(PlanetBaseHandler):
87 def get(self, year):
88 entries = self.planet.get_entries_by_year(year)
89
90 months = {}
91 for entry in entries:
92 try:
93 months[entry.month].append(entry)
94 except KeyError:
95 months[entry.month] = [entry]
96
97 months = months.items()
98 months.sort(reverse=True)
99
100 self.render("planet/year.html", months=months, year=year)