Add support for customized dashboard sorting
And suggest 'reversed last seen' as a sort order for the Recently Seen dashboard. Change-Id: I99a72b58f4135649167f1230f3847809ad807786
This commit is contained in:
parent
4a18f6a6f8
commit
7c0220d4e3
|
@ -58,6 +58,8 @@ dashboards:
|
||||||
key: "f4"
|
key: "f4"
|
||||||
- name: "Recently seen changes"
|
- name: "Recently seen changes"
|
||||||
query: "recentlyseen:24 hours"
|
query: "recentlyseen:24 hours"
|
||||||
|
sort-by: "last-seen"
|
||||||
|
reverse: True
|
||||||
key: "f5"
|
key: "f5"
|
||||||
|
|
||||||
# Reviewkeys are hotkeys that perform immediate reviews within the
|
# Reviewkeys are hotkeys that perform immediate reviews within the
|
||||||
|
|
|
@ -101,6 +101,8 @@ dashboards:
|
||||||
key: "f4"
|
key: "f4"
|
||||||
- name: "Recently seen changes"
|
- name: "Recently seen changes"
|
||||||
query: "recentlyseen:24 hours"
|
query: "recentlyseen:24 hours"
|
||||||
|
sort-by: "last-seen"
|
||||||
|
reverse: True
|
||||||
key: "f5"
|
key: "f5"
|
||||||
|
|
||||||
# Reviewkeys are hotkeys that perform immediate reviews within the
|
# Reviewkeys are hotkeys that perform immediate reviews within the
|
||||||
|
|
|
@ -147,9 +147,10 @@ commentlinks:
|
||||||
# selected. The default is "status:open".
|
# selected. The default is "status:open".
|
||||||
# change-list-query: "status:open"
|
# change-list-query: "status:open"
|
||||||
|
|
||||||
# This section defines default sorting options for the change list. The
|
# This section defines default sorting options for the change
|
||||||
# "sort-by" key specifies the sort order, which can be 'number' or 'updated'.
|
# list. The "sort-by" key specifies the sort order, which can be
|
||||||
# The 'reverse' key specifies ascending (true) or descending (false) order.
|
# 'number', 'updated', or 'last-seen'. The 'reverse' key specifies
|
||||||
|
# ascending (true) or descending (false) order.
|
||||||
# change-list-options:
|
# change-list-options:
|
||||||
# sort-by: 'number'
|
# sort-by: 'number'
|
||||||
# reverse: false
|
# reverse: false
|
||||||
|
@ -207,6 +208,8 @@ dashboards:
|
||||||
key: "f4"
|
key: "f4"
|
||||||
- name: "Recently seen changes"
|
- name: "Recently seen changes"
|
||||||
query: "recentlyseen:24 hours"
|
query: "recentlyseen:24 hours"
|
||||||
|
sort-by: "last-seen"
|
||||||
|
reverse: True
|
||||||
key: "f5"
|
key: "f5"
|
||||||
|
|
||||||
# Reviewkeys are hotkeys that perform immediate reviews within the
|
# Reviewkeys are hotkeys that perform immediate reviews within the
|
||||||
|
|
|
@ -612,7 +612,9 @@ class App(object):
|
||||||
self.doSearch("is:held")
|
self.doSearch("is:held")
|
||||||
elif key in self.config.dashboards:
|
elif key in self.config.dashboards:
|
||||||
d = self.config.dashboards[key]
|
d = self.config.dashboards[key]
|
||||||
view = view_change_list.ChangeListView(self, d['query'], d['name'])
|
view = view_change_list.ChangeListView(self, d['query'], d['name'],
|
||||||
|
sort_by=d.get('sort-by'),
|
||||||
|
reverse=d.get('reverse'))
|
||||||
self.changeScreen(view)
|
self.changeScreen(view)
|
||||||
elif keymap.FURTHER_INPUT in commands:
|
elif keymap.FURTHER_INPUT in commands:
|
||||||
self.input_buffer.append(key)
|
self.input_buffer.append(key)
|
||||||
|
|
|
@ -53,6 +53,8 @@ class ConfigSchema(object):
|
||||||
|
|
||||||
servers = [server]
|
servers = [server]
|
||||||
|
|
||||||
|
sort_by = v.Any('number', 'updated', 'last-seen')
|
||||||
|
|
||||||
text_replacement = {'text': v.Any(str,
|
text_replacement = {'text': v.Any(str,
|
||||||
{'color': str,
|
{'color': str,
|
||||||
v.Required('text'): str})}
|
v.Required('text'): str})}
|
||||||
|
@ -78,6 +80,8 @@ class ConfigSchema(object):
|
||||||
|
|
||||||
dashboard = {v.Required('name'): str,
|
dashboard = {v.Required('name'): str,
|
||||||
v.Required('query'): str,
|
v.Required('query'): str,
|
||||||
|
v.Optional('sort-by'): sort_by,
|
||||||
|
v.Optional('reverse'): bool,
|
||||||
v.Required('key'): str}
|
v.Required('key'): str}
|
||||||
|
|
||||||
dashboards = [dashboard]
|
dashboards = [dashboard]
|
||||||
|
@ -95,7 +99,7 @@ class ConfigSchema(object):
|
||||||
|
|
||||||
hide_comments = [hide_comment]
|
hide_comments = [hide_comment]
|
||||||
|
|
||||||
change_list_options = {'sort-by': v.Any('number', 'updated'),
|
change_list_options = {'sort-by': sort_by,
|
||||||
'reverse': bool}
|
'reverse': bool}
|
||||||
|
|
||||||
keymap = {v.Required('name'): str,
|
keymap = {v.Required('name'): str,
|
||||||
|
@ -216,6 +220,7 @@ class Config(object):
|
||||||
self.dashboards = OrderedDict()
|
self.dashboards = OrderedDict()
|
||||||
for d in self.config.get('dashboards', []):
|
for d in self.config.get('dashboards', []):
|
||||||
self.dashboards[d['key']] = d
|
self.dashboards[d['key']] = d
|
||||||
|
self.dashboards[d['key']]
|
||||||
|
|
||||||
self.reviewkeys = OrderedDict()
|
self.reviewkeys = OrderedDict()
|
||||||
for k in self.config.get('reviewkeys', []):
|
for k in self.config.get('reviewkeys', []):
|
||||||
|
|
|
@ -854,12 +854,14 @@ class DatabaseSession(object):
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def getChanges(self, query, unreviewed=False, sort_by='number'):
|
def getChanges(self, query, unreviewed=False, sort_by='number'):
|
||||||
self.database.log.debug("Search query: %s" % query)
|
self.database.log.debug("Search query: %s sort: %s" % (query, sort_by))
|
||||||
q = self.session().query(Change).filter(self.search.parse(query))
|
q = self.session().query(Change).filter(self.search.parse(query))
|
||||||
if unreviewed:
|
if unreviewed:
|
||||||
q = q.filter(change_table.c.hidden==False, change_table.c.reviewed==False)
|
q = q.filter(change_table.c.hidden==False, change_table.c.reviewed==False)
|
||||||
if sort_by == 'updated':
|
if sort_by == 'updated':
|
||||||
q = q.order_by(change_table.c.updated)
|
q = q.order_by(change_table.c.updated)
|
||||||
|
elif sort_by == 'last-seen':
|
||||||
|
q = q.order_by(change_table.c.last_seen)
|
||||||
else:
|
else:
|
||||||
q = q.order_by(change_table.c.number)
|
q = q.order_by(change_table.c.number)
|
||||||
self.database.log.debug("Search SQL: %s" % q)
|
self.database.log.debug("Search SQL: %s" % q)
|
||||||
|
|
|
@ -199,7 +199,7 @@ class ChangeListView(urwid.WidgetWrap):
|
||||||
]
|
]
|
||||||
|
|
||||||
def __init__(self, app, query, query_desc=None, project_key=None,
|
def __init__(self, app, query, query_desc=None, project_key=None,
|
||||||
unreviewed=False):
|
unreviewed=False, sort_by=None, reverse=None):
|
||||||
super(ChangeListView, self).__init__(urwid.Pile([]))
|
super(ChangeListView, self).__init__(urwid.Pile([]))
|
||||||
self.log = logging.getLogger('gertty.view.change_list')
|
self.log = logging.getLogger('gertty.view.change_list')
|
||||||
self.app = app
|
self.app = app
|
||||||
|
@ -212,8 +212,11 @@ class ChangeListView(urwid.WidgetWrap):
|
||||||
self.project_key = project_key
|
self.project_key = project_key
|
||||||
if project_key is not None:
|
if project_key is not None:
|
||||||
self.display_project = False
|
self.display_project = False
|
||||||
self.sort_by = app.config.change_list_options['sort-by']
|
self.sort_by = sort_by or app.config.change_list_options['sort-by']
|
||||||
self.reverse = app.config.change_list_options['reverse']
|
if reverse is not None:
|
||||||
|
self.reverse = reverse
|
||||||
|
else:
|
||||||
|
self.reverse = app.config.change_list_options['reverse']
|
||||||
self.header = ChangeListHeader(self.display_project, self.display_owner,
|
self.header = ChangeListHeader(self.display_project, self.display_owner,
|
||||||
self.display_updated)
|
self.display_updated)
|
||||||
self.categories = []
|
self.categories = []
|
||||||
|
|
Loading…
Reference in New Issue