]> git.ipfire.org Git - ipfire.org.git/blob - www/webapp/backend/planet.py
Import of new website.
[ipfire.org.git] / www / webapp / backend / planet.py
1 #!/usr/bin/python
2
3 import textile
4
5 from accounts import Accounts
6 from databases import Databases
7
8 from misc import Singleton
9
10 class PlanetEntry(object):
11 def __init__(self, entry):
12 self.__entry = entry
13
14 @property
15 def id(self):
16 return self.__entry.id
17
18 @property
19 def slug(self):
20 return self.__entry.slug
21
22 @property
23 def title(self):
24 return self.__entry.title
25
26 @property
27 def published(self):
28 return self.__entry.published
29
30 @property
31 def updated(self):
32 return self.__entry.updated
33
34 @property
35 def markdown(self):
36 return self.__entry.markdown
37
38 @property
39 def abstract(self):
40 return self.render(self.markdown, 400)
41
42 def render(self, text, limit=0):
43 if limit and len(text) >= limit:
44 text = text[:limit] + "..."
45 return textile.textile(text)
46
47 @property
48 def text(self):
49 return self.render(self.markdown)
50
51 @property
52 def author(self):
53 return Accounts().search(self.__entry.author_id)
54
55
56 class Planet(object):
57 __metaclass__ = Singleton
58
59 @property
60 def db(self):
61 return Databases().webapp
62
63 def get_authors(self):
64 authors = []
65 for author in self.db.query("SELECT DISTINCT author_id FROM planet"):
66 author = Accounts().search(author.author_id)
67 if author:
68 authors.append(author)
69
70 return authors
71
72 def get_entry_by_slug(self, slug):
73 entry = self.db.get("SELECT * FROM planet WHERE slug = %s", slug)
74 if entry:
75 return PlanetEntry(entry)
76
77 def _limit_and_offset_query(self, limit=None, offset=None):
78 query = " "
79
80 if limit:
81 if offset:
82 query += "LIMIT %d,%d" % (offset, limit)
83 else:
84 query += "LIMIT %d" % limit
85
86 return query
87
88 def get_entries(self, limit=3, offset=None):
89 query = "SELECT * FROM planet ORDER BY published DESC"
90
91 # Respect limit and offset
92 query += self._limit_and_offset_query(limit=limit, offset=offset)
93
94 entries = []
95 for entry in self.db.query(query):
96 entries.append(PlanetEntry(entry))
97
98 return entries
99
100 def get_entries_by_author(self, author_id, limit=None, offset=None):
101 query = "SELECT * FROM planet WHERE author_id = '%s'" % author_id
102 query += " ORDER BY published DESC"
103
104 # Respect limit and offset
105 query += self._limit_and_offset_query(limit=limit, offset=offset)
106
107
108 entries = self.db.query(query)
109
110 return [PlanetEntry(e) for e in entries]