mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-06-23 15:30:45 -04:00
Fix sorting for is_multiple custom cols
This commit is contained in:
parent
f8463a2ddc
commit
7c9b460f52
@ -205,9 +205,16 @@ class CompositeField(OneToOneField):
|
|||||||
self._default_sort_key = None
|
self._default_sort_key = None
|
||||||
self._bool_sort_key = bool_sort_key(bools_are_tristate)
|
self._bool_sort_key = bool_sort_key(bools_are_tristate)
|
||||||
self._sort_key = self.bool_sort_key
|
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:
|
else:
|
||||||
self._sort_key = sort_key
|
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):
|
def number_sort_key(self, val):
|
||||||
try:
|
try:
|
||||||
p = 1
|
p = 1
|
||||||
|
@ -556,6 +556,7 @@ class ReadingTest(BaseTest):
|
|||||||
# }}}
|
# }}}
|
||||||
|
|
||||||
def test_composites(self): # {{{
|
def test_composites(self): # {{{
|
||||||
|
' Test sorting and searching in composite columns '
|
||||||
from calibre.utils.date import parse_only_date as p
|
from calibre.utils.date import parse_only_date as p
|
||||||
cache = self.init_cache()
|
cache = self.init_cache()
|
||||||
cache.create_custom_column('mult', 'CC1', 'composite', True, display={'composite_template': 'b,a,c'})
|
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,
|
cache.create_custom_column('ccdate', 'CC5', 'composite', False,
|
||||||
display={'composite_template': '{pubdate:format_date(d-M-yy)}', 'composite_sort':'date'})
|
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('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()
|
cache = self.init_cache()
|
||||||
# Test searching
|
# Test searching
|
||||||
@ -585,5 +587,9 @@ class ReadingTest(BaseTest):
|
|||||||
|
|
||||||
# Test bool sorting
|
# Test bool sorting
|
||||||
self.assertEqual([2, 1, 3], cache.multisort([('#bool', True)]))
|
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)]))
|
||||||
# }}}
|
# }}}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user