]> git.ipfire.org Git - ipfire.org.git/blob - webapp/handlers_planet.py
Merge branch 'master' of ssh://git.ipfire.org/pub/git/ipfire.org
[ipfire.org.git] / webapp / handlers_planet.py
1 #!/usr/bin/python
2
3 import tornado.web
4
5 from handlers_base import *
6
7 import backend
8
9 from backend.databases import Databases
10
11 class PlanetBaseHandler(BaseHandler):
12 @property
13 def db(self):
14 return Databases().webapp
15
16 @property
17 def planet(self):
18 return backend.Planet()
19
20
21 class PlanetMainHandler(PlanetBaseHandler):
22 rss_url = "/rss"
23
24 def get(self):
25 offset = int(self.get_argument("offset", 0))
26 limit = int(self.get_argument("limit", 4))
27
28 entries = self.planet.get_entries(offset=offset, limit=limit)
29 years = self.planet.get_years()
30
31 self.render("planet/index.html", entries=entries, years=years,
32 offset=offset + limit, limit=limit)
33
34
35 class PlanetUserHandler(PlanetBaseHandler):
36 def get(self, author):
37 author = self.accounts.search(author)
38 if not author:
39 raise tornado.web.HTTPError(404, "User is unknown")
40
41 offset = int(self.get_argument("offset", 0))
42 limit = int(self.get_argument("limit", 4))
43
44 entries = self.planet.get_entries_by_author(author.uid,
45 offset=offset, limit=limit)
46
47 self.render("planet/user.html", author=author, entries=entries,
48 offset=offset + limit, limit=limit, rss_url="/user/%s/rss" % author.uid)
49
50
51 class PlanetPostingHandler(PlanetBaseHandler):
52 def get(self, slug):
53 entry = self.planet.get_entry_by_slug(slug)
54
55 if not entry:
56 raise tornado.web.HTTPError(404)
57
58 self.render("planet/posting.html",
59 author=entry.author, entry=entry)
60
61
62 class PlanetSearchHandler(PlanetBaseHandler):
63 def get(self):
64 query = self.get_argument("q", "")
65
66 if query:
67 entries = self.planet.search(query)
68 else:
69 entries = []
70
71 self.render("planet/search.html", entries=entries, query=query)
72
73
74 class PlanetYearHandler(PlanetBaseHandler):
75 def get(self, year):
76 entries = self.planet.get_entries_by_year(year)
77
78 months = {}
79 for entry in entries:
80 try:
81 months[entry.month].append(entry)
82 except KeyError:
83 months[entry.month] = [entry]
84
85 months = months.items()
86 months.sort(reverse=True)
87
88 self.render("planet/year.html", months=months, year=year)
89
90
91 class PlanetAPISearchAutocomplete(PlanetBaseHandler):
92 def get(self):
93 query = self.get_argument("q")
94 if not query:
95 raise tornado.web.HTTPError(400)
96
97 results = self.planet.search_autocomplete(query)
98
99 res = {
100 "query" : query,
101 "results" : results,
102 }
103 self.write(res)