# HG changeset patch # User fabien@tzone.org # Date 1230703221 18000 # Node ID 1798859f7f6cd959717d3108a324d7eafb7738bd # Parent d79722064d8d044349d7b0096b662e033a5ec0f0 Add my_db.MyDBConnexion.map_keywords diff -r d79722064d8d -r 1798859f7f6c lib/my_db.py --- a/lib/my_db.py Wed Dec 31 00:07:25 2008 -0500 +++ b/lib/my_db.py Wed Dec 31 01:00:21 2008 -0500 @@ -275,6 +275,21 @@ if not res: res = [[0,0]] return res + def map_keywords(self, kws): + """Return a dictionnary of keywords and their ids.""" + qry = """SELECT k.id, k.name + FROM keywords k + WHERE k.userid = %d """ % self.userid + qry += " AND ( k.name = %s " % sql_quote(kws[0]) + for kw in kws[1:]: + qry += " OR k.name = %s " % sql_quote(kw) + qry += ");" + self.crs.execute(qry) + res = dict((kw, -1) for kw in kws) + for id, name in self.crs.fetchall(): + res[name] = id + return res + def _bookmarks_selection(self, has_kw = [0], except_kw = []): """ Return a bookmarks selection query used in at least two function. @@ -316,6 +331,7 @@ qry += "GROUP BY keyword ORDER BY keyword;" self.crs.execute(qry) return self.crs.fetchall() + # Folders related functionnality def get_folder_keyword(self, id): self.crs.execute(""" SELECT k.id, k.name diff -r d79722064d8d -r 1798859f7f6c tests/lib/test_my_db.py --- a/tests/lib/test_my_db.py Wed Dec 31 00:07:25 2008 -0500 +++ b/tests/lib/test_my_db.py Wed Dec 31 01:00:21 2008 -0500 @@ -4,36 +4,55 @@ import pgdb class TestMyDbConnexion(unittest.TestCase): - def setUp(self): - " Setup a test-db environment." - self.db = my_db.connect(testconfig.CONFIG, "test") - self.prefs = { 'keywords_box' : 10, - 'keywords_sort' : 'count', - 'keywords_reverse': True, - 'fullname': 'Test User', - 'default_view': 1 } - - def tearDown(self): - " Tear down the test-db environment" - self.db.delete_user(self.db.userid) - pass + def setUp(self): + " Setup a test-db environment." + self.db = my_db.connect(testconfig.CONFIG, "test") + self.prefs = { 'keywords_box' : 10, + 'keywords_sort' : 'count', + 'keywords_reverse': True, + 'fullname': 'Test User', + 'default_view': 1 } + + def tearDown(self): + " Tear down the test-db environment" + self.db.delete_user(self.db.userid) + + def testConnect(self): + self.assertNotEqual(self.db, None) + self.assertNotEqual(self.db.userid, -1) + + def testGetPreferences(self): + prefs = self.db.get_preferences() + keys = prefs.keys() + keys.sort() + expKeys = self.prefs.keys() + expKeys.sort() + self.assertEqual(expKeys, keys) - def testConnect(self): - self.assertNotEqual(self.db, None) - self.assertNotEqual(self.db.userid, -1) + def testSetPreferences(self): + self.db.set_preferences(self.prefs) + prefs = self.db.get_preferences() + self.assertEqual(prefs, self.prefs) + + def testAddKeyword(self): + kw = self.db.add_keyword('keyword') + self.assertEqual(self.db.get_keyword(kw), 'keyword') - def testGetPreferences(self): - prefs = self.db.get_preferences() - keys = prefs.keys() - keys.sort() - expKeys = self.prefs.keys() - expKeys.sort() - self.assertEqual(expKeys, keys) + def testRemoveKeyword(self): + kw = self.db.add_keyword('keyword') + self.db.remove_keyword(kw) + kws = self.db.get_all_keywords() + # There is always '--' by default + self.assertEqual(len(kws), 1) - def testSetPreferences(self): - self.db.set_preferences(self.prefs) - prefs = self.db.get_preferences() - self.assertEqual(prefs, self.prefs) + def testMapKeywords(self): + kws = ('kw1', 'kw2', 'kw3', 'kw4') + kwids = map(self.db.add_keyword, kws[:-1]) + expected_map = { kws[-1]: -1 } + for kw, id in zip(kws[:-1], kwids): + expected_map[kw] = id + kw_map = self.db.map_keywords(kws) + self.assertEqual(expected_map, kw_map) if __name__ == '__main__': unittest.main()