class implementation_notification_channel_libnotify(interface_notification_channel): ''' [implementation] ''' def parameters_schema(self): return { "type": "object", "additionalProperties": False, "properties": { "icon": { "type": "string" } }, "required": [ ] } ''' [implementation] ''' def normalize_conf_node(self, node): return dict_merge( { "icon": "/usr/local/share/icons/heimdall.png", }, node ) ''' [implementation] ''' def notify(self, parameters, name, data, state, info): def condition_translate(condition): if (condition == enum_condition.unknown): return "normal" elif (condition == enum_condition.ok): return "low" elif (condition == enum_condition.warning): return "normal" elif (condition == enum_condition.critical): return "critical" else: raise ValueError("impossible condition") parts = [] parts.append( "notify-send" ) ## app name parts.append( string_coin( "--app-name={{app_name}}", { "app_name": "heimdall", } ) ) ## urgency parts.append( string_coin( "--urgency={{urgency}}", { "urgency": condition_translate(state["condition"]), } ) ) ## icon if ("icon" not in parameters): pass else: parts.append( string_coin( "--icon={{icon}}", { "icon": parameters["icon"], } ) ) ## summary parts.append( string_coin( "{{condition}} | {{title}}", { "title": data["title"], "condition": condition_encode(state["condition"]).upper(), } ) ) ## body parts.append( "(no info)" if (info == "") else info ) _subprocess.run(parts)