Source code for slixmpp.plugins.xep_0317.stanza

import warnings
from typing import Iterable

from slixmpp import Presence
from slixmpp.types import HatTuple
from slixmpp.xmlstream import ElementBase, register_stanza_plugin

NS = 'urn:xmpp:hats:0'


[docs] class Hats(ElementBase): """ Hats element, container for multiple hats: .. code-block::xml <hats xmlns='urn:xmpp:hats:0'> <hat title='Host' uri='http://schemas.example.com/hats#host' xml:lang='en-us'> <badge xmlns="urn:example:badges" fgcolor="#000000" bgcolor="#58C5BA"/> </hat> <hat title='Presenter' uri='http://schemas.example.com/hats#presenter' xml:lang='en-us'> <badge xmlns="urn:example:badges" fgcolor="#000000" bgcolor="#EC0524"/> </hat> </hats> """ name = 'hats' namespace = NS plugin_attrib = 'hats'
[docs] def add_hats(self, hats: Iterable[HatTuple | tuple[str, str, float]]) -> None: for uri, title, hue in hats: hat = Hat() hat["uri"] = uri hat["title"] = title if hue is not None: hat["hue"] = hue self.append(hat)
[docs] class Hat(ElementBase): """ Hat element, has a title and url, may contain arbitrary sub-elements. .. code-block::xml <hat title='Host' uri='http://schemas.example.com/hats#host' xml:lang='en-us'> <badge xmlns="urn:example:badges" fgcolor="#000000" bgcolor="#58C5BA"/> </hat> """ name = 'hat' plugin_attrib = 'hat' namespace = NS interfaces = {'title', 'uri', 'hue'} plugin_multi_attrib = "hats"
[docs] def set_hue(self, hue: float) -> None: self._set_attr("hue", str(hue))
[docs] def get_hue(self) -> float | None: hue = self._get_attr("hue",) try: return None if hue == "" else float(hue) except ValueError: warnings.warn(f"Not a valid hue value: {hue}") return None
[docs] def register_plugin() -> None: register_stanza_plugin(Hats, Hat, iterable=True) register_stanza_plugin(Presence, Hats)