Source code for kitsiso._notification

"""Notification module."""
from contextlib import suppress
from enum import Enum

__all__ = ['DEFAULT_TIMEOUT', 'NO_TIMEOUT', 'Urgency', 'Notification']

DEFAULT_TIMEOUT = -1
NO_TIMEOUT = 0


[docs]class Urgency(Enum): """Urgency levels for notifications: LOW, NORMAL, CRITICAL.""" LOW = 0 NORMAL = 1 CRITICAL = 2
[docs]class Notification: """Class for a notification. An instance of this class has the following r/w attributes: * summary * body * icon * urgency * timeout :param str summary: a single line overview :param str body: multi-line body of text :param str icon: path to notification icon :param urgency: urgency level :type urgency: Urgency :param int timeout: notification timeout in seconds, :const:`NO_TIMEOUT` or :const:`DEFAULT_TIMEOUT` """ def __init__(self, summary, body=None, *, icon=None, urgency=Urgency.NORMAL, timeout=DEFAULT_TIMEOUT): self._id = 0 self.summary = summary self.body = body self.icon = icon self.urgency = urgency self.timeout = timeout self._actions = {} self._hints = {} self._closed_handler = None
[docs] def add_action(self, key, name, func, args=(), kwargs={}): # noqa: B006 """Add an action. An action is mostly shown as a button in the notification. :param str key: must be unique for one notification :param str name: will be shown in the notification :param func: callback function `func(*args, **kwargs)` (should return quickly) :type func: callable or None :param args: arguments for the callback function :type args: tuple :param kwargs: keyword arguments for the callback function :type kwargs: dict """ self._actions[key] = (key, name, func, args, kwargs)
[docs] def del_action(self, key): """Delete an action.""" with suppress(KeyError): del self._actions[key]
[docs] def clear_actions(self): """Clear all actions.""" self._actions.clear()
[docs] def add_hint(self, name, signature, value): """Add a hint. Hints are defined in the `specification <https://people.gnome.org /~mccann/docs/notification-spec/notification-spec-latest.html #hints>`_. The *urgency* hint will be ignored (use the parameter or the attribute `urgency`). The signature must be given as defined in the D-Bus specification: ======= ===== Type Code ======= ===== boolean b byte y int i string s ======= ===== :param str name: name of the hint :param str signature: D-Bus signature of the value type :param value: the value """ self._hints[name] = (signature, value)
[docs] def del_hint(self, name): """Delete a hint.""" with suppress(KeyError): del self._hints[name]
[docs] def clear_hints(self): """Clear all hints.""" self._hints.clear()
[docs] def closed(self, func, args=(), kwargs={}): # noqa: B006 """Set a function that is envoked when the notification is closed. The the first argument to the function ``func`` is of type ``int`` and indicates the reason the notification was closed: === ===== 1 the notification expired 2 the notification was dismissed by the user 3 the notification was closed with :meth:`Notifier.close` 4 undefined/reserved reasons === ===== :param func: the function `func(reason, *args, **kwargs)` (should return quickly) :param args: arguments for the function :type args: tuple :param kwargs: keyword arguments for the function :type kwargs: dict """ self._closed_handler = (func, args, kwargs)
[docs] def copy(self): """Make a copy of this notification.""" n = Notification(self.summary, self.body, icon=self.icon, urgency=self.urgency, timeout=self.timeout) n._actions = self._actions.copy() n._hints = self._hints.copy() n._closed_handler = self._closed_handler return n
def _get_actions(self): lst = [] for action in self._actions.values(): lst.append(action[0]) lst.append(action[1]) return lst def _get_hints(self): self._hints['urgency'] = ('y', self.urgency.value) return self._hints def __repr__(self): return '<Notification:%d:%r>' % (self._id, self.summary[:30])