lib/webutils.py
branchxbelweb
changeset 47 2781ac85b807
parent 45 c81d480c3224
child 51 7015d65beb3d
equal deleted inserted replaced
46:d3c1de4d929e 47:2781ac85b807
     1 #!/usr/bin/python
     1 #!/usr/bin/python
     2 
     2 
     3 
       
     4 import cgi
       
     5 import my_db
       
     6 from htmltmpl import TemplateManager, TemplateProcessor
       
     7 from os import environ
     3 from os import environ
     8 from urlparse import urljoin
     4 from urlparse import urljoin
     9 
     5 from dynamic import do_dynamic
    10 def get_keywords(form, name):
     6 from folders import do_folders
    11 	kws = form.getvalue(name)
       
    12 	if not isinstance(kws, type([])):
       
    13 		if kws:
       
    14 			kws = [kws]
       
    15 		else:
       
    16 			kws = []
       
    17 	return map(int, kws)
       
    18 
       
    19 def set_selection(db, bk, sel, exc = []):
       
    20 	if len(bk) > 0:
       
    21 		ids, names = map(list,apply(zip,db.get_keywords(bk)))
       
    22 		for key in exc:
       
    23 			if key not in ids:
       
    24 				ids.append(key)
       
    25 				names.append(db.get_keyword(key))
       
    26 		allkw = map(lambda x,y: [x, y], ids, names)
       
    27 	else:
       
    28 		allkw = db.get_all_keywords()
       
    29 	(kw, cnt) = map(list,apply(zip, db.get_keywords_count(bk)))
       
    30 	res = []
       
    31 	for key in allkw:
       
    32 		is_selected = key[0] in sel
       
    33 		is_excluded = key[0] in exc
       
    34 		is_unselected = not (is_selected or is_excluded)
       
    35 		if key[0] in kw:
       
    36 			kcnt = cnt[kw.index(key[0])]
       
    37 		else:
       
    38 			kcnt = 0
       
    39 		res.append({'id':key[0],
       
    40 			'keyword': key[1],
       
    41 			'count' : kcnt,
       
    42 			'selected' : is_selected,
       
    43 			'excluded' : is_excluded,
       
    44 			'unselected' : is_unselected})
       
    45 	return res
       
    46 
       
    47 def sort_keywords(kw, pref):
       
    48 	global _sk_rev_fact
       
    49 	global _sk_sort
       
    50 	if pref['keywords_reverse']:
       
    51 		_sk_rev_fact = -1
       
    52 	else:
       
    53 		_sk_rev_fact = 1
       
    54 	_sk_sort = pref['keywords_sort'] 
       
    55 	kw.sort(lambda l, r: _sk_rev_fact*cmp(l[_sk_sort], r[_sk_sort]))
       
    56 	return kw
       
    57 
     7 
    58 def get_curl():
     8 def get_curl():
    59 	return urljoin( 'http://' + environ["HTTP_HOST"] + environ["REQUEST_URI"], 'add.py')
     9 	return urljoin( 'http://' + environ["HTTP_HOST"] + environ["REQUEST_URI"], 'add.py')
    60 
    10 
    61 def load_index(db):
    11 def load_index(db, prefs, form = None):
    62     	keywords = set_selection(db, [], [], [])
    12     if form:
    63     	exc = map(lambda e: int(e['id']), keywords[1:])
    13     	if form.has_key('view'):
    64    	bookmarks = db.select_bookmarks([0], exc)
    14     		if form['view'].value == 'folder':
    65     	total = keywords[0]['count']
    15     			do_folders(db, prefs, form)
    66 	if len(bookmarks)>0:
    16 		else:
    67     		bookmarks = db.get_bookmarks(map(lambda x: x[0], bookmarks))
    17     			do_dynamic(db, prefs, form)
    68     	bookmarks = map(lambda bk: bk.dict(), bookmarks)
    18 		return
    69 	pref = db.get_preferences()
    19     if prefs['default_view'] == 0:
    70     	process_index(bookmarks, keywords[1:], pref)
    20         do_dynamic(db, prefs, form)
    71 
    21     else:
    72 def get_template_processor(prefs):
    22 	do_folders(db, prefs, form)
    73     tproc = TemplateProcessor()
       
    74     tproc.set("remote_user", prefs["fullname"])
       
    75     tproc.set("kw_size", prefs['keywords_box'])
       
    76     tproc.set("kw_sort", prefs['keywords_sort'])
       
    77     tproc.set("kw_reverse", prefs['keywords_reverse'])
       
    78     return tproc
       
    79 
       
    80 def process_index(bk, kw, pref):
       
    81     tmpl = TemplateManager().prepare("index.tmpl")
       
    82     tproc = get_template_processor(pref)
       
    83     bk.sort(lambda x,y: cmp(x['name'],y['name']))
       
    84     tproc.set("Bookmarks", bk)
       
    85     kw = sort_keywords(kw, pref)
       
    86     tproc.set("Keywords", kw)
       
    87     tproc.set("curl", get_curl())
       
    88     tproc.set("total", len(bk))
       
    89     print tproc.process(tmpl)
       
    90