1 #!/usr/bin/python |
1 #!/usr/bin/python |
2 |
2 |
3 |
|
4 import cgi |
|
5 import my_db |
|
6 from htmltmpl import TemplateManager, TemplateProcessor |
|
7 from os import environ |
3 from os import environ |
8 from urlparse import urljoin |
4 from urlparse import urljoin |
9 |
5 from dynamic import do_dynamic |
10 def get_keywords(form, name): |
6 from folders import do_folders |
11 kws = form.getvalue(name) |
|
12 if not isinstance(kws, type([])): |
|
13 if kws: |
|
14 kws = [kws] |
|
15 else: |
|
16 kws = [] |
|
17 return map(int, kws) |
|
18 |
|
19 def set_selection(db, bk, sel, exc = []): |
|
20 if len(bk) > 0: |
|
21 ids, names = map(list,apply(zip,db.get_keywords(bk))) |
|
22 for key in exc: |
|
23 if key not in ids: |
|
24 ids.append(key) |
|
25 names.append(db.get_keyword(key)) |
|
26 allkw = map(lambda x,y: [x, y], ids, names) |
|
27 else: |
|
28 allkw = db.get_all_keywords() |
|
29 (kw, cnt) = map(list,apply(zip, db.get_keywords_count(bk))) |
|
30 res = [] |
|
31 for key in allkw: |
|
32 is_selected = key[0] in sel |
|
33 is_excluded = key[0] in exc |
|
34 is_unselected = not (is_selected or is_excluded) |
|
35 if key[0] in kw: |
|
36 kcnt = cnt[kw.index(key[0])] |
|
37 else: |
|
38 kcnt = 0 |
|
39 res.append({'id':key[0], |
|
40 'keyword': key[1], |
|
41 'count' : kcnt, |
|
42 'selected' : is_selected, |
|
43 'excluded' : is_excluded, |
|
44 'unselected' : is_unselected}) |
|
45 return res |
|
46 |
|
47 def sort_keywords(kw, pref): |
|
48 global _sk_rev_fact |
|
49 global _sk_sort |
|
50 if pref['keywords_reverse']: |
|
51 _sk_rev_fact = -1 |
|
52 else: |
|
53 _sk_rev_fact = 1 |
|
54 _sk_sort = pref['keywords_sort'] |
|
55 kw.sort(lambda l, r: _sk_rev_fact*cmp(l[_sk_sort], r[_sk_sort])) |
|
56 return kw |
|
57 |
7 |
58 def get_curl(): |
8 def get_curl(): |
59 return urljoin( 'http://' + environ["HTTP_HOST"] + environ["REQUEST_URI"], 'add.py') |
9 return urljoin( 'http://' + environ["HTTP_HOST"] + environ["REQUEST_URI"], 'add.py') |
60 |
10 |
61 def load_index(db): |
11 def load_index(db, prefs, form = None): |
62 keywords = set_selection(db, [], [], []) |
12 if form: |
63 exc = map(lambda e: int(e['id']), keywords[1:]) |
13 if form.has_key('view'): |
64 bookmarks = db.select_bookmarks([0], exc) |
14 if form['view'].value == 'folder': |
65 total = keywords[0]['count'] |
15 do_folders(db, prefs, form) |
66 if len(bookmarks)>0: |
16 else: |
67 bookmarks = db.get_bookmarks(map(lambda x: x[0], bookmarks)) |
17 do_dynamic(db, prefs, form) |
68 bookmarks = map(lambda bk: bk.dict(), bookmarks) |
18 return |
69 pref = db.get_preferences() |
19 if prefs['default_view'] == 0: |
70 process_index(bookmarks, keywords[1:], pref) |
20 do_dynamic(db, prefs, form) |
71 |
21 else: |
72 def get_template_processor(prefs): |
22 do_folders(db, prefs, form) |
73 tproc = TemplateProcessor() |
|
74 tproc.set("remote_user", prefs["fullname"]) |
|
75 tproc.set("kw_size", prefs['keywords_box']) |
|
76 tproc.set("kw_sort", prefs['keywords_sort']) |
|
77 tproc.set("kw_reverse", prefs['keywords_reverse']) |
|
78 return tproc |
|
79 |
|
80 def process_index(bk, kw, pref): |
|
81 tmpl = TemplateManager().prepare("index.tmpl") |
|
82 tproc = get_template_processor(pref) |
|
83 bk.sort(lambda x,y: cmp(x['name'],y['name'])) |
|
84 tproc.set("Bookmarks", bk) |
|
85 kw = sort_keywords(kw, pref) |
|
86 tproc.set("Keywords", kw) |
|
87 tproc.set("curl", get_curl()) |
|
88 tproc.set("total", len(bk)) |
|
89 print tproc.process(tmpl) |
|
90 |
|