lists.checkmk.com
Sign In
Sign Up
Sign In
Sign Up
Manage this list
×
Keyboard Shortcuts
Thread View
j
: Next unread message
k
: Previous unread message
j a
: Jump to all threads
j l
: Jump to MailingList overview
2024
June
May
April
March
February
January
2023
December
November
October
September
August
July
June
May
April
March
February
January
2022
December
November
October
September
August
July
June
May
April
March
February
January
2021
December
November
October
September
August
July
June
May
April
March
February
January
2020
December
November
October
September
August
July
June
May
April
March
February
January
2019
December
November
October
September
August
July
June
May
April
March
February
January
2018
December
November
October
September
August
July
June
May
April
March
February
January
2017
December
November
October
September
August
July
June
May
April
March
February
January
2016
December
November
October
September
August
July
June
May
April
March
February
January
2015
December
November
October
September
August
July
June
May
April
March
February
January
2014
December
November
October
September
August
July
June
May
April
March
February
January
2013
December
November
October
September
August
July
June
May
April
March
February
January
2012
December
November
October
September
August
July
June
May
April
March
February
January
2011
December
November
October
September
August
July
June
May
April
March
February
January
2010
December
November
October
List overview
Download
Checkmk git commits
January 2019
----- 2024 -----
June 2024
May 2024
April 2024
March 2024
February 2024
January 2024
----- 2023 -----
December 2023
November 2023
October 2023
September 2023
August 2023
July 2023
June 2023
May 2023
April 2023
March 2023
February 2023
January 2023
----- 2022 -----
December 2022
November 2022
October 2022
September 2022
August 2022
July 2022
June 2022
May 2022
April 2022
March 2022
February 2022
January 2022
----- 2021 -----
December 2021
November 2021
October 2021
September 2021
August 2021
July 2021
June 2021
May 2021
April 2021
March 2021
February 2021
January 2021
----- 2020 -----
December 2020
November 2020
October 2020
September 2020
August 2020
July 2020
June 2020
May 2020
April 2020
March 2020
February 2020
January 2020
----- 2019 -----
December 2019
November 2019
October 2019
September 2019
August 2019
July 2019
June 2019
May 2019
April 2019
March 2019
February 2019
January 2019
----- 2018 -----
December 2018
November 2018
October 2018
September 2018
August 2018
July 2018
June 2018
May 2018
April 2018
March 2018
February 2018
January 2018
----- 2017 -----
December 2017
November 2017
October 2017
September 2017
August 2017
July 2017
June 2017
May 2017
April 2017
March 2017
February 2017
January 2017
----- 2016 -----
December 2016
November 2016
October 2016
September 2016
August 2016
July 2016
June 2016
May 2016
April 2016
March 2016
February 2016
January 2016
----- 2015 -----
December 2015
November 2015
October 2015
September 2015
August 2015
July 2015
June 2015
May 2015
April 2015
March 2015
February 2015
January 2015
----- 2014 -----
December 2014
November 2014
October 2014
September 2014
August 2014
July 2014
June 2014
May 2014
April 2014
March 2014
February 2014
January 2014
----- 2013 -----
December 2013
November 2013
October 2013
September 2013
August 2013
July 2013
June 2013
May 2013
April 2013
March 2013
February 2013
January 2013
----- 2012 -----
December 2012
November 2012
October 2012
September 2012
August 2012
July 2012
June 2012
May 2012
April 2012
March 2012
February 2012
January 2012
----- 2011 -----
December 2011
November 2011
October 2011
September 2011
August 2011
July 2011
June 2011
May 2011
April 2011
March 2011
February 2011
January 2011
----- 2010 -----
December 2010
November 2010
October 2010
checkmk-commits@lists.checkmk.com
15 participants
490 discussions
Start a n
N
ew thread
Simplified headinfo handling.
by Sven Panne
Module: check_mk Branch: master Commit: cd9418aff42e6c17766ef049de4117bff714d861 URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=cd9418aff42e6c…
Author: Sven Panne <sp(a)mathias-kettner.de> Date: Thu Jan 3 10:28:15 2019 +0100 Simplified headinfo handling. Change-Id: I8405e3dadd7d79dbfdfb2c9743906d39f34717ba --- cmk/gui/table.py | 10 ++-------- cmk/gui/werks.py | 12 +++--------- 2 files changed, 5 insertions(+), 17 deletions(-) diff --git a/cmk/gui/table.py b/cmk/gui/table.py index 780359b..fcc9b2a 100644 --- a/cmk/gui/table.py +++ b/cmk/gui/table.py @@ -45,11 +45,6 @@ def open_table(table_id=None, title=None, **kwargs): table.end() -def update_headinfo(num_rows): - headinfo = _("1 row") if num_rows == 1 else _("%d rows") % num_rows - html.javascript("cmk.utils.update_header_info(%s);" % json.dumps(headinfo)) - - #. # .--Table---------------------------------------------------------------. # | _____ _ _ | @@ -100,7 +95,6 @@ class Table(object): "searchable": kwargs.get("searchable", True), "sortable": kwargs.get("sortable", True), "foldable": kwargs.get("foldable", False), - "update_page_head": kwargs.get("update_page_head", True), "output_format": kwargs.get("output_format", "html"), # possible: html, csv, fetch } @@ -288,8 +282,8 @@ class Table(object): return rows, actions_enabled, actions_visible, search_term, user_opts def _write_table(self, rows, actions_enabled, actions_visible, search_term): - if self.options["update_page_head"]: - update_headinfo(len(rows)) + headinfo = _("1 row") if len(rows) == 1 else _("%d rows") % len(rows) + html.javascript("cmk.utils.update_header_info(%s);" % json.dumps(headinfo)) table_id = self.id num_cols = len(self.headers) diff --git a/cmk/gui/werks.py b/cmk/gui/werks.py index e52ab38..c2ddb1e 100644 --- a/cmk/gui/werks.py +++ b/cmk/gui/werks.py @@ -343,18 +343,12 @@ def render_werks_table(): groups = itertools.groupby(werklist, key=grouper) for group_title, werks in itertools.islice(groups, werk_table_options["group_limit"]): with cmk.gui.table.open_table( - title=group_title, - limit=None, - searchable=False, - sortable=False, - css="werks", - update_page_head=False) as table: + title=group_title, limit=None, searchable=False, sortable=False, + css="werks") as table: for werk in werks: number_of_werks += 1 render_werks_table_row(table, translator, werk) - if number_of_werks: - cmk.gui.table.update_headinfo(number_of_werks) - else: + if not number_of_werks: html.h3(_("No matching Werks found."))
5 years, 5 months
1
0
0
0
Nuked ugly global table stack.
by Sven Panne
Module: check_mk Branch: master Commit: 38e45a4d81ba95d3f38633ed8e96d9b1df6d04e8 URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=38e45a4d81ba95…
Author: Sven Panne <sp(a)mathias-kettner.de> Date: Thu Jan 3 10:13:12 2019 +0100 Nuked ugly global table stack. Change-Id: I55b8dbdf71f4dc2305d9c36d8c2b79e2bf999339 --- cmk/gui/table.py | 28 ++++------------------------ 1 file changed, 4 insertions(+), 24 deletions(-) diff --git a/cmk/gui/table.py b/cmk/gui/table.py index 90e80bb..780359b 100644 --- a/cmk/gui/table.py +++ b/cmk/gui/table.py @@ -35,34 +35,14 @@ from cmk.gui.i18n import _ from cmk.gui.globals import html from cmk.gui.htmllib import HTML -tables = [] - @contextmanager def open_table(table_id=None, title=None, **kwargs): - tab = Table(table_id, title, **kwargs) - tables.append(tab) + table = Table(table_id, title, **kwargs) try: - yield tab + yield table finally: - tables.pop().end() - - -def row(*posargs, **kwargs): - tables[-1].row(*posargs, **kwargs) - - -def text_cell(*posargs, **kwargs): - tables[-1].text_cell(*posargs, **kwargs) - - -def cell(*posargs, **kwargs): - tables[-1].cell(*posargs, **kwargs) - - -# Intermediate title, shown as soon as there is a following row. -def groupheader(title): - tables[-1].groupheader(title) + table.end() def update_headinfo(num_rows): @@ -138,7 +118,7 @@ class Table(object): def text_cell(self, *args, **kwargs): kwargs["escape_text"] = True - cell(*args, **kwargs) + self.cell(*args, **kwargs) def cell(self, *posargs, **kwargs): self.finish_previous()
5 years, 5 months
1
0
0
0
cmk.gui.table.open_table returns a resource now, part 3.
by Sven Panne
Module: check_mk Branch: master Commit: 5dce84143c458d3ac2c62faa58ddafc59b286fea URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=5dce84143c458d…
Author: Sven Panne <sp(a)mathias-kettner.de> Date: Thu Jan 3 09:06:02 2019 +0100 cmk.gui.table.open_table returns a resource now, part 3. Change-Id: Ic2cec047d4f21b8046756b540ebf6deed5eb17ee --- cmk/gui/pagetypes.py | 4 +-- cmk/gui/plugins/wato/utils/simple_modes.py | 16 +++++------ cmk/gui/visuals.py | 2 +- cmk/gui/wato/pages/folders.py | 12 ++++---- cmk/gui/wato/pages/groups.py | 16 +++++------ cmk/gui/wato/pages/password_store.py | 9 +++--- cmk/gui/wato/pages/services.py | 43 +++++++++++++++-------------- cmk/gui/wato/pages/sites.py | 44 +++++++++++++++--------------- 8 files changed, 74 insertions(+), 72 deletions(-) Diff:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commitdiff;h=5dce84143c…
5 years, 5 months
1
0
0
0
cmk.gui.table.open_table returns a resource now, part 2.
by Sven Panne
Module: check_mk Branch: master Commit: 06d3fac4481ca99a025e1e2d91bbf7dd0d3813ad URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=06d3fac4481ca9…
Author: Sven Panne <sp(a)mathias-kettner.de> Date: Thu Jan 3 08:00:56 2019 +0100 cmk.gui.table.open_table returns a resource now, part 2. Change-Id: I6af8150464508cc7fa99a395e496c2af76034f4f --- cmk/gui/logwatch.py | 4 ++-- cmk/gui/pagetypes.py | 4 ++-- cmk/gui/plugins/dashboard/notify_users.py | 5 +++-- cmk/gui/plugins/views/availability.py | 18 ++++++++------- cmk/gui/plugins/views/layouts.py | 4 ++-- cmk/gui/plugins/wato/utils/simple_modes.py | 6 ++--- cmk/gui/visuals.py | 4 ++-- cmk/gui/wato/__init__.py | 2 +- cmk/gui/wato/mkeventd.py | 9 ++++---- cmk/gui/wato/pages/activate_changes.py | 9 ++++---- cmk/gui/wato/pages/analyze_configuration.py | 10 ++++----- cmk/gui/wato/pages/audit_log.py | 7 +++--- cmk/gui/wato/pages/bulk_import.py | 6 ++--- cmk/gui/wato/pages/check_catalog.py | 5 +++-- cmk/gui/wato/pages/custom_attributes.py | 4 ++-- cmk/gui/wato/pages/folders.py | 10 ++++----- cmk/gui/wato/pages/groups.py | 12 +++++----- cmk/gui/wato/pages/host_tags.py | 10 ++++----- cmk/gui/wato/pages/icons.py | 4 ++-- cmk/gui/wato/pages/ldap.py | 6 ++--- cmk/gui/wato/pages/notifications.py | 14 +++++++----- cmk/gui/wato/pages/password_store.py | 8 +++---- cmk/gui/wato/pages/pattern_editor.py | 5 +++-- cmk/gui/wato/pages/roles.py | 6 ++--- cmk/gui/wato/pages/services.py | 27 ++++++++++++----------- cmk/gui/wato/pages/sites.py | 34 ++++++++++++++--------------- cmk/gui/wato/pages/timeperiods.py | 5 +++-- cmk/gui/wato/pages/users.py | 5 +++-- 28 files changed, 128 insertions(+), 115 deletions(-) Diff:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commitdiff;h=06d3fac448…
5 years, 5 months
1
0
0
0
cmk.gui.table.open_table returns a resource now, part 1.
by Sven Panne
Module: check_mk Branch: master Commit: 59f1f4a4ebeb7e578464f79cf4ee7d55a655dd84 URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=59f1f4a4ebeb7e…
Author: Sven Panne <sp(a)mathias-kettner.de> Date: Wed Jan 2 15:57:50 2019 +0100 cmk.gui.table.open_table returns a resource now, part 1. This enables us to remove some ugly global state in the future. More to come... Change-Id: I85392fa9542553ed9d7aec7343effd670ec5d3af --- cmk/gui/backup.py | 8 ++++---- cmk/gui/key_mgmt.py | 5 +++-- cmk/gui/notifications.py | 4 ++-- cmk/gui/plugins/wato/bi.py | 10 ++++----- cmk/gui/table.py | 5 +++-- cmk/gui/wato/pages/rulesets.py | 14 ++++++------- cmk/gui/werks.py | 12 +++++------ tests/unit/cmk/gui/test_table.py | 44 ++++++++++++++++++++-------------------- 8 files changed, 52 insertions(+), 50 deletions(-) Diff:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commitdiff;h=59f1f4a4eb…
5 years, 5 months
1
0
0
0
Nuked dead/useless code.
by Sven Panne
Module: check_mk Branch: master Commit: c6fdcb89d31caa1e8b22d2878c2f12f7a4bf6822 URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=c6fdcb89d31caa…
Author: Sven Panne <sp(a)mathias-kettner.de> Date: Wed Jan 2 15:47:57 2019 +0100 Nuked dead/useless code. Change-Id: I516ec92918d537a98edc31b7f3a5f238edc2502f --- cmk/gui/table.py | 19 ++----------------- 1 file changed, 2 insertions(+), 17 deletions(-) diff --git a/cmk/gui/table.py b/cmk/gui/table.py index e2c6ac4..8d5d677 100644 --- a/cmk/gui/table.py +++ b/cmk/gui/table.py @@ -40,45 +40,30 @@ tables = [] @contextmanager def open_table(table_id=None, title=None, **kwargs): - begin(table_id, title, **kwargs) + tables.append(Table(table_id, title, **kwargs)) try: yield finally: - end() - - -def begin(table_id=None, title=None, **kwargs): - # type: (Optional[bytes], Optional[Text], **Text) -> None - tables.append(Table(table_id, title, **kwargs)) + tables.pop().end() def row(*posargs, **kwargs): - assert tables tables[-1].row(*posargs, **kwargs) def text_cell(*posargs, **kwargs): - assert tables tables[-1].text_cell(*posargs, **kwargs) def cell(*posargs, **kwargs): - assert tables tables[-1].cell(*posargs, **kwargs) # Intermediate title, shown as soon as there is a following row. def groupheader(title): - assert tables tables[-1].groupheader(title) -def end(): - assert tables - table = tables.pop() - table.end() - - def update_headinfo(num_rows): headinfo = _("1 row") if num_rows == 1 else _("%d rows") % num_rows html.javascript("cmk.utils.update_header_info(%s);" % json.dumps(headinfo))
5 years, 5 months
1
0
0
0
Make grouping and filtering of rules explicit.
by Sven Panne
Module: check_mk Branch: master Commit: a2eb539330da78f07926f59a7b4c5f3f82a9359b URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=a2eb539330da78…
Author: Sven Panne <sp(a)mathias-kettner.de> Date: Wed Jan 2 12:20:10 2019 +0100 Make grouping and filtering of rules explicit. This makes things shorter and easier to understand. And: It nukes the last naked table.begin/end calls! :-) Change-Id: Icf89d50401f0ec1ac1ac3b5990741dccd9d3524d --- cmk/gui/wato/pages/rulesets.py | 167 +++++++++++++++-------------------------- 1 file changed, 61 insertions(+), 106 deletions(-) diff --git a/cmk/gui/wato/pages/rulesets.py b/cmk/gui/wato/pages/rulesets.py index a6b5ed1..f075fd3 100644 --- a/cmk/gui/wato/pages/rulesets.py +++ b/cmk/gui/wato/pages/rulesets.py @@ -26,6 +26,7 @@ """WATO's awesome rule editor: Lets the user edit rule based parameters""" import abc +import itertools import pprint import re @@ -591,14 +592,8 @@ class ModeEditRuleset(WatoMode): ruleset = rulesets.get(self._name) html.help(ruleset.help()) - self._explain_match_type(ruleset.match_type()) - - if ruleset.is_empty(): - html.div(_("There are no rules defined in this set."), class_="info") - else: - self._rule_listing(ruleset) - + self._rule_listing(ruleset) self._create_form() def _explain_match_type(self, match_type): @@ -617,115 +612,42 @@ class ModeEditRuleset(WatoMode): else: html.write_text(_("Unknown match type: %s") % match_type) - # TODO: Clean this function up! def _rule_listing(self, ruleset): - alread_matched = False - match_keys = set([]) # in case if match = "dict" - last_folder = None - + rules = ruleset.get_rules() + if not rules: + html.div(_("There are no rules defined in this set."), class_="info") + return + match_state = {"matched": False, "keys": set()} search_options = ModeRuleSearch().search_options - - skip_this_folder = False - for folder, rulenr, rule in ruleset.get_rules(): - if folder != last_folder: - # Only show folders related to the currently viewed folder hierarchy - if folder.is_transitive_parent_of(watolib.Folder.current()) \ - or watolib.Folder.current().is_transitive_parent_of(folder): - skip_this_folder = False - else: - skip_this_folder = True - continue - - if last_folder is not None: - table.end() - - last_folder = folder - - alias_path = folder.alias_path(show_main=False) - table_id = "rules_%s_%s" % (self._name, folder.ident()) - table.begin( - table_id, - title="%s %s (%d)" % (_("Rules in folder"), alias_path, + cur = watolib.Folder.current() + groups = ((folder, folder_rules) \ + for folder, folder_rules in itertools.groupby(rules, key=lambda rule: rule[0]) \ + if folder.is_transitive_parent_of(cur) or cur.is_transitive_parent_of(folder)) + for folder, folder_rules in groups: + with table.open_table( + "rules_%s_%s" % (self._name, folder.ident()), + title="%s %s (%d)" % (_("Rules in folder"), folder.alias_path(show_main=False), ruleset.num_rules_in_folder(folder)), css="ruleset", searchable=False, sortable=False, limit=None, - foldable=True) - else: - if skip_this_folder: - continue - - table.row(css=self._css_for_rule(search_options, ruleset, rule)) - self._set_focus(rulenr, rule) - - # Rule matching - if self._hostname: - table.cell(_("Ma.")) - if rule.is_disabled(): - reasons = [_("This rule is disabled")] - else: - reasons = list( - rule.get_mismatch_reasons(watolib.Folder.current(), self._hostname, - self._item)) - - matches_rule = not reasons - - # Handle case where dict is constructed from rules - if matches_rule and ruleset.match_type() == "dict": - if not rule.value: - title = _("This rule matches, but does not define any parameters.") - img = 'imatch' - else: - new_keys = set(rule.value.keys()) # pylint: disable=no-member - if match_keys.isdisjoint(new_keys): - title = _("This rule matches and defines new parameters.") - img = 'match' - elif new_keys.issubset(match_keys): - title = _( - "This rule matches, but all of its parameters are overridden by previous rules." - ) - img = 'imatch' - else: - title = _( - "This rule matches, but some of its parameters are overridden by previous rules." - ) - img = 'pmatch' - match_keys.update(new_keys) - - elif matches_rule and (not alread_matched or ruleset.match_type() == "all"): - title = _("This rule matches for the host '%s'") % self._hostname - if ruleset.item_type(): - title += _(" and the %s '%s'.") % (ruleset.item_name(), self._item) - else: - title += "." - img = 'match' - alread_matched = True - elif matches_rule: - title = _("This rule matches, but is overridden by a previous rule.") - img = 'imatch' - alread_matched = True - else: - title = _("This rule does not match: %s") % " ".join(reasons) - img = 'nmatch' - html.icon(title, "rule%s" % img, middle=True) - - self._show_rule_icons(folder, rulenr, rule) - self._rule_cells(rule) - - if last_folder is not None: - table.end() - - def _css_for_rule(self, search_options, ruleset, rule): + foldable=True): + for _folder, rulenr, rule in folder_rules: + table.row(css=self._css_for_rule(search_options, rule)) + self._set_focus(rulenr, rule) + self._show_rule_icons(match_state, folder, rulenr, rule) + self._rule_cells(rule) + + @staticmethod + def _css_for_rule(search_options, rule): css = [] if rule.is_disabled(): css.append("disabled") - - if ruleset.has_rule_search_options(search_options) \ - and rule.matches_search(search_options) \ - and ("fulltext" not in search_options or not ruleset.matches_fulltext_search(search_options)): + if rule.ruleset.has_rule_search_options(search_options) and \ + rule.matches_search(search_options) and \ + ("fulltext" not in search_options or not rule.ruleset.matches_fulltext_search(search_options)): css.append("matches_search") - return " ".join(css) if css else None def _set_focus(self, rulenr, rule): @@ -734,7 +656,12 @@ class ModeEditRuleset(WatoMode): self._just_edited_rule.index() == rulenr: html.focus_here() - def _show_rule_icons(self, folder, rulenr, rule): + def _show_rule_icons(self, match_state, folder, rulenr, rule): + if self._hostname: + table.cell(_("Ma.")) + title, img = self._match(match_state, rule) + html.icon(title, "rule%s" % img, middle=True) + table.cell("", css="buttons") if rule.is_disabled(): html.icon(_("This rule is currently disabled and will not be applied"), "disabled") @@ -767,6 +694,34 @@ class ModeEditRuleset(WatoMode): html.element_dragger_url("tr", base_url=self._action_url("move_to", folder, rulenr)) self._rule_button("delete", _("Delete this rule"), folder, rulenr) + def _match(self, match_state, rule): + reasons = [_("This rule is disabled")] if rule.is_disabled() else \ + list(rule.get_mismatch_reasons(watolib.Folder.current(), self._hostname, self._item)) + if reasons: + return _("This rule does not match: %s") % " ".join(reasons), 'nmatch' + ruleset = rule.ruleset + if ruleset.match_type() == "dict": + new_keys = set(rule.value.iterkeys()) + already_existing = match_state["keys"] & new_keys + match_state["keys"] |= new_keys + if not new_keys: + return _("This rule matches, but does not define any parameters."), 'imatch' + if not already_existing: + return _("This rule matches and defines new parameters."), 'match' + if already_existing == new_keys: + return _( + "This rule matches, but all of its parameters are overridden by previous rules." + ), 'imatch' + return _( + "This rule matches, but some of its parameters are overridden by previous rules." + ), 'pmatch' + if match_state["matched"] and ruleset.match_type() != "all": + return _("This rule matches, but is overridden by a previous rule."), 'imatch' + match_state["matched"] = True + return (_("This rule matches for the host '%s'") % self._hostname) + \ + (_(" and the %s '%s'.") % (ruleset.item_name(), self._item) if ruleset.item_type() else "."), \ + 'match' + def _action_url(self, action, folder, rulenr): vars_ = [ ("mode", html.var('mode', 'edit_ruleset')),
5 years, 5 months
1
0
0
0
Tame the _rule_listing monster a bit by extracting a few helper functions.
by Sven Panne
Module: check_mk Branch: master Commit: f9560ff385f796a2e62dcd1b9c8ed1d32764d859 URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=f9560ff385f796…
Author: Sven Panne <sp(a)mathias-kettner.de> Date: Wed Jan 2 11:29:19 2019 +0100 Tame the _rule_listing monster a bit by extracting a few helper functions. Change-Id: I899e728c42c2ae7d181a56152a78a5139db56906 --- cmk/gui/wato/pages/rulesets.py | 101 ++++++++++++++++++++++------------------- 1 file changed, 54 insertions(+), 47 deletions(-) diff --git a/cmk/gui/wato/pages/rulesets.py b/cmk/gui/wato/pages/rulesets.py index 17aac69..a6b5ed1 100644 --- a/cmk/gui/wato/pages/rulesets.py +++ b/cmk/gui/wato/pages/rulesets.py @@ -656,20 +656,8 @@ class ModeEditRuleset(WatoMode): if skip_this_folder: continue - css = [] - if rule.is_disabled(): - css.append("disabled") - - if ruleset.has_rule_search_options(search_options) \ - and rule.matches_search(search_options) \ - and ("fulltext" not in search_options or not ruleset.matches_fulltext_search(search_options)): - css.append("matches_search") - - table.row(css=" ".join(css) if css else None) - - if self._just_edited_rule and self._just_edited_rule.folder == rule.folder and self._just_edited_rule.index( - ) == rulenr: - html.focus_here() + table.row(css=self._css_for_rule(search_options, ruleset, rule)) + self._set_focus(rulenr, rule) # Rule matching if self._hostname: @@ -722,44 +710,63 @@ class ModeEditRuleset(WatoMode): img = 'nmatch' html.icon(title, "rule%s" % img, middle=True) - # Disabling - table.cell("", css="buttons") - if rule.is_disabled(): - html.icon(_("This rule is currently disabled and will not be applied"), "disabled") - else: - html.empty_icon() - - table.cell(_("Actions"), css="buttons rulebuttons") - edit_url = watolib.folder_preserving_link([ - ("mode", "edit_rule"), - ("ruleset_back_mode", self._back_mode), - ("varname", self._name), - ("rulenr", rulenr), - ("host", self._hostname), - ("item", watolib.mk_repr(self._item)), - ("rule_folder", folder.path()), - ]) - html.icon_button(edit_url, _("Edit this rule"), "edit") - - clone_url = watolib.folder_preserving_link([ - ("mode", "clone_rule"), - ("ruleset_back_mode", self._back_mode), - ("varname", self._name), - ("rulenr", rulenr), - ("host", self._hostname), - ("item", watolib.mk_repr(self._item)), - ("rule_folder", folder.path()), - ]) - html.icon_button(clone_url, _("Create a copy of this rule"), "clone") - - html.element_dragger_url("tr", base_url=self._action_url("move_to", folder, rulenr)) - self._rule_button("delete", _("Delete this rule"), folder, rulenr) - + self._show_rule_icons(folder, rulenr, rule) self._rule_cells(rule) if last_folder is not None: table.end() + def _css_for_rule(self, search_options, ruleset, rule): + css = [] + if rule.is_disabled(): + css.append("disabled") + + if ruleset.has_rule_search_options(search_options) \ + and rule.matches_search(search_options) \ + and ("fulltext" not in search_options or not ruleset.matches_fulltext_search(search_options)): + css.append("matches_search") + + return " ".join(css) if css else None + + def _set_focus(self, rulenr, rule): + if self._just_edited_rule and \ + self._just_edited_rule.folder == rule.folder and \ + self._just_edited_rule.index() == rulenr: + html.focus_here() + + def _show_rule_icons(self, folder, rulenr, rule): + table.cell("", css="buttons") + if rule.is_disabled(): + html.icon(_("This rule is currently disabled and will not be applied"), "disabled") + else: + html.empty_icon() + + table.cell(_("Actions"), css="buttons rulebuttons") + edit_url = watolib.folder_preserving_link([ + ("mode", "edit_rule"), + ("ruleset_back_mode", self._back_mode), + ("varname", self._name), + ("rulenr", rulenr), + ("host", self._hostname), + ("item", watolib.mk_repr(self._item)), + ("rule_folder", folder.path()), + ]) + html.icon_button(edit_url, _("Edit this rule"), "edit") + + clone_url = watolib.folder_preserving_link([ + ("mode", "clone_rule"), + ("ruleset_back_mode", self._back_mode), + ("varname", self._name), + ("rulenr", rulenr), + ("host", self._hostname), + ("item", watolib.mk_repr(self._item)), + ("rule_folder", folder.path()), + ]) + html.icon_button(clone_url, _("Create a copy of this rule"), "clone") + + html.element_dragger_url("tr", base_url=self._action_url("move_to", folder, rulenr)) + self._rule_button("delete", _("Delete this rule"), folder, rulenr) + def _action_url(self, action, folder, rulenr): vars_ = [ ("mode", html.var('mode', 'edit_ruleset')),
5 years, 5 months
1
0
0
0
Put package-lock.json under version control.
by Sven Panne
Module: check_mk Branch: master Commit: 5e09f555f43cc667a0f47054dde76b1cd0529c45 URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=5e09f555f43cc6…
Author: Sven Panne <sp(a)mathias-kettner.de> Date: Wed Jan 2 09:24:14 2019 +0100 Put package-lock.json under version control. Change-Id: I712cd0a18157c9f73748e72ba21e30d36c62ea1c --- package-lock.json | 6016 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 6016 insertions(+) Diff:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commitdiff;h=5e09f555f4…
5 years, 5 months
1
0
0
0
Separation of concerns: Make grouping and limiting of werks explicit.
by Sven Panne
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):
5 years, 5 months
1
0
0
0
← Newer
1
...
46
47
48
49
Older →
Jump to page:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
Results per page:
10
25
50
100
200