Change field_keys to sortable_keys

This commit is contained in:
Charles Haley 2010-09-19 20:11:39 +01:00
parent 354db58545
commit 16266c6e70
3 changed files with 6 additions and 4 deletions

View File

@ -621,7 +621,7 @@ class ResultCache(SearchQueryParser):
def multisort(self, fields=[], subsort=False): def multisort(self, fields=[], subsort=False):
fields = [(self.sanitize_sort_field_name(x), bool(y)) for x, y in fields] fields = [(self.sanitize_sort_field_name(x), bool(y)) for x, y in fields]
keys = self.field_metadata.field_keys() keys = self.field_metadata.sortable_keys()
fields = [x for x in fields if x[0] in keys] fields = [x for x in fields if x[0] in keys]
if subsort and 'sort' not in [x[0] for x in fields]: if subsort and 'sort' not in [x[0] for x in fields]:
fields += [('sort', True)] fields += [('sort', True)]

View File

@ -348,8 +348,10 @@ class FieldMetadata(dict):
def keys(self): def keys(self):
return self._tb_cats.keys() return self._tb_cats.keys()
def field_keys(self): def sortable_keys(self):
return [k for k in self._tb_cats.keys() if self._tb_cats[k]['kind']=='field'] return [k for k in self._tb_cats.keys()
if self._tb_cats[k]['kind']=='field' and
self._tb_cats[k]['datatype'] is not None]
def iterkeys(self): def iterkeys(self):
for key in self._tb_cats: for key in self._tb_cats:

View File

@ -56,7 +56,7 @@ class ContentServer(object):
def sort(self, items, field, order): def sort(self, items, field, order):
field = self.db.data.sanitize_sort_field_name(field) field = self.db.data.sanitize_sort_field_name(field)
if field not in self.db.field_metadata.field_keys(): if field not in self.db.field_metadata.sortable_keys():
raise cherrypy.HTTPError(400, '%s is not a valid sort field'%field) raise cherrypy.HTTPError(400, '%s is not a valid sort field'%field)
keyg = CSSortKeyGenerator([(field, order)], self.db.field_metadata) keyg = CSSortKeyGenerator([(field, order)], self.db.field_metadata)
items.sort(key=keyg, reverse=not order) items.sort(key=keyg, reverse=not order)