author | fabien |
Sat, 18 Oct 2003 00:56:42 -0400 | |
branch | xbelweb |
changeset 45 | c81d480c3224 |
parent 44 | 87f94936990d |
child 47 | 2781ac85b807 |
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() |
41 | 29 |
(kw, cnt) = map(list,apply(zip, db.get_keywords_count(bk))) |
31
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() |
44 | 74 |
tproc.set("remote_user", prefs["fullname"]) |
38
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) |
41 | 85 |
kw = sort_keywords(kw, 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 |