lib/webutils.py
author fabien
Tue, 07 Oct 2003 11:10:52 -0400
branchxbelweb
changeset 37 ab20799fef27
parent 31 cee64de4e7e0
child 38 c30e2402deca
permissions -rwxr-xr-x
[svn r1581] Add selection-based edit to TODO list.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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