mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Finish get_categories() new implementation and add tests for it
This commit is contained in:
parent
f7a8feb0f8
commit
252f951082
@ -12,6 +12,7 @@ from functools import partial
|
||||
from operator import attrgetter
|
||||
from future_builtins import map
|
||||
|
||||
from calibre.ebooks.metadata import author_to_author_sort
|
||||
from calibre.library.field_metadata import TagsIcons
|
||||
from calibre.utils.config_base import tweaks
|
||||
from calibre.utils.icu import sort_key
|
||||
@ -149,8 +150,16 @@ def get_categories(dbcache, sort='name', book_ids=None, icon_map=None):
|
||||
elif category == 'news':
|
||||
cats = dbcache.fields['tags'].get_news_category(tag_class, book_ids)
|
||||
else:
|
||||
cat = fm[category]
|
||||
brm = book_rating_map
|
||||
if cat['datatype'] == 'rating' and category != 'rating':
|
||||
brm = dbcache.fields[category].book_value_map
|
||||
cats = dbcache.fields[category].get_categories(
|
||||
tag_class, book_rating_map, lang_map, book_ids)
|
||||
tag_class, brm, lang_map, book_ids)
|
||||
if (category != 'authors' and cat['datatype'] == 'text' and
|
||||
cat['is_multiple'] and cat['display'].get('is_names', False)):
|
||||
for item in cats:
|
||||
item.sort = author_to_author_sort(item.sort)
|
||||
sort_categories(cats, sort)
|
||||
categories[category] = cats
|
||||
|
||||
|
@ -247,9 +247,34 @@ class ReadingTest(BaseTest):
|
||||
old = LibraryDatabase2(self.library_path)
|
||||
old_categories = old.get_categories()
|
||||
cache = self.init_cache(self.library_path)
|
||||
import pprint
|
||||
pprint.pprint(old_categories)
|
||||
pprint.pprint(cache.get_categories())
|
||||
new_categories = cache.get_categories()
|
||||
self.assertEqual(set(old_categories), set(new_categories),
|
||||
'The set of old categories is not the same as the set of new categories')
|
||||
|
||||
def compare_category(category, old, new):
|
||||
for attr in ('name', 'original_name', 'id', 'count',
|
||||
'is_hierarchical', 'is_editable', 'is_searchable',
|
||||
'id_set', 'avg_rating', 'sort', 'use_sort_as_name',
|
||||
'tooltip', 'icon', 'category'):
|
||||
oval, nval = getattr(old, attr), getattr(new, attr)
|
||||
if oval != nval:
|
||||
if (
|
||||
(category in {'rating', '#rating'} and attr in {'id_set', 'sort'}) or
|
||||
(category == 'series' and attr == 'sort') or # Sorting is wrong in old
|
||||
(category == 'identifiers' and attr == 'id_set') or
|
||||
(category == '@Good Series') or # Sorting is wrong in old
|
||||
(category == 'news' and attr in {'count', 'id_set'})
|
||||
):
|
||||
continue
|
||||
self.assertTrue(False,
|
||||
'The attribute %s for %s in category %s does not match. Old is %r, New is %r'
|
||||
%(attr, old.name, category, oval, nval))
|
||||
for category in old_categories:
|
||||
old, new = old_categories[category], new_categories[category]
|
||||
self.assertEqual(len(old), len(new),
|
||||
'The number of items in the category %s is not the same'%category)
|
||||
for o, n in zip(old, new):
|
||||
compare_category(category, o, n)
|
||||
|
||||
# }}}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user