def setUp(self): """bibknowledge test setup Mostly just creates the dynamic kb used later. """ new_kb_id = add_dynamic_kb(self._name_a_db(), "100__a", searchwith="245__:*%*") self.dyn_kbname = get_kb_name(new_kb_id)
def kb_edit_mapping(req, kb, key, mapFrom, mapTo, update="", delete="", sortby="to", ln=CFG_SITE_LANG): """ Edit a mapping to in kb. Edit can be "update old value" or "delete existing value" @param kb the knowledge base id to edit @param key the key of the mapping that will be modified @param mapFrom the new key of the mapping @param mapTo the new value of the mapping @param update contains a value if the mapping is to be updated @param delete contains a value if the mapping is to be deleted @param sortby the sorting criteria ('from' or 'to') """ ln = wash_language(ln) _ = gettext_set_language(ln) navtrail_previous_links = ''' > <a class="navtrail" href="%s/kb?ln=%s">%s</a>''' % (CFG_SITE_SECURE_URL, ln, _("Manage Knowledge Bases")) try: dummy = getUid(req) except: return error_page('Error', req) (auth_code, auth_msg) = check_user(req, 'cfgbibknowledge') if not auth_code: kb_id = wash_url_argument(kb, 'int') kb_name = bibknowledge.get_kb_name(kb_id) if kb_name is None: return page(title=_("Unknown Knowledge Base"), body = "", language=ln, navtrail = navtrail_previous_links, errors = [("ERR_KB_ID_UNKNOWN", kb)], lastupdated=__lastupdated__, req=req) key = wash_url_argument(key, 'str') if delete != "": #Delete bibknowledge.remove_kb_mapping(kb_name, key) if update != "": #Update new_key = wash_url_argument(mapFrom, 'str') new_value = wash_url_argument(mapTo, 'str') bibknowledge.update_kb_mapping(kb_name, key, new_key, new_value) redirect_to_url(req, "kb?ln=%(ln)s&kb=%(kb)s&sortby=%(sortby)s" % {'ln':ln, 'kb':kb_id, 'sortby':sortby}) else: return page_not_authorized(req=req, text=auth_msg, navtrail=navtrail_previous_links)
def test_add_get_remove(self): """bibknowledge - test creating a kb, adding a mapping, removing it, removing kb""" new_kb_id = add_kb() new_name = get_kb_name(new_kb_id) add_kb_mapping(new_name, "foobar", "barfoo") fbexists = kb_mapping_exists(new_name, "foobar") self.assertEqual(True, fbexists) remove_kb_mapping(new_name, "foobar") fbexists = kb_mapping_exists(new_name, "foobar") self.assertEqual(False, fbexists) delete_kb(new_name) still_there = kb_exists(new_name) self.assertEqual(False, still_there)
def kb_show(req, kb, sortby="to", ln=CFG_SITE_LANG, startat=0, search=""): """ Shows the content of the given knowledge base id. Check for authentication and kb existence. Before displaying the content of the knowledge base, check if a form was submitted asking for adding, editing or removing a value. @param ln language @param kb the kb id to show @param sortby the sorting criteria ('from' or 'to') @param startat the number from which start showing mapping rules in kb @param search search for this string in the kb """ ln = wash_language(ln) _ = gettext_set_language(ln) navtrail_previous_links = ''' > <a class="navtrail" href="%s/kb?ln=%s">%s</a>''' % (CFG_SITE_SECURE_URL, ln, _("Manage Knowledge Bases")) try: uid = getUid(req) except: return error_page('Error', req) (auth_code, auth_msg) = check_user(req, 'cfgbibknowledge') if not auth_code: kb_id = wash_url_argument(kb, 'int') kb_name = bibknowledge.get_kb_name(kb_id) if kb_name is None: return page(title=_("Unknown Knowledge Base"), body = "", language=ln, navtrail = navtrail_previous_links, errors = [("ERR_KB_ID_UNKNOWN", kb)], lastupdated=__lastupdated__, req=req) return page(title=_("Knowledge Base %s" % kb_name), body=bibknowledgeadminlib.perform_request_knowledge_base_show(ln=ln, kb_id=kb_id, sortby=sortby, startat=startat, search_term=search), uid=uid, language=ln, navtrail = navtrail_previous_links, lastupdated=__lastupdated__, req=req) else: return page_not_authorized(req=req, text=auth_msg, navtrail=navtrail_previous_links)
def test_taxonomy(self): """bibknowledge - test a taxonomy (must run as bibsched user)""" import mechanize from os import remove username = "******" password = "******" #create a new taxonomy kb new_kb_id = add_kb("testtaxonomy", "taxonomy") #what was the name? new_kb_name = get_kb_name(new_kb_id) #get the taxonomy file response = mechanize.urlopen( "http://invenio-software.org/download/invenio-demo-site-files/HEP.rdf" ) content = response.read() f = open(CFG_TMPDIR + "/HEP.rdf", "w") f.write(content) f.close() #upload it to the right destination, but log in first browser = mechanize.Browser() browser.open(CFG_SITE_SECURE_URL + "/youraccount/login") browser.select_form(nr=0) browser['p_un'] = username browser['p_pw'] = password browser.submit() #go to upload page uploadpage = browser.open(CFG_SITE_URL + "/kb?kb=" + str(new_kb_id)) #check that we are there content = uploadpage.read() namethere = content.count("testtaxonomy") assert namethere > 0 #upload browser.open(CFG_SITE_URL + "/kb?kb=" + str(new_kb_id)) browser.select_form(name="upload") browser.form["kb"] = str(new_kb_id) #force the id browser.form.add_file(open(CFG_TMPDIR + "/HEP.rdf"), content_type='text/plain', filename="HEP.rdf", name="file") browser.submit() #check that we can get an item from the kb items = get_kbt_items_for_bibedit(new_kb_name, "prefLabel", "Altarelli") #item should contain 1 string: 'Altarelli-Parisi equation' self.assertEqual(1, len(items)) #delete the temp file remove(CFG_TMPDIR + "/HEP.rdf") #delete the test odf the DB delete_kb(new_kb_name) still_there = kb_exists(new_kb_name) self.assertEqual(False, still_there)
def kb_delete(req, kb, ln=CFG_SITE_LANG, chosen_option=""): """ Deletes an existing kb @param kb the kb id to delete """ ln = wash_language(ln) _ = gettext_set_language(ln) navtrail_previous_links = ''' > <a class="navtrail" href="%s/kb?ln=%s">%s</a> > %s''' % (CFG_SITE_SECURE_URL, ln, _("Manage Knowledge Bases"), _("Delete Knowledge Base")) try: dummy = getUid(req) except: return error_page('Error', req) (auth_code, auth_msg) = check_user(req, 'cfgbibknowledge') if not auth_code: kb_id = wash_url_argument(kb, 'int') kb_name = bibknowledge.get_kb_name(kb_id) if kb_name is None: return page(title=_("Unknown Knowledge Base"), body = "", language=ln, navtrail = navtrail_previous_links, errors = [("ERR_KB_ID_UNKNOWN", kb)], lastupdated=__lastupdated__, req=req) #Ask confirmation to user if not already done chosen_option = wash_url_argument(chosen_option, 'str') if chosen_option == "": return dialog_box(req=req, ln=ln, title="Delete %s" % kb_name, message="""Are you sure you want to delete knowledge base <i>%s</i>?""" % kb_name, navtrail=navtrail_previous_links, options=[_("Cancel"), _("Delete")]) elif chosen_option==_("Delete"): bibknowledge.delete_kb(kb_name) redirect_to_url(req, "kb?ln=%(ln)s" % {'ln':ln}) else: navtrail_previous_links = ''' > <a class="navtrail" href="%s/kb">%s</a>''' % (CFG_SITE_SECURE_URL, _("Manage Knowledge Bases")) return page_not_authorized(req=req, text=auth_msg, navtrail=navtrail_previous_links)
def test_add_get_remove(self): """bibknowledge - test creating a kb, adding a mapping, removing it, removing kb""" from invenio.bibknowledge import add_kb, get_kb_name, \ kb_mapping_exists, remove_kb_mapping, delete_kb, kb_exists, \ add_kb_mapping new_kb_id = add_kb() new_name = get_kb_name(new_kb_id) add_kb_mapping(new_name, "foobar", "barfoo") fbexists = kb_mapping_exists(new_name, "foobar") self.assertEqual(True, fbexists) remove_kb_mapping(new_name, "foobar") fbexists = kb_mapping_exists(new_name, "foobar") self.assertEqual(False, fbexists) delete_kb(new_name) still_there = kb_exists(new_name) self.assertEqual(False, still_there)
def kb_show_attributes(req, kb, ln=CFG_SITE_LANG, sortby="to"): """ Shows the attributes (name, description) of a given kb @param ln language @param kb the kb id to show @param sortby the sorting criteria ('from' or 'to') """ ln = wash_language(ln) _ = gettext_set_language(ln) navtrail_previous_links = ''' > <a class="navtrail" href="%s/kb?ln=%s">%s</a>''' % ( CFG_SITE_SECURE_URL, ln, _("Manage Knowledge Bases")) try: uid = getUid(req) except MySQLdb.Error: return error_page(req) (auth_code, auth_msg) = check_user(req, 'cfgbibknowledge') if not auth_code: kb_id = wash_url_argument(kb, 'int') kb_name = bibknowledge.get_kb_name(kb_id) if kb_name is None: return page(title=_("Unknown Knowledge Base"), body="", language=ln, navtrail=navtrail_previous_links, errors=[("ERR_KB_ID_UNKNOWN", kb)], lastupdated=__lastupdated__, req=req) return page(title=_("Knowledge Base %s Attributes" % kb_name), body=bibknowledgeadminlib. perform_request_knowledge_base_show_attributes( ln=ln, kb_id=kb_id, sortby=sortby), uid=uid, language=ln, navtrail=navtrail_previous_links, lastupdated=__lastupdated__, req=req) else: return page_not_authorized(req=req, text=auth_msg, navtrail=navtrail_previous_links)
def kb_show_dependencies(req, kb, ln=CFG_SITE_LANG, sortby="to"): """ Shows the dependencies of a given kb @param kb the kb id to show @param ln language @param sortby the sorting criteria ('from' or 'to') """ ln = wash_language(ln) _ = gettext_set_language(ln) navtrail_previous_links = ''' > <a class="navtrail" href="%s/kb?ln=%s">%s</a>''' % (CFG_SITE_SECURE_URL, ln, _("Manage Knowledge Bases")) try: uid = getUid(req) except: return error_page('Error', req) (auth_code, auth_msg) = check_user(req, 'cfgbibknowledge') if not auth_code: kb_id = wash_url_argument(kb, 'int') kb_name = bibknowledge.get_kb_name(kb_id) if kb_name is None: return page(title=_("Unknown Knowledge Base"), body = "", language=ln, navtrail = navtrail_previous_links, errors = [("ERR_KB_ID_UNKNOWN", kb)], lastupdated=__lastupdated__, req=req) return page(title=_("Knowledge Base %s Dependencies" % kb_name), body=bibknowledgeadminlib.perform_request_knowledge_base_show_dependencies(ln=ln, kb_id=kb_id, sortby=sortby), uid=uid, language=ln, navtrail = navtrail_previous_links, lastupdated=__lastupdated__, req=req) else: return page_not_authorized(req=req, text=auth_msg, navtrail=navtrail_previous_links)
def test_taxonomy(self): """bibknowledge - test a taxonomy (must run as bibsched user)""" import mechanize from os import remove username = "******" password = "******" #create a new taxonomy kb new_kb_id = add_kb("testtaxonomy","taxonomy") #what was the name? new_kb_name = get_kb_name(new_kb_id) #get the taxonomy file response = mechanize.urlopen("http://invenio-software.org/download/invenio-demo-site-files/HEP.rdf") content = response.read() f = open(CFG_TMPDIR+"/HEP.rdf","w") f.write(content) f.close() #upload it to the right destination, but log in first browser = mechanize.Browser() browser.open(CFG_SITE_SECURE_URL + "/youraccount/login") browser.select_form(nr=0) browser['p_un'] = username browser['p_pw'] = password browser.submit() #go to upload page uploadpage = browser.open(CFG_SITE_URL+"/kb?kb="+str(new_kb_id)) #check that we are there content = uploadpage.read() namethere = content.count("testtaxonomy") assert namethere > 0 #upload browser.open(CFG_SITE_URL+"/kb?kb="+str(new_kb_id)) browser.select_form(name="upload") browser.form["kb"] = str(new_kb_id) #force the id browser.form.add_file(open(CFG_TMPDIR+"/HEP.rdf"), content_type='text/plain', filename="HEP.rdf", name="file") browser.submit() #check that we can get an item from the kb items = get_kbt_items_for_bibedit(new_kb_name, "prefLabel", "Altarelli") #item should contain 1 string: 'Altarelli-Parisi equation' self.assertEqual(1, len(items)) #delete the temp file remove(CFG_TMPDIR+"/HEP.rdf") #delete the test odf the DB delete_kb(new_kb_name) still_there = kb_exists(new_kb_name) self.assertEqual(False, still_there)
def kb_update_attributes(req, kb="", name="", description="", sortby="to", ln=CFG_SITE_LANG, chosen_option=None, kb_type=None): """ Update the attributes of the kb @param ln language @param kb the kb id to update @param sortby the sorting criteria ('from' or 'to') @param name the new name of the kn @param description the new description of the kb @param chosen_option set to dialog box value """ ln = wash_language(ln) _ = gettext_set_language(ln) navtrail_previous_links = ''' > <a class="navtrail" href="%s/kb?ln=%s">%s</a>''' % ( CFG_SITE_SECURE_URL, ln, _("Manage Knowledge Bases")) try: dummy = getUid(req) except MySQLdb.Error: return error_page(req) (auth_code, auth_msg) = check_user(req, 'cfgbibknowledge') if not auth_code: kb_id = wash_url_argument(kb, 'int') if chosen_option is not None: # Update could not be performed. # Redirect to kb attributes page redirect_to_url( req, "kb?ln=%(ln)s&action=attributes&kb=%(kb)s&sortby=%(sortby)s&kb_type=%(kb_type)s" % { 'ln': ln, 'kb': kb_id, 'sortby': sortby, 'kb_type': kb_type }) kb_name = bibknowledge.get_kb_name(kb_id) if kb_name is None: return page(title=_("Unknown Knowledge Base"), body="", language=ln, navtrail=navtrail_previous_links, errors=[("ERR_KB_ID_UNKNOWN", kb)], lastupdated=__lastupdated__, req=req) new_name = wash_url_argument(name, 'str') if kb_name != new_name and bibknowledge.kb_exists(new_name): #A knowledge base with that name already exist #Do not update return dialog_box(req=req, ln=ln, title="Name already in use", message="""<i>%s</i> cannot be renamed to %s: Another knowledge base already has that name. <br/>Please choose another name.""" % (kb_name, new_name), navtrail=navtrail_previous_links, options=[_("Ok")]) new_desc = wash_url_argument(description, 'str') bibknowledge.update_kb_attributes(kb_name, new_name, new_desc) redirect_to_url( req, "kb?ln=%(ln)s&kb=%(kb)s&sortby=%(sortby)s" % { 'ln': ln, 'kb': kb_id, 'sortby': sortby }) else: return page_not_authorized(req=req, text=auth_msg, navtrail=navtrail_previous_links)
def kb_update_attributes(req, kb="", name="", description="", sortby="to", ln=CFG_SITE_LANG, chosen_option=None, kb_type=None): """ Update the attributes of the kb @param ln language @param kb the kb id to update @param sortby the sorting criteria ('from' or 'to') @param name the new name of the kn @param description the new description of the kb @param chosen_option set to dialog box value """ ln = wash_language(ln) _ = gettext_set_language(ln) navtrail_previous_links = ''' > <a class="navtrail" href="%s/kb?ln=%s">%s</a>''' % (CFG_SITE_SECURE_URL, ln, _("Manage Knowledge Bases")) try: dummy = getUid(req) except: return error_page('Error', req) (auth_code, auth_msg) = check_user(req, 'cfgbibknowledge') if not auth_code: kb_id = wash_url_argument(kb, 'int') if chosen_option is not None: # Update could not be performed. # Redirect to kb attributes page redirect_to_url(req, "kb?ln=%(ln)s&action=attributes&kb=%(kb)s&sortby=%(sortby)s&kb_type=%(kb_type)s" % {'ln':ln, 'kb':kb_id, 'sortby':sortby, 'kb_type':kb_type}) kb_name = bibknowledge.get_kb_name(kb_id) if kb_name is None: return page(title=_("Unknown Knowledge Base"), body = "", language=ln, navtrail = navtrail_previous_links, errors = [("ERR_KB_ID_UNKNOWN", kb)], lastupdated=__lastupdated__, req=req) new_name = wash_url_argument(name, 'str') if kb_name != new_name and bibknowledge.kb_exists(new_name): #A knowledge base with that name already exist #Do not update return dialog_box(req=req, ln=ln, title="Name already in use", message="""<i>%s</i> cannot be renamed to %s: Another knowledge base already has that name. <br/>Please choose another name.""" % (kb_name, new_name), navtrail=navtrail_previous_links, options=[ _("Ok")]) new_desc = wash_url_argument(description, 'str') bibknowledge.update_kb_attributes(kb_name, new_name, new_desc) redirect_to_url(req, "kb?ln=%(ln)s&kb=%(kb)s&sortby=%(sortby)s" % {'ln':ln, 'kb':kb_id, 'sortby':sortby}) else: return page_not_authorized(req=req, text=auth_msg, navtrail=navtrail_previous_links)
def kb_add_mapping(req, kb, mapFrom, mapTo, sortby="to", ln=CFG_SITE_LANG, forcetype=None, replacements=None, kb_type=None): """ Adds a new mapping to a kb. @param ln language @param kb the kb id to show @param sortby the sorting criteria ('from' or 'to') @param forcetype indicates if this function should ask about replacing left/right sides (None or 'no') replace in current kb ('curr') or in all ('all') @param replacements an object containing kbname+++left+++right strings. Can be a string or an array of strings @param kb_type None for normal from-to kb's, 't' for taxonomies """ ln = wash_language(ln) _ = gettext_set_language(ln) navtrail_previous_links = ''' > <a class="navtrail" href="%s/kb?ln=%s">%s</a>''' % (CFG_SITE_SECURE_URL, ln, _("Manage Knowledge Bases")) try: dummy = getUid(req) except: return error_page('Error', req) (auth_code, auth_msg) = check_user(req, 'cfgbibknowledge') if not auth_code: kb_id = wash_url_argument(kb, 'int') kb_name = bibknowledge.get_kb_name(kb_id) if kb_name is None: return page(title=_("Unknown Knowledge Base"), body = "", language=ln, navtrail = navtrail_previous_links, errors = [("ERR_KB_ID_UNKNOWN", kb)], lastupdated=__lastupdated__, req=req) key = wash_url_argument(mapFrom, 'str') value = wash_url_argument(mapTo, 'str') #check if key or value already exists in some KB left_sides_match = bibknowledge.get_kb_mappings("", key, "") #check that the match is exact left_sides = [] for m in left_sides_match: if m['key'] == key: left_sides.append(m) right_sides_match = bibknowledge.get_kb_mappings("", "", value) right_sides = [] for m in right_sides_match: if m['value'] == value: right_sides.append(m) if (len(right_sides) == 0) and (len(left_sides) == 0): #no problems, just add in current forcetype = "curr" #likewise, if this is a taxonomy, just pass on if kb_type == 't': forcetype = "curr" if forcetype and not forcetype == "no": pass else: if len(left_sides) > 0: return page(title=_("Left side exists"), body = bibknowledgeadminlib.perform_request_verify_rule(ln, kb_id, key, value, "left", kb_name, left_sides), language=ln, navtrail = navtrail_previous_links, lastupdated=__lastupdated__, req=req) if len(right_sides) > 0: return page(title=_("Right side exists"), body = bibknowledgeadminlib.perform_request_verify_rule(ln, kb_id, key, value, "right", kb_name, right_sides), language=ln, navtrail = navtrail_previous_links, lastupdated=__lastupdated__, req=req) if forcetype == "curr": bibknowledge.add_kb_mapping(kb_name, key, value) if forcetype == "all": #a bit tricky.. remove the rules given in param replacement and add the current #rule in the same kb's if replacements: #"replacements" can be either a string or an array. Let's make it always an array if type(replacements) == type("this is a string"): mystr = replacements replacements = [] replacements.append(mystr) for r in replacements: if r.find("++++") > 0: (rkbname, rleft, dummy) = r.split('++++') bibknowledge.remove_kb_mapping(rkbname, rleft) #add only if this is not yet there.. if not bibknowledge.kb_mapping_exists(rkbname, key): bibknowledge.add_kb_mapping(rkbname, key, value) redirect_to_url(req, "kb?ln=%(ln)s&kb=%(kb)s&sortby=%(sortby)s&kb_type=%(kb_type)s" % {'ln':ln, 'kb':kb_id, 'sortby':sortby, 'kb_type':kb_type}) else: return page_not_authorized(req=req, text=auth_msg, navtrail=navtrail_previous_links)
def kb_add_mapping(req, kb, mapFrom, mapTo, sortby="to", ln=CFG_SITE_LANG, forcetype=None, replacements=None, kb_type=None): """ Adds a new mapping to a kb. @param ln language @param kb the kb id to show @param sortby the sorting criteria ('from' or 'to') @param forcetype indicates if this function should ask about replacing left/right sides (None or 'no') replace in current kb ('curr') or in all ('all') @param replacements an object containing kbname+++left+++right strings. Can be a string or an array of strings @param kb_type None for normal from-to kb's, 't' for taxonomies """ ln = wash_language(ln) _ = gettext_set_language(ln) navtrail_previous_links = ''' > <a class="navtrail" href="%s/kb?ln=%s">%s</a>''' % ( CFG_SITE_SECURE_URL, ln, _("Manage Knowledge Bases")) try: dummy = getUid(req) except MySQLdb.Error: return error_page(req) (auth_code, auth_msg) = check_user(req, 'cfgbibknowledge') if not auth_code: kb_id = wash_url_argument(kb, 'int') kb_name = bibknowledge.get_kb_name(kb_id) if kb_name is None: return page(title=_("Unknown Knowledge Base"), body="", language=ln, navtrail=navtrail_previous_links, errors=[("ERR_KB_ID_UNKNOWN", kb)], lastupdated=__lastupdated__, req=req) key = wash_url_argument(mapFrom, 'str') value = wash_url_argument(mapTo, 'str') #check if key or value already exists in some KB left_sides_match = bibknowledge.get_kb_mappings("", key, "") #check that the match is exact left_sides = [] for m in left_sides_match: if m['key'] == key: left_sides.append(m) right_sides_match = bibknowledge.get_kb_mappings("", "", value) right_sides = [] for m in right_sides_match: if m['value'] == value: right_sides.append(m) if (len(right_sides) == 0) and (len(left_sides) == 0): #no problems, just add in current forcetype = "curr" #likewise, if this is a taxonomy, just pass on if kb_type == 't': forcetype = "curr" if forcetype and not forcetype == "no": pass else: if len(left_sides) > 0: return page( title=_("Left side exists"), body=bibknowledgeadminlib.perform_request_verify_rule( ln, kb_id, key, value, "left", kb_name, left_sides), language=ln, navtrail=navtrail_previous_links, lastupdated=__lastupdated__, req=req) if len(right_sides) > 0: return page( title=_("Right side exists"), body=bibknowledgeadminlib.perform_request_verify_rule( ln, kb_id, key, value, "right", kb_name, right_sides), language=ln, navtrail=navtrail_previous_links, lastupdated=__lastupdated__, req=req) if forcetype == "curr": bibknowledge.add_kb_mapping(kb_name, key, value) if forcetype == "all": #a bit tricky.. remove the rules given in param replacement and add the current #rule in the same kb's if replacements: #"replacements" can be either a string or an array. Let's make it always an array if type(replacements) == type("this is a string"): mystr = replacements replacements = [] replacements.append(mystr) for r in replacements: if r.find("++++") > 0: (rkbname, rleft, dummy) = r.split('++++') bibknowledge.remove_kb_mapping(rkbname, rleft) #add only if this is not yet there.. if not bibknowledge.kb_mapping_exists(rkbname, key): bibknowledge.add_kb_mapping(rkbname, key, value) redirect_to_url( req, "kb?ln=%(ln)s&kb=%(kb)s&sortby=%(sortby)s&kb_type=%(kb_type)s" % { 'ln': ln, 'kb': kb_id, 'sortby': sortby, 'kb_type': kb_type }) else: return page_not_authorized(req=req, text=auth_msg, navtrail=navtrail_previous_links)
def kb_edit_mapping(req, kb, key, mapFrom, mapTo, update="", delete="", sortby="to", ln=CFG_SITE_LANG): """ Edit a mapping to in kb. Edit can be "update old value" or "delete existing value" @param kb the knowledge base id to edit @param key the key of the mapping that will be modified @param mapFrom the new key of the mapping @param mapTo the new value of the mapping @param update contains a value if the mapping is to be updated @param delete contains a value if the mapping is to be deleted @param sortby the sorting criteria ('from' or 'to') """ ln = wash_language(ln) _ = gettext_set_language(ln) navtrail_previous_links = ''' > <a class="navtrail" href="%s/kb?ln=%s">%s</a>''' % ( CFG_SITE_SECURE_URL, ln, _("Manage Knowledge Bases")) try: dummy = getUid(req) except MySQLdb.Error: return error_page(req) (auth_code, auth_msg) = check_user(req, 'cfgbibknowledge') if not auth_code: kb_id = wash_url_argument(kb, 'int') kb_name = bibknowledge.get_kb_name(kb_id) if kb_name is None: return page(title=_("Unknown Knowledge Base"), body="", language=ln, navtrail=navtrail_previous_links, errors=[("ERR_KB_ID_UNKNOWN", kb)], lastupdated=__lastupdated__, req=req) key = wash_url_argument(key, 'str') if delete != "": #Delete bibknowledge.remove_kb_mapping(kb_name, key) if update != "": #Update new_key = wash_url_argument(mapFrom, 'str') new_value = wash_url_argument(mapTo, 'str') bibknowledge.update_kb_mapping(kb_name, key, new_key, new_value) redirect_to_url( req, "kb?ln=%(ln)s&kb=%(kb)s&sortby=%(sortby)s" % { 'ln': ln, 'kb': kb_id, 'sortby': sortby }) else: return page_not_authorized(req=req, text=auth_msg, navtrail=navtrail_previous_links)