def render(self, row: Row, cell: Cell) -> CellSpec: classes = ["perfometer"] if is_stale(row): classes.append("stale") try: title, h = Perfometer(row).render() if title is None and h is None: return "", "" except Exception as e: logger.exception("error rendering performeter") if active_config.debug: raise return " ".join(classes), _("Exception: %s") % e assert h is not None content = (HTMLWriter.render_div(HTML(h), class_=["content"]) + HTMLWriter.render_div(title, class_=["title"]) + HTMLWriter.render_div("", class_=["glass"])) # pnpgraph_present: -1 means unknown (path not configured), 0: no, 1: yes if display_options.enabled( display_options.X) and row["service_pnpgraph_present"] != 0: url = cmk_graph_url(row, "service") disabled = False else: url = "javascript:void(0)" disabled = True return " ".join(classes), HTMLWriter.render_a( content=content, href=url, title=escaping.strip_tags(title), class_=["disabled"] if disabled else [], )
def render_color_icon(color: str) -> HTML: return HTMLWriter.render_div( "", class_="color", # NOTE: When we drop support for IE11 we can use #%s4c instead of rgba(...) style="background-color: rgba(%d, %d, %d, 0.3); border-color: %s;" % (*hex_color_to_rgb_color(color), color), )
def _get_popup_trigger_content(self, active_icon: Icon, menu_item: MainMenuItem) -> HTML: content = html.render_icon(menu_item.icon) + html.render_icon( active_icon, class_=["active"]) if not user.get_attribute("nav_hide_icons_title"): content += HTMLWriter.render_div(menu_item.title) return content
def render_metricometer(stack) -> HTML: if len(stack) not in (1, 2): raise MKGeneralException( _("Invalid Perf-O-Meter definition %r: only one or two entries are allowed" ) % stack) h = HTML().join(map(render_perfometer, stack)) if len(stack) == 2: h = HTMLWriter.render_div(h, class_="stacked") return h
def _render_tag_group( tag_group_id_or_label_key: Union[TaggroupID, str], tag_id_or_label_value: Union[TagID, str], object_type: str, with_link: bool, label_type: str, label_source: str, ) -> HTML: span = HTMLWriter.render_tag( HTMLWriter.render_div( HTMLWriter.render_span( "%s:%s" % ( tag_group_id_or_label_key, tag_id_or_label_value, ), class_=["tagify__tag-text"], ) ), class_=["tagify--noAnim", label_source], ) if not with_link: return span if label_type == "tag_group": type_filter_vars: HTTPVariables = [ ("%s_tag_0_grp" % object_type, tag_group_id_or_label_key), ("%s_tag_0_op" % object_type, "is"), ("%s_tag_0_val" % object_type, tag_id_or_label_value), ] elif label_type == "label": type_filter_vars = [ ( "%s_label" % object_type, json.dumps( [{"value": "%s:%s" % (tag_group_id_or_label_key, tag_id_or_label_value)}] ), ), ] else: raise NotImplementedError() url_vars: HTTPVariables = [ ("filled_in", "filter"), ("search", "Search"), ("view_name", "searchhost" if object_type == "host" else "searchsvc"), ] url = makeuri_contextless(request, url_vars + type_filter_vars, filename="view.py") return HTMLWriter.render_a(span, href=url)
def _tag_tree_bullet(self, state, path, leaf) -> HTML: code = HTMLWriter.render_div( " ", class_=["tagtree"] + (["leaf"] if leaf else []) + ["statebullet", "state%d" % state], ) if not leaf: code = HTMLWriter.render_a( code, href="javascript:virtual_host_tree_enter('%s');" % "|".join(path), title=_("Display the tree only below this node"), ) return code + " "
def test_exception_handling(request_context): try: raise Exception("Test") except Exception as e: assert compare_html(HTMLWriter.render_div(str(e)), "<div>%s</div>" % e)