author | fabien |
Tue, 07 Oct 2003 11:10:52 -0400 | |
branch | xbelweb |
changeset 37 | ab20799fef27 |
parent 31 | cee64de4e7e0 |
child 38 | c30e2402deca |
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 |
|
cee64de4e7e0
[svn r1575] Move index.py generic functions into a separate library.
fabien
parents:
diff
changeset
|
47 |
def get_curl(): |
cee64de4e7e0
[svn r1575] Move index.py generic functions into a separate library.
fabien
parents:
diff
changeset
|
48 |
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
|
49 |
|
cee64de4e7e0
[svn r1575] Move index.py generic functions into a separate library.
fabien
parents:
diff
changeset
|
50 |
def load_index(db): |
cee64de4e7e0
[svn r1575] Move index.py generic functions into a separate library.
fabien
parents:
diff
changeset
|
51 |
keywords = set_selection(db, [], [], []) |
cee64de4e7e0
[svn r1575] Move index.py generic functions into a separate library.
fabien
parents:
diff
changeset
|
52 |
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
|
53 |
bookmarks = db.select_bookmarks([0], exc) |
cee64de4e7e0
[svn r1575] Move index.py generic functions into a separate library.
fabien
parents:
diff
changeset
|
54 |
total = keywords[0]['count'] |
cee64de4e7e0
[svn r1575] Move index.py generic functions into a separate library.
fabien
parents:
diff
changeset
|
55 |
if len(bookmarks)>0: |
cee64de4e7e0
[svn r1575] Move index.py generic functions into a separate library.
fabien
parents:
diff
changeset
|
56 |
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
|
57 |
bookmarks = map(lambda bk: bk.dict(), bookmarks) |
cee64de4e7e0
[svn r1575] Move index.py generic functions into a separate library.
fabien
parents:
diff
changeset
|
58 |
process_index(bookmarks, keywords) |
cee64de4e7e0
[svn r1575] Move index.py generic functions into a separate library.
fabien
parents:
diff
changeset
|
59 |
|
cee64de4e7e0
[svn r1575] Move index.py generic functions into a separate library.
fabien
parents:
diff
changeset
|
60 |
def process_index(bk, kw): |
cee64de4e7e0
[svn r1575] Move index.py generic functions into a separate library.
fabien
parents:
diff
changeset
|
61 |
tmpl = TemplateManager().prepare("index.tmpl") |
cee64de4e7e0
[svn r1575] Move index.py generic functions into a separate library.
fabien
parents:
diff
changeset
|
62 |
tproc = TemplateProcessor() |
cee64de4e7e0
[svn r1575] Move index.py generic functions into a separate library.
fabien
parents:
diff
changeset
|
63 |
tproc.set("pagetitle", environ["REMOTE_USER"]+"'s XBELWeb") |
cee64de4e7e0
[svn r1575] Move index.py generic functions into a separate library.
fabien
parents:
diff
changeset
|
64 |
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
|
65 |
tproc.set("Bookmarks", bk) |
cee64de4e7e0
[svn r1575] Move index.py generic functions into a separate library.
fabien
parents:
diff
changeset
|
66 |
kw.sort(lambda x,y: -cmp(x['count'],y['count'])) |
cee64de4e7e0
[svn r1575] Move index.py generic functions into a separate library.
fabien
parents:
diff
changeset
|
67 |
tproc.set("Keywords", kw) |
cee64de4e7e0
[svn r1575] Move index.py generic functions into a separate library.
fabien
parents:
diff
changeset
|
68 |
tproc.set("curl", get_curl()) |
cee64de4e7e0
[svn r1575] Move index.py generic functions into a separate library.
fabien
parents:
diff
changeset
|
69 |
tproc.set("total", len(bk)) |
cee64de4e7e0
[svn r1575] Move index.py generic functions into a separate library.
fabien
parents:
diff
changeset
|
70 |
print tproc.process(tmpl) |
cee64de4e7e0
[svn r1575] Move index.py generic functions into a separate library.
fabien
parents:
diff
changeset
|
71 |
|
cee64de4e7e0
[svn r1575] Move index.py generic functions into a separate library.
fabien
parents:
diff
changeset
|
72 |