Module: check_mk
Branch: master
Commit: 1a3b6ec5711a55cf1d9ac17012c1cee2f6a172cb
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=1a3b6ec5711a55…
Author: Sven Panne <sp(a)mathias-kettner.de>
Date: Fri Dec 21 14:11:44 2018 +0100
Separation of concerns: Make grouping and limiting of werks explicit.
Apart from making the code much more readable and shorter, this removes yet
another table.begin()/end() pair with table.open_table(). Only 1 to go...
Change-Id: I3816e72e1bcb5d4aaf1b831fe5823be5b970780e
---
cmk/gui/werks.py | 64 +++++++++++++++++++++++-------------------------------
cmk/utils/werks.py | 30 ++++++++++---------------
2 files changed, 38 insertions(+), 56 deletions(-)
diff --git a/cmk/gui/werks.py b/cmk/gui/werks.py
index 5bb807c..4e157e2 100644
--- a/cmk/gui/werks.py
+++ b/cmk/gui/werks.py
@@ -27,6 +27,7 @@
# Functions for parsing Werks and showing the users a browsable change
# log
+import itertools
import os
import re
import time
@@ -333,56 +334,45 @@ def render_werks_table():
werk_table_options = _default_werk_table_options()
else:
werk_table_options = _render_werk_table_options()
-
- current_group, number_of_groups, number_of_werks = False, 0, 0
+ translator = cmk.utils.werks.WerkTranslator()
+ number_of_werks = 0
sorter, grouper = _SORT_AND_GROUP[werk_table_options["grouping"]]
werklist = sorter(werk #
for werk in g_werks.values()
if werk_matches_options(werk, werk_table_options))
-
- translator = cmk.utils.werks.WerkTranslator()
- for werk in werklist:
- group = grouper(werk)
- if group != current_group:
- if number_of_groups >= werk_table_options["group_limit"]:
- break
- number_of_groups += 1
-
- if current_group != False:
- table.end()
- table.begin(
- title=group,
+ groups = itertools.groupby(werklist, key=grouper)
+ for group_title, werks in itertools.islice(groups,
werk_table_options["group_limit"]):
+ with table.open_table(
+ title=group_title,
limit=None,
searchable=False,
sortable=False,
css="werks",
- update_page_head=False)
- current_group = group
-
- number_of_werks += 1
-
- table.row()
- table.cell(_("ID"), render_werk_id(werk, with_link=True),
css="number narrow")
- table.cell(_("Version"), werk["version"], css="number
narrow")
- table.cell(_("Date"), render_werk_date(werk), css="number
narrow")
- table.cell(
- _("Class"), translator.class_of(werk), css="werkclass
werkclass%s" % werk["class"])
- table.cell(
- _("Level"), translator.level_of(werk), css="werklevel
werklevel%d" % werk["level"])
- table.cell(
- _("Compatibility"),
- translator.compatibility_of(werk),
- css="werkcomp werkcomp%s" % werk["compatible"])
- table.cell(_("Component"), translator.component_of(werk),
css="nowrap")
- table.cell(_("Title"), render_werk_title(werk))
-
- if current_group != False:
- table.end()
+ update_page_head=False):
+ for werk in werks:
+ number_of_werks += 1
+ render_werks_table_row(translator, werk)
+ if number_of_werks:
table.update_headinfo(number_of_werks)
else:
html.h3(_("No matching Werks found."))
+def render_werks_table_row(translator, werk):
+ table.row()
+ table.cell(_("ID"), render_werk_id(werk, with_link=True), css="number
narrow")
+ table.cell(_("Version"), werk["version"], css="number
narrow")
+ table.cell(_("Date"), render_werk_date(werk), css="number
narrow")
+ table.cell(_("Class"), translator.class_of(werk), css="werkclass
werkclass%s" % werk["class"])
+ table.cell(_("Level"), translator.level_of(werk), css="werklevel
werklevel%d" % werk["level"])
+ table.cell(
+ _("Compatibility"),
+ translator.compatibility_of(werk),
+ css="werkcomp werkcomp%s" % werk["compatible"])
+ table.cell(_("Component"), translator.component_of(werk),
css="nowrap")
+ table.cell(_("Title"), render_werk_title(werk))
+
+
def werk_matches_options(werk, werk_table_options):
if not ((not werk_table_options["id"] or werk["id"] ==
int(werk_table_options["id"])) and \
werk["level"] in werk_table_options["levels"] and \
diff --git a/cmk/utils/werks.py b/cmk/utils/werks.py
index 991cf36..1eccb34 100644
--- a/cmk/utils/werks.py
+++ b/cmk/utils/werks.py
@@ -208,26 +208,18 @@ def write_precompiled_werks(path, werks):
# Writhe the given werks to a file object. This is used for creating a textual
# change log for the released versions and the announcement mails
-def write_as_text(werks, f, write_version=True):
+def write_as_text(werks, f):
translator = WerkTranslator()
- version, component = None, None
- for werk in sort_by_version_and_component(werks.values()):
- if version != werk["version"]:
- if version is not None:
- f.write("\n\n")
-
- version, component = werk["version"], None
-
- if write_version:
- f.write("%s:\n" % werk["version"])
-
- if component != werk["component"]:
- if component is not None:
- f.write("\n")
- component = werk["component"]
- f.write(" %s:\n" %
translator.component_of(werk).encode("utf-8"))
-
- write_werk_as_text(f, werk)
+ werklist = sort_by_version_and_component(werks.values())
+ for version, version_group in itertools.groupby(werklist, key=lambda w:
w["version"]):
+ f.write("%s:\n" % version)
+ for component, component_group in itertools.groupby(
+ version_group, key=translator.component_of):
+ f.write(" %s:\n" % component.encode("utf-8"))
+ for werk in component_group:
+ write_werk_as_text(f, werk)
+ f.write("\n")
+ f.write("\n")
def write_werk_as_text(f, werk):