Module: check_mk
Branch: master
Commit: 48932e15800e0d076d8b85062060e151182ed822
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=48932e15800e0d…
Author: Lars Michelsen <lm(a)mathias-kettner.de>
Date: Tue Jan 8 16:25:27 2019 +0100
Extracted single builtin icon handling
CMK-1514
Change-Id: I968abdd3d186d19bebc5f1f95b0a3463e7ac604a
---
cmk/gui/plugins/views/icons/__init__.py | 121 ++++++++++++++++----------------
1 file changed, 61 insertions(+), 60 deletions(-)
diff --git a/cmk/gui/plugins/views/icons/__init__.py
b/cmk/gui/plugins/views/icons/__init__.py
index 802bbad..35ec46e 100644
--- a/cmk/gui/plugins/views/icons/__init__.py
+++ b/cmk/gui/plugins/views/icons/__init__.py
@@ -121,69 +121,70 @@ def get_icons(what, row, toplevel):
def _process_multisite_icons(what, row, tags, custom_vars, toplevel):
icons = []
for icon_id, icon in get_multisite_icons().items():
- if icon.get('type', 'icon') == 'icon':
- try:
- title = None
- url = None
- if icon['toplevel'] != toplevel:
- continue
-
- sort_index = icon['sort_index']
-
- # In old versions, the icons produced html code directly. The new API
- # is that the icon functions need to return:
- # a) None - nothing to be rendered
- # b) single string - the icon name (without .png)
- # c) tuple - icon, title
- # d) triple - icon, title, url
- try:
- result = icon['paint'](what, row, tags, custom_vars)
- except Exception:
- if config.debug:
- raise
- result = ("alert",
- "Exception in icon '%s': %s" % (icon_id,
traceback.format_exc()))
-
- if result is None:
- continue
-
- elif isinstance(result, six.string_types + (HTML,)):
-
- # TODO: This is handling the deprecated API with 1.2.7. Remove this
one day.
- if result[0] == '<':
- # seems like an old format icon (html code). In regular
rendering
- # case (html), it can simply be appended to the output.
Otherwise
- # extract the icon name from icon images
- if html.output_format == "html":
- icons.append((sort_index, result))
- else:
- # Strip icon names out of HTML code that is generated by
htmllib.render_icon()
- for n in cmk.utils.regex.regex('<img
src="([^"]*)"[^>]*>').findall(
- "%s" % result):
- if n.startswith("images/"):
- n = n[7:]
- if n.startswith("icon_"):
- n = n[5:]
- if n.endswith(".png"):
- n = n[:-4]
- icons.append((sort_index, n.encode('utf-8'),
None, None))
- continue
-
- else:
- icon_name = result
- else:
- if len(result) == 2:
- icon_name, title = result
- elif len(result) == 3:
- icon_name, title, url = result
- icons.append((sort_index, icon_name, title, url))
-
- except Exception:
- icons.append((sort_index,
- 'Exception in icon plugin!<br />' +
traceback.format_exc()))
+ if icon.get('type', 'icon') != 'icon':
+ continue
+
+ if icon['toplevel'] != toplevel:
+ continue
+
+ try:
+ for icon in _process_multisite_icon(what, row, tags, custom_vars, icon_id,
icon):
+ icons.append(icon)
+ except Exception:
+ icons.append((icon["sort_index"],
+ 'Exception in icon plugin!<br />' +
traceback.format_exc()))
return icons
+def _process_multisite_icon(what, row, tags, custom_vars, icon_id, icon):
+ # In old versions, the icons produced html code directly. The new API
+ # is that the icon functions need to return:
+ # a) None - nothing to be rendered
+ # b) single string - the icon name (without .png)
+ # c) tuple - icon, title
+ # d) triple - icon, title, url
+ try:
+ result = icon['paint'](what, row, tags, custom_vars)
+ except Exception:
+ if config.debug:
+ raise
+ result = ("alert", "Exception in icon '%s': %s" %
(icon_id, traceback.format_exc()))
+
+ if result is None:
+ return
+
+ title, url = None, None
+ if isinstance(result, six.string_types + (HTML,)):
+ # TODO: This is handling the deprecated API with 1.2.7. Remove this one day. But
there
+ # are icons that still use this API. These need to be cleaned up before.
+ if result[0] == '<':
+ # seems like an old format icon (html code). In regular rendering
+ # case (html), it can simply be appended to the output. Otherwise
+ # extract the icon name from icon images
+ if html.output_format == "html":
+ yield icon["sort_index"], result
+ else:
+ # Strip icon names out of HTML code that is generated by
htmllib.render_icon()
+ for n in cmk.utils.regex.regex('<img
src="([^"]*)"[^>]*>').findall("%s" % result):
+ if n.startswith("images/"):
+ n = n[7:]
+ if n.startswith("icon_"):
+ n = n[5:]
+ if n.endswith(".png"):
+ n = n[:-4]
+ yield icon["sort_index"], n.encode('utf-8'), None,
None
+ return
+
+ icon_name = result
+ else:
+ if len(result) == 2:
+ icon_name, title = result
+ elif len(result) == 3:
+ icon_name, title, url = result
+
+ yield icon["sort_index"], icon_name, title, url
+
+
def _process_custom_user_icons_and_actions(user_action_ids, toplevel):
icons = []
for uid in user_action_ids: