]>
Commit | Line | Data |
---|---|---|
940227cb MT |
1 | #!/usr/bin/python |
2 | ||
9068dba1 | 3 | from misc import Object |
940227cb | 4 | |
9068dba1 | 5 | class News(Object): |
940227cb | 6 | def get(self, uuid, lang="en"): |
9068dba1 MT |
7 | return self.db.get("SELECT * FROM news WHERE uuid = %s AND lang = %s \ |
8 | AND published IS NOT NULL AND published <= NOW()", uuid, lang) | |
940227cb MT |
9 | |
10 | def get_by_slug(self, slug): | |
9068dba1 MT |
11 | return self.db.get("SELECT * FROM news WHERE slug = %s \ |
12 | AND published IS NOT NULL AND published <= NOW()", slug) | |
940227cb MT |
13 | |
14 | def get_latest(self, author=None, locale=None, limit=1, offset=0): | |
9068dba1 MT |
15 | query = "SELECT * FROM news WHERE published IS NOT NULL AND published <= NOW()" |
16 | args = [] | |
940227cb MT |
17 | |
18 | if author: | |
9068dba1 MT |
19 | query += " AND author_id = %s" |
20 | args.append(author) | |
940227cb MT |
21 | |
22 | if locale: | |
9068dba1 MT |
23 | query += " AND lang = %s" |
24 | args.append(locale.code[:2]) | |
940227cb | 25 | |
9068dba1 | 26 | query += " ORDER BY published DESC" |
940227cb MT |
27 | |
28 | if limit: | |
9068dba1 MT |
29 | query += " LIMIT %s" |
30 | args.append(limit) | |
940227cb | 31 | |
9068dba1 MT |
32 | if offset: |
33 | query += " OFFSET %s" | |
34 | args.append(offset) | |
940227cb | 35 | |
9068dba1 | 36 | return self.db.query(query, *args) |
940227cb | 37 | |
7771acea | 38 | def get_by_year(self, year, locale=None): |
9068dba1 MT |
39 | query = "SELECT * FROM news WHERE published IS NOT NULL AND published <= NOW() \ |
40 | AND EXTRACT(YEAR FROM published) = %s" | |
7771acea MT |
41 | args = [year,] |
42 | ||
43 | if locale: | |
44 | query += " AND lang = %s" | |
45 | args.append(locale.code[:2]) | |
46 | ||
9068dba1 | 47 | query += " ORDER BY published DESC" |
7771acea MT |
48 | |
49 | return self.db.query(query, *args) | |
50 | ||
51 | @property | |
52 | def years(self): | |
9068dba1 MT |
53 | query = self.db.query("SELECT DISTINCT EXTRACT(YEAR FROM published)::integer AS year FROM news \ |
54 | WHERE published IS NOT NULL AND published <= NOW() ORDER BY year DESC") | |
940227cb | 55 | |
9068dba1 | 56 | return [r.year for r in query] |