[svn r1575] Move index.py generic functions into a separate library.
#!/usr/bin/python
import cgi
import my_db
from htmltmpl import TemplateManager, TemplateProcessor
from os import environ
from urlparse import urljoin
def get_keywords(form, name):
kws = form.getvalue(name)
if not isinstance(kws, type([])):
if kws:
kws = [kws]
else:
kws = []
return map(int, kws)
def set_selection(db, bk, sel, exc = []):
if len(bk) > 0:
ids, names = map(list,apply(zip,db.get_keywords(bk)))
for key in exc:
if key not in ids:
ids.append(key)
names.append(db.get_keyword(key))
allkw = map(lambda x,y: [x, y], ids, names)
else:
allkw = db.get_all_keywords()
(kw, cnt) = map(list,apply(zip, db.get_keywords_count()))
res = []
for key in allkw:
is_selected = key[0] in sel
is_excluded = key[0] in exc
is_unselected = not (is_selected or is_excluded)
if key[0] in kw:
kcnt = cnt[kw.index(key[0])]
else:
kcnt = 0
res.append({'id':key[0],
'keyword': key[1],
'count' : kcnt,
'selected' : is_selected,
'excluded' : is_excluded,
'unselected' : is_unselected})
return res
def get_curl():
return urljoin( 'http://' + environ["HTTP_HOST"] + environ["REQUEST_URI"], 'add.py')
def load_index(db):
keywords = set_selection(db, [], [], [])
exc = map(lambda e: int(e['id']), keywords[1:])
bookmarks = db.select_bookmarks([0], exc)
total = keywords[0]['count']
if len(bookmarks)>0:
bookmarks = db.get_bookmarks(map(lambda x: x[0], bookmarks))
bookmarks = map(lambda bk: bk.dict(), bookmarks)
process_index(bookmarks, keywords)
def process_index(bk, kw):
tmpl = TemplateManager().prepare("index.tmpl")
tproc = TemplateProcessor()
tproc.set("pagetitle", environ["REMOTE_USER"]+"'s XBELWeb")
bk.sort(lambda x,y: cmp(x['name'],y['name']))
tproc.set("Bookmarks", bk)
kw.sort(lambda x,y: -cmp(x['count'],y['count']))
tproc.set("Keywords", kw)
tproc.set("curl", get_curl())
tproc.set("total", len(bk))
print tproc.process(tmpl)