Source code for slixmpp.plugins.xep_0356.stanza

from __future__ import annotations

from typing import ClassVar, Literal, overload

from slixmpp.plugins.xep_0297 import Forwarded
from slixmpp.stanza import Iq, Message
from slixmpp.xmlstream import ElementBase, register_stanza_plugin

NS = "urn:xmpp:privilege:2"


[docs] class Privilege(ElementBase): namespace = NS name = "privilege" plugin_attrib = "privilege"
[docs] def permission(self, access: str) -> str | None: for perm in self["perms"]: if perm["access"] == access: return perm["type"] return None
[docs] def roster(self) -> str | None: return self.permission("roster")
[docs] def message(self) -> str | None: return self.permission("message")
[docs] def presence(self) -> str | None: return self.permission("presence")
@overload def add_perm( self, access: Literal["roster"], type_: Literal["none", "get", "set", "both"] ) -> None: ... @overload def add_perm( self, access: Literal["message"], type_: Literal["none", "outgoing"] ) -> None: ... @overload def add_perm( self, access: Literal["iq"], type_: Literal["none", "get", "set", "both"] ) -> None: ... @overload def add_perm( self, access: Literal["presence"], type_: Literal["none", "managed_entity", "roster"], ) -> None: ...
[docs] def add_perm( self, access: Literal["roster", "message", "presence", "iq"], type_: Literal[ "both", "get", "set", "none", "outgoing", "managed_entity", "roster" ], ) -> None: # This should only be needed for servers, so maybe out of scope for slixmpp perm = Perm() perm["type"] = type_ perm["access"] = access self.append(perm)
[docs] class Perm(ElementBase): namespace = NS name = "perm" plugin_attrib = "perm" plugin_multi_attrib = "perms" interfaces: ClassVar[set[str]] = {"type", "access"}
[docs] class NameSpace(ElementBase): namespace = NS name = "namespace" plugin_attrib = "namespace" plugin_multi_attrib = "namespaces" interfaces: ClassVar[set[str]] = {"ns", "type"}
[docs] class PrivilegedIq(ElementBase): namespace = NS name = "privileged_iq" plugin_attrib = "privileged_iq"
[docs] def register() -> None: register_stanza_plugin(Message, Privilege) register_stanza_plugin(Iq, Privilege) register_stanza_plugin(Privilege, Forwarded) register_stanza_plugin(Privilege, Perm, iterable=True) register_stanza_plugin(Perm, NameSpace, iterable=True) register_stanza_plugin(Iq, PrivilegedIq)