diff --git a/src/calibre/db/cache.py b/src/calibre/db/cache.py index eca5a2a395..bc8f1024f5 100644 --- a/src/calibre/db/cache.py +++ b/src/calibre/db/cache.py @@ -388,6 +388,10 @@ class Cache(object): return self.fields[field].table.book_col_map.copy() raise ValueError('%s is not a many-one or many-many field' % field) + @read_api + def get_item_name(self, field, item_id): + return self.fields[field].table.id_map[item_id] + @read_api def author_data(self, author_ids=None): ''' diff --git a/src/calibre/db/legacy.py b/src/calibre/db/legacy.py index 2c84542d4f..f8faed4290 100644 --- a/src/calibre/db/legacy.py +++ b/src/calibre/db/legacy.py @@ -90,6 +90,13 @@ class LibraryDatabase(object): return func setattr(self, 'get_%s_with_ids' % field, MT(getter(field))) + for field in ('author', 'tag', 'series'): + def getter(field): + field = field if field == 'series' else (field+'s') + def func(self, item_id): + return self.new_api.get_item_name(field, item_id) + return func + setattr(self, '%s_name' % 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 55fac0120d..96fc98d5be 100644 --- a/src/calibre/db/tests/legacy.py +++ b/src/calibre/db/tests/legacy.py @@ -32,7 +32,9 @@ class ET(object): return newres def compare_argspecs(old, new, attr): - ok = len(old.args) == len(new.args) and len(old.defaults or ()) == len(new.defaults or ()) and old.args[-len(old.defaults or ()):] == new.args[-len(new.defaults or ()):] # noqa + num = len(old.defaults or ()) + + ok = len(old.args) == len(new.args) and old.defaults == new.defaults and (num == 0 or old.args[-num:] == new.args[-num:]) if not ok: raise AssertionError('The argspec for %s does not match. %r != %r' % (attr, old, new)) @@ -165,6 +167,9 @@ class LegacyTest(BaseTest): '!get_publishers_with_ids':[()], '!get_ratings_with_ids':[()], '!get_languages_with_ids':[()], + 'tag_name':[(3,)], + 'author_name':[(3,)], + 'series_name':[(3,)], }.iteritems(): for a in args: fmt = lambda x: x