Module: check_mk
Branch: master
Commit: f2abfba0436db71714336a277fb75a1a4287c50a
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=f2abfba0436db7…
Author: Lars Michelsen <lm(a)mathias-kettner.de>
Date: Mon Mar 4 18:06:34 2019 +0100
Move sorter selection logic to View()
Change-Id: I132bbc875c2f6eadf61fa2f1b75d696f8a7c4182
---
cmk/gui/views.py | 52 ++++++++++++++++++++--------------------
tests/unit/cmk/gui/test_views.py | 6 ++---
2 files changed, 28 insertions(+), 30 deletions(-)
diff --git a/cmk/gui/views.py b/cmk/gui/views.py
index 44fade4..fb7efa4 100644
--- a/cmk/gui/views.py
+++ b/cmk/gui/views.py
@@ -228,6 +228,25 @@ class View(object):
"because the datasource does not exist.") % (self.name,
self.datasource))
@property
+ def sorters(self):
+ """Returns the list of effective sorters to be used to sort the
rows of this view"""
+ return self._get_sorter_entries(
+ self.user_sorters if self.user_sorters else self.spec["sorters"])
+
+ def _get_sorter_entries(self, sorter_list):
+ sorters = []
+ for entry in sorter_list:
+ if entry[0] not in sorter_registry:
+ continue # Skip removed sorters
+
+ # e.g. service description
+ join_key = entry[2] if len(entry) > 2 else None
+
+ sorters.append(
+ SorterEntry(sorter=sorter_registry[entry[0]](), negate=entry[1],
join_key=join_key))
+ return sorters
+
+ @property
def row_limit(self):
if self.datasource.ignore_limit:
return None
@@ -257,6 +276,7 @@ class View(object):
The user may click on the headers of tables to change the default view sorting.
In the
moment the user overrides the sorting configured for the view in
self.spec"""
+ # TODO: Only process in case the view is user sortable
return self._user_sorters
@user_sorters.setter
@@ -1170,8 +1190,11 @@ def page_view():
show_view(view, view_renderer)
-# Display view with real data. This is *the* function everying
-# is about.
+# Display view with real data
+# TODO: Disentangle logic and presentation like this:
+# - Move logic stuff to View class
+# - Move rendering specific stuff to the fitting ViewRenderer
+# - Find the right place for the availability / SLA hacks here
def show_view(view, view_renderer, only_count=False):
display_options.load_from_html()
@@ -1261,7 +1284,7 @@ def show_view(view, view_renderer, only_count=False):
if only_count:
sorters = []
else:
- sorters = _get_sorters(view)
+ sorters = view.sorters
# Prepare cells of the view
# Group cells: Are displayed as titles of grouped rows
@@ -1369,29 +1392,6 @@ def show_view(view, view_renderer, only_count=False):
SorterEntry = namedtuple("SorterEntry", ["sorter",
"negate", "join_key"])
-def _get_sorters(view):
- if view.user_sorters:
- sorter_list = view.user_sorters
- else:
- sorter_list = view.spec["sorters"]
-
- return _get_sorter_entries(sorter_list)
-
-
-def _get_sorter_entries(sorter_list):
- sorters = []
- for entry in sorter_list:
- if entry[0] not in sorter_registry:
- continue # Skip removed sorters
-
- # e.g. service description
- join_key = entry[2] if len(entry) > 2 else None
-
- sorters.append(
- SorterEntry(sorter=sorter_registry[entry[0]](), negate=entry[1],
join_key=join_key))
- return sorters
-
-
def get_join_cells(cell_list):
return [x for x in cell_list if isinstance(x, JoinCell)]
diff --git a/tests/unit/cmk/gui/test_views.py b/tests/unit/cmk/gui/test_views.py
index 6c3f5ef..e5d6885 100644
--- a/tests/unit/cmk/gui/test_views.py
+++ b/tests/unit/cmk/gui/test_views.py
@@ -5726,11 +5726,10 @@ def test_get_needed_regular_columns(register_builtin_html,
load_view_plugins):
view = cmk.gui.views.View(view_name, view_spec)
- sorters = cmk.gui.views._get_sorters(view)
group_cells = cmk.gui.views.get_group_cells(view)
cells = cmk.gui.views.get_cells(view)
- columns = cmk.gui.views._get_needed_regular_columns(group_cells + cells, sorters,
view.datasource)
+ columns = cmk.gui.views._get_needed_regular_columns(group_cells + cells,
view.sorters, view.datasource)
assert sorted(columns) == sorted([
'host_scheduled_downtime_depth',
'host_in_check_period',
@@ -5777,11 +5776,10 @@ def test_get_needed_join_columns(register_builtin_html,
load_view_plugins):
view = cmk.gui.views.View(view_name, view_spec)
- sorters = cmk.gui.views._get_sorters(view)
cells = cmk.gui.views.get_cells(view)
join_cells = cmk.gui.views.get_join_cells(cells)
- columns = cmk.gui.views._get_needed_join_columns(join_cells, sorters)
+ columns = cmk.gui.views._get_needed_join_columns(join_cells, view.sorters)
assert sorted(columns) == sorted([
'host_name',
'service_description',