This commit is contained in:
Kovid Goyal 2011-09-03 08:52:30 -06:00
parent 384e24a06a
commit 3f50c415c4
2 changed files with 9 additions and 10 deletions

View File

@ -347,8 +347,9 @@ class Cache(object):
as_path=as_path) as_path=as_path)
@read_api @read_api
def multisort(self, fields): def multisort(self, fields, ids_to_sort=None):
all_book_ids = frozenset(self._all_book_ids()) all_book_ids = frozenset(self._all_book_ids() if ids_to_sort is None
else ids_to_sort)
get_metadata = partial(self._get_metadata, get_user_categories=False) get_metadata = partial(self._get_metadata, get_user_categories=False)
sort_keys = tuple(self.fields[field[0]].sort_keys_for_books(get_metadata, sort_keys = tuple(self.fields[field[0]].sort_keys_for_books(get_metadata,

View File

@ -51,9 +51,13 @@ class Field(object):
def __iter__(self): def __iter__(self):
''' '''
Iterate over the ids for all values in this field Iterate over the ids for all values in this field.
WARNING: Some fields such as composite fields and virtual
fields like ondevice do not have ids for their values, in such
cases this is an empty iterator.
''' '''
raise NotImplementedError() return iter(())
def sort_keys_for_books(self, get_metadata, all_book_ids): def sort_keys_for_books(self, get_metadata, all_book_ids):
''' '''
@ -78,9 +82,6 @@ class OneToOneField(Field):
def __iter__(self): def __iter__(self):
return self.table.book_col_map.iterkeys() return self.table.book_col_map.iterkeys()
def iter_book_ids(self):
return self.table.book_col_map.iterkeys()
def sort_keys_for_books(self, get_metadata, all_book_ids): def sort_keys_for_books(self, get_metadata, all_book_ids):
return {id_ : self._sort_key(self.book_col_map.get(id_, '')) for id_ in return {id_ : self._sort_key(self.book_col_map.get(id_, '')) for id_ in
all_book_ids} all_book_ids}
@ -154,9 +155,6 @@ class OnDeviceField(OneToOneField):
def __iter__(self): def __iter__(self):
return iter(()) return iter(())
def iter_book_ids(self):
return iter(())
def sort_keys_for_books(self, get_metadata, all_book_ids): def sort_keys_for_books(self, get_metadata, all_book_ids):
return {id_ : self.for_book(id_) for id_ in return {id_ : self.for_book(id_) for id_ in
all_book_ids} all_book_ids}