Fix sorting for is_multiple custom cols

This commit is contained in:
Kovid Goyal 2013-08-25 11:43:15 +05:30
parent f8463a2ddc
commit 7c9b460f52
2 changed files with 13 additions and 0 deletions

View File

@ -205,9 +205,16 @@ class CompositeField(OneToOneField):
self._default_sort_key = None
self._bool_sort_key = bool_sort_key(bools_are_tristate)
self._sort_key = self.bool_sort_key
elif self.splitter is not None:
self._default_sort_key = ()
self._sort_key = self.multiple_sort_key
else:
self._sort_key = sort_key
def multiple_sort_key(self, val):
val = (sort_key(x.strip()) for x in (val or '').split(self.splitter))
return tuple(sorted(val))
def number_sort_key(self, val):
try:
p = 1

View File

@ -556,6 +556,7 @@ class ReadingTest(BaseTest):
# }}}
def test_composites(self): # {{{
' Test sorting and searching in composite columns '
from calibre.utils.date import parse_only_date as p
cache = self.init_cache()
cache.create_custom_column('mult', 'CC1', 'composite', True, display={'composite_template': 'b,a,c'})
@ -565,6 +566,7 @@ class ReadingTest(BaseTest):
cache.create_custom_column('ccdate', 'CC5', 'composite', False,
display={'composite_template': '{pubdate:format_date(d-M-yy)}', 'composite_sort':'date'})
cache.create_custom_column('bool', 'CC6', 'composite', False, display={'composite_template': '{#yesno}', 'composite_sort':'bool'})
cache.create_custom_column('ccm', 'CC7', 'composite', True, display={'composite_template': '{#tags}'})
cache = self.init_cache()
# Test searching
@ -585,5 +587,9 @@ class ReadingTest(BaseTest):
# Test bool sorting
self.assertEqual([2, 1, 3], cache.multisort([('#bool', True)]))
# Test is_multiple sorting
cache.set_field('#tags', {1:'b, a, c', 2:'a, b, c', 3:'a, c, b'})
self.assertEqual([1, 2, 3], cache.multisort([('#ccm', True)]))
# }}}