get_*_with_ids() API

This commit is contained in:
Kovid Goyal 2013-07-12 14:43:08 +05:30
parent 9249fd8a3e
commit ca8f29db0b
3 changed files with 25 additions and 12 deletions

View File

@ -389,7 +389,7 @@ class Cache(object):
raise ValueError('%s is not a many-one or many-many field' % field) raise ValueError('%s is not a many-one or many-many field' % field)
@read_api @read_api
def author_data(self, author_ids): def author_data(self, author_ids=None):
''' '''
Return author data as a dictionary with keys: name, sort, link Return author data as a dictionary with keys: name, sort, link

View File

@ -73,6 +73,12 @@ class LibraryDatabase(object):
for func, field in {'all_authors':'authors', 'all_titles':'title', 'all_tags2':'tags', 'all_series':'series', 'all_publishers':'publisher'}.iteritems(): for func, field in {'all_authors':'authors', 'all_titles':'title', 'all_tags2':'tags', 'all_series':'series', 'all_publishers':'publisher'}.iteritems():
setattr(self, func, partial(self.field_id_map, field)) setattr(self, func, partial(self.field_id_map, field))
self.all_tags = lambda : list(self.all_tag_names()) self.all_tags = lambda : list(self.all_tag_names())
self.get_authors_with_ids = lambda : [[aid, adata['name'], adata['sort'], adata['link']] for aid, adata in self.new_api.author_data().iteritems()]
self.get_tags_with_ids = lambda : [[tid, tag] for tid, tag in self.new_api.get_id_map('tags').iteritems()]
self.get_series_with_ids = lambda : [[tid, tag] for tid, tag in self.new_api.get_id_map('series').iteritems()]
self.get_publishers_with_ids = lambda : [[tid, tag] for tid, tag in self.new_api.get_id_map('publisher').iteritems()]
self.get_ratings_with_ids = lambda : [[tid, tag] for tid, tag in self.new_api.get_id_map('rating').iteritems()]
self.get_languages_with_ids = lambda : [[tid, tag] for tid, tag in self.new_api.get_id_map('languages').iteritems()]
for func in ( for func in (
'standard_field_keys', 'custom_field_keys', 'all_field_keys', 'standard_field_keys', 'custom_field_keys', 'all_field_keys',

View File

@ -143,12 +143,12 @@ class LegacyTest(BaseTest):
'all_tag_names':[()], 'all_tag_names':[()],
'all_series_names':[()], 'all_series_names':[()],
'all_publisher_names':[()], 'all_publisher_names':[()],
'all_authors':[()], '!all_authors':[()],
'all_tags2':[()], '!all_tags2':[()],
'all_tags':[()], '@all_tags':[()],
'all_publishers':[()], '!all_publishers':[()],
'all_titles':[()], '!all_titles':[()],
'all_series':[()], '!all_series':[()],
'standard_field_keys':[()], 'standard_field_keys':[()],
'all_field_keys':[()], 'all_field_keys':[()],
'searchable_fields':[()], 'searchable_fields':[()],
@ -156,16 +156,23 @@ class LegacyTest(BaseTest):
'metadata_for_field':[('title',), ('tags',)], 'metadata_for_field':[('title',), ('tags',)],
'sortable_field_keys':[()], 'sortable_field_keys':[()],
'custom_field_keys':[(True,), (False,)], 'custom_field_keys':[(True,), (False,)],
'get_usage_count_by_id':[('authors',), ('tags',), ('series',), ('publisher',), ('#tags',), ('languages',)], '!get_usage_count_by_id':[('authors',), ('tags',), ('series',), ('publisher',), ('#tags',), ('languages',)],
'get_field':[(1, 'title'), (2, 'tags'), (0, 'rating'), (1, 'authors'), (2, 'series'), (1, '#tags')], 'get_field':[(1, 'title'), (2, 'tags'), (0, 'rating'), (1, 'authors'), (2, 'series'), (1, '#tags')],
'all_formats':[()], 'all_formats':[()],
'get_authors_with_ids':[()],
'!get_tags_with_ids':[()],
'!get_series_with_ids':[()],
'!get_publishers_with_ids':[()],
'!get_ratings_with_ids':[()],
'!get_languages_with_ids':[()],
}.iteritems(): }.iteritems():
for a in args: for a in args:
fmt = lambda x: x fmt = lambda x: x
if meth in {'get_usage_count_by_id', 'all_series', 'all_authors', 'all_tags2', 'all_publishers', 'all_titles'}: if meth[0] in {'!', '@'}:
fmt = dict fmt = {'!':dict, '@':frozenset}[meth[0]]
elif meth in {'all_tags'}: meth = meth[1:]
fmt = frozenset elif meth == 'get_authors_with_ids':
fmt = lambda val:{x[0]:tuple(x[1:]) for x in val}
self.assertEqual(fmt(getattr(db, meth)(*a)), fmt(getattr(ndb, meth)(*a)), self.assertEqual(fmt(getattr(db, meth)(*a)), fmt(getattr(ndb, meth)(*a)),
'The method: %s() returned different results for argument %s' % (meth, a)) 'The method: %s() returned different results for argument %s' % (meth, a))
db.close() db.close()