diff --git a/src/calibre/db/legacy.py b/src/calibre/db/legacy.py index 03146ea1dc..6128d6a09a 100644 --- a/src/calibre/db/legacy.py +++ b/src/calibre/db/legacy.py @@ -98,6 +98,13 @@ class LibraryDatabase(object): return self.new_api.get_item_name(field, item_id) return func setattr(self, '%s_name' % field, MT(getter(field))) + for field in ('publisher', 'series', 'tag'): + def getter(field): + fname = 'tags' if field == 'tag' else field + def func(self, item_id): + self.new_api.remove_items(fname, (item_id,)) + return func + setattr(self, 'delete_%s_using_id' % field, MT(getter(field))) # Legacy field API for func in ( diff --git a/src/calibre/db/tests/legacy.py b/src/calibre/db/tests/legacy.py index 7182a6ef06..76deaea792 100644 --- a/src/calibre/db/tests/legacy.py +++ b/src/calibre/db/tests/legacy.py @@ -212,6 +212,31 @@ class LegacyTest(BaseTest): db.close() # }}} + def test_legacy_delete_using(self): # {{{ + 'Test delete_using() API' + ndb = self.init_legacy() + db = self.init_old() + cache = ndb.new_api + tmap = cache.get_id_map('tags') + t = next(tmap.iterkeys()) + pmap = cache.get_id_map('publisher') + p = next(pmap.iterkeys()) + for x in ( + ('delete_tag_using_id', t), + ('delete_publisher_using_id', p), + (db.refresh,), + ('all_tag_names',), ('tags', 0), ('tags', 1), ('tags', 2), + ('all_publisher_names',), ('publisher', 0), ('publisher', 1), ('publisher', 2), + ): + meth, args = x[0], x[1:] + if callable(meth): + meth(*args) + else: + self.assertEqual((getattr(db, meth)(*args)), (getattr(ndb, meth)(*args)), + 'The method: %s() returned different results for argument %s' % (meth, args)) + db.close() + # }}} + def test_legacy_adding_books(self): # {{{ 'Test various adding books methods' from calibre.ebooks.metadata.book.base import Metadata