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 operator import attrgetter
|
||||||
from future_builtins import map
|
from future_builtins import map
|
||||||
|
|
||||||
|
from calibre.ebooks.metadata import author_to_author_sort
|
||||||
from calibre.library.field_metadata import TagsIcons
|
from calibre.library.field_metadata import TagsIcons
|
||||||
from calibre.utils.config_base import tweaks
|
from calibre.utils.config_base import tweaks
|
||||||
from calibre.utils.icu import sort_key
|
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':
|
elif category == 'news':
|
||||||
cats = dbcache.fields['tags'].get_news_category(tag_class, book_ids)
|
cats = dbcache.fields['tags'].get_news_category(tag_class, book_ids)
|
||||||
else:
|
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(
|
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)
|
sort_categories(cats, sort)
|
||||||
categories[category] = cats
|
categories[category] = cats
|
||||||
|
|
||||||
|
@ -247,9 +247,34 @@ class ReadingTest(BaseTest):
|
|||||||
old = LibraryDatabase2(self.library_path)
|
old = LibraryDatabase2(self.library_path)
|
||||||
old_categories = old.get_categories()
|
old_categories = old.get_categories()
|
||||||
cache = self.init_cache(self.library_path)
|
cache = self.init_cache(self.library_path)
|
||||||
import pprint
|
new_categories = cache.get_categories()
|
||||||
pprint.pprint(old_categories)
|
self.assertEqual(set(old_categories), set(new_categories),
|
||||||
pprint.pprint(cache.get_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