from handlers_base import *
class PlanetBaseHandler(BaseHandler):
- pass
+ def group_entries_by_month(self, entries):
+ months = {}
+
+ for entry in entries:
+ key = (entry.published.year, entry.published.month)
+
+ try:
+ months[key].append(entry)
+ except KeyError:
+ months[key] = [entry]
+
+ months = months.items()
+ months.sort(reverse=True)
+
+ return months
class PlanetMainHandler(PlanetBaseHandler):
self.render("planet/index.html", entries=entries, offset=offset + limit, limit=limit)
+class PlanetHotEntriesHandler(PlanetBaseHandler):
+ def get(self):
+ days = self.get_argument("days", None)
+ try:
+ days = int(days)
+ except (TypeError, ValueError):
+ days = 30
+
+ entries = self.planet.get_hot_entries(days, limit=25)
+
+ self.render("planet/hottest.html", entries=entries)
+
+
class PlanetUserHandler(PlanetBaseHandler):
def get(self, author):
author = self.accounts.get_by_uid(author)
if not author:
raise tornado.web.HTTPError(404, "User is unknown")
- offset = int(self.get_argument("offset", 0))
- limit = int(self.get_argument("limit", 4))
+ entries = self.planet.get_entries_by_author(author.uid)
+ entries = self.group_entries_by_month(entries)
- entries = self.planet.get_entries_by_author(author.uid,
- offset=offset, limit=limit)
-
- self.render("planet/user.html", author=author, entries=entries,
- offset=offset + limit, limit=limit, rss_url="/user/%s/rss" % author.uid)
+ self.render("planet/list.html", author=author, year=None,
+ entries=entries, rss_url="/user/%s/rss" % author.uid)
class PlanetPostingHandler(PlanetBaseHandler):
def get(self, slug):
- entry = self.planet.get_entry_by_slug(slug)
+ self.entry = self.planet.get_entry_by_slug(slug)
- if not entry:
+ if not self.entry:
raise tornado.web.HTTPError(404)
self.render("planet/posting.html",
- author=entry.author, entry=entry)
+ author=self.entry.author, entry=self.entry)
+
+ def on_finish(self):
+ assert self.entry
+
+ # Get the referer and location for statistical purposes
+ referer = self.request.headers.get("Referer", None)
+ location = self.get_remote_location()
+ if location:
+ location = location.country
+
+ self.entry.count_view(referer=referer, location=location)
class PlanetSearchHandler(PlanetBaseHandler):
class PlanetYearHandler(PlanetBaseHandler):
def get(self, year):
entries = self.planet.get_entries_by_year(year)
+ entries = self.group_entries_by_month(entries)
- months = {}
- for entry in entries:
- try:
- months[entry.month].append(entry)
- except KeyError:
- months[entry.month] = [entry]
-
- months = months.items()
- months.sort(reverse=True)
-
- self.render("planet/year.html", months=months, year=year)
+ self.render("planet/list.html", author=None, year=year,
+ entries=entries)