diff --git a/gen/__init__.py b/gen/__init__.py index f44b27c..90af26d 100644 --- a/gen/__init__.py +++ b/gen/__init__.py @@ -298,10 +298,12 @@ class Import: class Search: '''Used for specifying a search for a given type.''' - def __init__(self, name, group=None, sortBy='', limit=None, **fields): + def __init__(self, name, group=None, sortBy='', sortOrder='asc', limit=None, + **fields): self.name = name self.group = group # Searches may be visually grouped in the portlet self.sortBy = sortBy + self.sortOrder = sortOrder self.limit = limit # In the dict below, keys are indexed field names and values are # search values. diff --git a/gen/mixins/ToolMixin.py b/gen/mixins/ToolMixin.py index 8d6ee7d..5288cea 100644 --- a/gen/mixins/ToolMixin.py +++ b/gen/mixins/ToolMixin.py @@ -288,9 +288,10 @@ class ToolMixin(BaseMixin): currently logged user can't see. The result is sorted according to the potential sort key defined in - the Search instance (Search.sortBy). But if parameter p_sortBy is - given, it defines or overrides the sort. In this case, p_sortOrder - gives the order (*asc*ending or *desc*ending). + the Search instance (Search.sortBy, together with Search.sortOrder). + But if parameter p_sortBy is given, it defines or overrides the sort. + In this case, p_sortOrder gives the order (*asc*ending or + *desc*ending). If p_filterKey is given, it represents an additional search parameter to take into account: the corresponding search value is in @@ -329,6 +330,8 @@ class ToolMixin(BaseMixin): sortKey = search.sortBy if sortKey: params['sort_on'] = Search.getIndexName(sortKey, usage='sort') + if search.sortOrder == 'desc': params['sort_order'] = 'reverse' + else: params['sort_order'] = None # Determine or override sort if specified. if sortBy: params['sort_on'] = Search.getIndexName(sortBy, usage='sort') @@ -917,7 +920,8 @@ class ToolMixin(BaseMixin): password = request.get('__ac_password', '') elif cookie and (cookie != 'deleted'): cookieValue = base64.decodestring(urllib.unquote(cookie)) - login, password = cookieValue.split(':') + if ':' in cookieValue: + login, password = cookieValue.split(':') # Try to authenticate this user user = self.authenticate(login, password, request) emergency = self._emergency_user