-
Notifications
You must be signed in to change notification settings - Fork 0
/
browse.py
62 lines (51 loc) · 1.8 KB
/
browse.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
import base
import models.post
import models.comment
def index_page(view):
p = view.request_value('page', int)
view.put_page('templates/index.html', {
'posts': base.posts_for_client(models.post.fetch(p)),
'tags': models.tag.sort_by_count(),
'current_page': p,
'page_count': xrange(models.post.count_pages()),
'paging_on': models.post.count_pages() > 1,
})
def by_tag(view):
p = view.request_value('page', int)
tag = view.request.get('tag')
view.put_page('templates/index.html', {
'posts': base.posts_for_client(models.post.by_tag(tag, p)),
'tags': models.tag.sort_by_count(),
'current_page': p,
'page_count': xrange(models.post.count_pages_by_tag(tag)),
'query_tag': tag,
'paging_on': models.post.count_pages_by_tag(tag) > 1,
})
def single_post(view):
def title_text(title):
def flat_nodes(nodes):
r = []
for n in nodes:
if n.nodeType == n.TEXT_NODE:
r.append(n.data)
else:
r.extend(flat_nodes(n.childNodes))
return r
import xml.dom.minidom as dom
return ''.join(flat_nodes(dom.parseString((
'<title>' + title + '</title>').encode('utf-8')).childNodes))
try:
post = base.post_for_client(models.post.by_id(view.request.get('p')))
view.put_page('templates/post.html', {
'post': post,
'title': title_text(post.title),
})
except ValueError:
base.raise_not_found(view)
class Index(base.BaseView):
def get(self):
if 'p' in self.request.arguments():
return single_post(self)
if 'tag' in self.request.arguments():
return by_tag(self)
return index_page(self)