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