A lot of fix again, for folder view, bookmark editing and removal
and some error handling.
from templates import Template
from bkmark import Bookmark
from webutils import load_index
from templates import Template
from keywords import add_unique_keywords
import os
def get_bk_from_form(form):
bk = Bookmark()
bk.id = int(form['id'].value)
bk.url = form['url'].value
if form.has_key('name'):
bk.name = form['name'].value
if form.has_key('desc'):
bk.desc = form['desc'].value
return bk
def get_kw_from_form(form):
kw = form.getvalue("kw")
if not isinstance(kw, type([])):
if kw:
kw = [kw]
else:
kw = []
kw = map(int, kw)
return kw
def get_new_kw_from_form(form, sep =','):
if form.has_key('newkw'):
kw= map(lambda e: e.strip(),
form['newkw'].value.split(','))
return filter(lambda x: x != '', kw)
else:
return []
def get_unique_keywords(form, db):
kw = get_kw_from_form(form)
kw = set(map(db.get_keyword, kw))
return list(kw.union(get_new_kw_from_form(form)))
def edit(db, prefs, form, id):
name = url = ""
bk = Bookmark()
selected_kws = []
if (id != -1):
bks = db.get_bookmarks([id])
if len(bks) > 0:
bk = bks[0]
(selected_kws, kwnames) = apply(zip,db.get_keywords([id]))
if form.has_key("name"):
bk.name = form["name"].value
if form.has_key("url"):
bk.url = form["url"].value
kw = db.get_all_keywords()[1:]
kw.sort(lambda l,r: cmp(l[1],r[1]))
kw = map(lambda elem: {
'id' : elem[0],
'keyword' : elem[1],
'checked' : elem[0] in selected_kws }, kw)
print_edit(prefs, bk, kw)
def confirm(step, bk, kw, prefs):
tmpl = Template("add_confirm.tmpl", prefs)
confirmation = "Unknown!"
if (step == 'delete'):
confirmation = "Delete"
elif (step == 'update'):
confirmation = "Update"
tmpl.set("confirmation", confirmation)
tmpl.set("step", step)
tmpl.set("id", bk.id)
tmpl.set("name", bk.name)
tmpl.set("url", bk.url)
tmpl.set("Keywords", map(lambda x: {'keyword': x }, kw))
tmpl.set("desc", bk.desc)
print tmpl.process()
def print_edit(prefs, bk, keywords):
tmpl = Template("add_bk.tmpl", prefs)
tmpl.set('name', bk.name)
tmpl.set('url', bk.url)
tmpl.set('desc', bk.desc)
tmpl.set('bkid', bk.id)
tmpl.set('Keywords', keywords)
print tmpl.process()
def execute(db, form):
bk = get_bk_from_form(form)
id = bk.id
execution = form['execute'].value
if execution == 'delete':
if id != -1:
db.remove_bookmark(id)
elif execution == 'update':
if (bk.id == -1):
id = db.add_bookmark(bk)
else:
db.update_bookmark(bk)
kw = add_unique_keywords(db, get_unique_keywords(form, db))
db.update_keywords(id, kw.values())
def do_it(action, db, prefs, form):
if form.has_key('id'):
id = int(form['id'].value)
else:
id = -1;
if form.has_key('step'):
step = form['step'].value
else:
step = 'edit'
if step == 'edit':
edit(db, prefs, form, id)
elif step == 'confirm':
execute(db, form)
load_index(db, prefs, form, "result", "Bookmark " + form['execute'].value)
elif step == 'cancel' or (action == 'delete' and id == -1):
load_index(db, prefs, form, "err", "Operation cancel")
else:
if step == 'update':
bk = get_bk_from_form(form)
kw = get_unique_keywords(form, db)
else:
bk = db.get_bookmarks([id])[0]
(ids, kw) = apply(zip,db.get_keywords([id]))
kw = kw[1:]
confirm(step, bk, kw, prefs)