Source code for slixmpp.plugins.xep_0462.stanza
"""
Usage:
>>> from slixmpp import Iq
>>> register_stanza_plugin(Iq, DiscoItems) # automatically done when loading
>>> register_plugin() # the XEP_0462 plugin
>>> iq = Iq()
>>> iq["disco_items"]["filter"]["included_types"] = ["type1", "type2"]
>>> iq.pretty_print()
<iq xmlns="jabber:client" id="0">
<query xmlns="http://jabber.org/protocol/disco#items">
<filter xmlns="urn:xmpp:pubsub-filter:0">
<x xmlns="jabber:x:data" type="submit">
<field var="FORM_TYPE" type="hidden">
<value>urn:xmpp:pubsub-filter:0</value>
</field>
<field var="included-types">
<value>type1</value>
<value>type2</value>
</field>
</x>
</filter>
</query>
</iq>
>>> iq["disco_items"]["filter"]["included_types"]
['type1', 'type2']
And similarly, an "excluded_types" interface is present.
"""
from slixmpp.plugins.xep_0004 import Form
from slixmpp.plugins.xep_0030.stanza.items import DiscoItems
from slixmpp.xmlstream import ElementBase, register_stanza_plugin
NS = "urn:xmpp:pubsub-filter:0"
[docs]
class Filter(ElementBase):
namespace = NS
name = "filter"
plugin_attrib = "filter"
interfaces = {"included_types", "excluded_types"}
[docs]
def set_included_types(self, types: list[str]) -> None:
self.__set("in", types)
[docs]
def get_included_types(self) -> list[str]:
return self.__get("in")
[docs]
def set_excluded_types(self, types: list[str]) -> None:
self.__set("ex", types)
[docs]
def get_excluded_types(self) -> list[str]:
return self.__get("ex")
def __get(self, what: str) -> list[str]:
try:
return self["form"].field[f"{what}cluded-types"].values["value"]
except KeyError:
return []
def __set(self, what: str, types: list[str]) -> None:
if self.get_plugin("form", check=True):
form: Form = self["form"]
if f"{what}cluded-types" in form.field:
form.field[f"{what}cluded-types"]["value"] = types
else:
form.add_field(
var="{what}cluded-types",
ftype="list-multi",
value=types,
)
else:
form: Form = self["form"]
form["type"] = "submit"
form.add_field(var="FORM_TYPE", ftype="hidden", value=NS)
form.add_field(
var=f"{what}cluded-types",
ftype="list-multi",
value=types,
)
[docs]
def register_plugin():
register_stanza_plugin(DiscoItems, Filter)
register_stanza_plugin(Filter, Form)