1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
"""
Slixmpp: The Slick XMPP Library
Copyright (C) 2010 Nathanael C. Fritz, Lance J.T. Stout
This file is part of Slixmpp.
See the file LICENSE for copying permission.
"""
import logging
from typing import Optional
import slixmpp
from slixmpp import Iq, JID
from slixmpp.xmlstream import register_stanza_plugin
from slixmpp.plugins import BasePlugin
from slixmpp.plugins.xep_0004 import Form
from slixmpp.plugins.xep_0030 import DiscoInfo
from slixmpp.plugins.xep_0128 import StaticExtendedDisco
class XEP_0128(BasePlugin):
"""
XEP-0128: Service Discovery Extensions
Allow the use of data forms to add additional identity
information to disco#info results.
Also see <http://www.xmpp.org/extensions/xep-0128.html>.
:var disco: A reference to the XEP-0030 plugin.
:var static: Object containing the default set of static
node handlers.
"""
name = 'xep_0128'
description = 'XEP-0128: Service Discovery Extensions'
dependencies = {'xep_0030', 'xep_0004'}
def plugin_init(self):
"""Start the XEP-0128 plugin."""
self._disco_ops = ['set_extended_info',
'add_extended_info',
'del_extended_info']
register_stanza_plugin(DiscoInfo, Form, iterable=True)
self.disco = self.xmpp['xep_0030']
self.static = StaticExtendedDisco(self.disco.static)
self.disco.set_extended_info = self.set_extended_info
self.disco.add_extended_info = self.add_extended_info
self.disco.del_extended_info = self.del_extended_info
for op in self._disco_ops:
self.api.register(getattr(self.static, op), op, default=True)
def set_extended_info(self, jid=None, node=None, **kwargs):
"""
Set additional, extended identity information to a node.
Replaces any existing extended information.
:param jid: The JID to modify.
:param node: The node to modify.
:param data: Either a form, or a list of forms to use
as extended information, replacing any
existing extensions.
"""
self.api['set_extended_info'](jid, node, None, kwargs)
def add_extended_info(self, jid=None, node=None, **kwargs):
"""
Add additional, extended identity information to a node.
:param jid: The JID to modify.
:param node: The node to modify.
:param data: Either a form, or a list of forms to add
as extended information.
"""
self.api['add_extended_info'](jid, node, None, kwargs)
def del_extended_info(self, jid: Optional[JID] = None,
node: Optional[str] = None, **kwargs):
"""
Remove all extended identity information to a node.
:param jid: The JID to modify.
:param node: The node to modify.
"""
self.api['del_extended_info'](jid, node, None, kwargs)
|