mirror of
https://github.com/gristlabs/grist-core.git
synced 2026-03-02 04:09:24 +00:00
(core) Respect sort_by in lookupOne, and allow reverse sorting
Summary: Ensure that `lookupOne` (via `RecordSet.get_one`) pays attention to the `sort_by` parameter by picking the first of its sorted list of row IDs. Allow specifying reverse sort order in `sort_by` by adding `"-"` before the column ID. Suggested in https://grist.slack.com/archives/C0234CPPXPA/p1665756041063079 Test Plan: Extended Python lookup test Reviewers: jarek Reviewed By: jarek Differential Revision: https://phab.getgrist.com/D3675
This commit is contained in:
@@ -505,8 +505,15 @@ class Table(object):
|
||||
lookup_map = self._get_lookup_map(col_ids)
|
||||
row_id_set, rel = lookup_map.do_lookup(key)
|
||||
if sort_by:
|
||||
row_ids = sorted(row_id_set,
|
||||
key=lambda r: column.SafeSortKey(self._get_col_value(sort_by, r, rel)))
|
||||
if not isinstance(sort_by, six.string_types):
|
||||
raise TypeError("sort_by must be a column ID (string)")
|
||||
reverse = sort_by.startswith("-")
|
||||
sort_col = sort_by.lstrip("-")
|
||||
row_ids = sorted(
|
||||
row_id_set,
|
||||
key=lambda r: column.SafeSortKey(self._get_col_value(sort_col, r, rel)),
|
||||
reverse=reverse,
|
||||
)
|
||||
else:
|
||||
row_ids = sorted(row_id_set)
|
||||
return self.RecordSet(row_ids, rel, group_by=kwargs, sort_by=sort_by)
|
||||
|
||||
Reference in New Issue
Block a user