XEP-0045: Split stanza into sub-module

Signed-off-by: Maxime “pep” Buquet <pep@bouah.net>
This commit is contained in:
Maxime “pep” Buquet 2020-05-29 17:25:18 +02:00
parent 4fad5c62ce
commit 03ee9bc4cc
No known key found for this signature in database
GPG Key ID: DEDA74AEECA9D0F2
2 changed files with 103 additions and 88 deletions

View File

@ -15,99 +15,12 @@ from slixmpp.xmlstream.handler.callback import Callback
from slixmpp.xmlstream.matcher.xpath import MatchXPath from slixmpp.xmlstream.matcher.xpath import MatchXPath
from slixmpp.xmlstream.matcher.xmlmask import MatchXMLMask from slixmpp.xmlstream.matcher.xmlmask import MatchXMLMask
from slixmpp.exceptions import IqError, IqTimeout from slixmpp.exceptions import IqError, IqTimeout
from slixmpp.plugins.xep_0045.stanza import MUCPresence
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
class MUCPresence(ElementBase):
name = 'x'
namespace = 'http://jabber.org/protocol/muc#user'
plugin_attrib = 'muc'
interfaces = {'affiliation', 'role', 'jid', 'nick', 'room'}
affiliations = {'', }
roles = {'', }
def get_item_attr(self, attr, default):
item = self.xml.find('{http://jabber.org/protocol/muc#user}item')
if item is None:
return default
return item.get(attr)
def set_item_attr(self, attr, value):
item = self.xml.find('{http://jabber.org/protocol/muc#user}item')
if item is None:
item = ET.Element('{http://jabber.org/protocol/muc#user}item')
self.xml.append(item)
item.attrib[attr] = value
return item
def del_item_attr(self, attr):
item = self.xml.find('{http://jabber.org/protocol/muc#user}item')
if item is not None and attr in item.attrib:
del item.attrib[attr]
def get_affiliation(self):
return self.get_item_attr('affiliation', '')
def set_affiliation(self, value):
self.set_item_attr('affiliation', value)
return self
def del_affiliation(self):
# TODO: set default affiliation
self.del_item_attr('affiliation')
return self
def get_jid(self):
return JID(self.get_item_attr('jid', ''))
def set_jid(self, value):
if not isinstance(value, str):
value = str(value)
self.set_item_attr('jid', value)
return self
def del_jid(self):
self.del_item_attr('jid')
return self
def get_role(self):
return self.get_item_attr('role', '')
def set_role(self, value):
# TODO: check for valid role
self.set_item_attr('role', value)
return self
def del_role(self):
# TODO: set default role
self.del_item_attr('role')
return self
def get_nick(self):
return self.parent()['from'].resource
def get_room(self):
return self.parent()['from'].bare
def set_nick(self, value):
log.warning("Cannot set nick through mucpresence plugin.")
return self
def set_room(self, value):
log.warning("Cannot set room through mucpresence plugin.")
return self
def del_nick(self):
log.warning("Cannot delete nick through mucpresence plugin.")
return self
def del_room(self):
log.warning("Cannot delete room through mucpresence plugin.")
return self
class XEP_0045(BasePlugin): class XEP_0045(BasePlugin):
""" """

View File

@ -0,0 +1,102 @@
"""
Slixmpp: The Slick XMPP Library
Copyright (C) 2010 Nathanael C. Fritz
Copyright (C) 2020 "Maxime “pep” Buquet <pep@bouah.net>"
This file is part of Slixmpp.
See the file LICENSE for copying permission.
"""
import logging
from slixmpp.xmlstream import ElementBase, ET, JID
log = logging.getLogger(__name__)
class MUCPresence(ElementBase):
name = 'x'
namespace = 'http://jabber.org/protocol/muc#user'
plugin_attrib = 'muc'
interfaces = {'affiliation', 'role', 'jid', 'nick', 'room'}
affiliations = {'', }
roles = {'', }
def get_item_attr(self, attr, default):
item = self.xml.find('{http://jabber.org/protocol/muc#user}item')
if item is None:
return default
return item.get(attr)
def set_item_attr(self, attr, value):
item = self.xml.find('{http://jabber.org/protocol/muc#user}item')
if item is None:
item = ET.Element('{http://jabber.org/protocol/muc#user}item')
self.xml.append(item)
item.attrib[attr] = value
return item
def del_item_attr(self, attr):
item = self.xml.find('{http://jabber.org/protocol/muc#user}item')
if item is not None and attr in item.attrib:
del item.attrib[attr]
def get_affiliation(self):
return self.get_item_attr('affiliation', '')
def set_affiliation(self, value):
self.set_item_attr('affiliation', value)
return self
def del_affiliation(self):
# TODO: set default affiliation
self.del_item_attr('affiliation')
return self
def get_jid(self):
return JID(self.get_item_attr('jid', ''))
def set_jid(self, value):
if not isinstance(value, str):
value = str(value)
self.set_item_attr('jid', value)
return self
def del_jid(self):
self.del_item_attr('jid')
return self
def get_role(self):
return self.get_item_attr('role', '')
def set_role(self, value):
# TODO: check for valid role
self.set_item_attr('role', value)
return self
def del_role(self):
# TODO: set default role
self.del_item_attr('role')
return self
def get_nick(self):
return self.parent()['from'].resource
def get_room(self):
return self.parent()['from'].bare
def set_nick(self, value):
log.warning("Cannot set nick through mucpresence plugin.")
return self
def set_room(self, value):
log.warning("Cannot set room through mucpresence plugin.")
return self
def del_nick(self):
log.warning("Cannot delete nick through mucpresence plugin.")
return self
def del_room(self):
log.warning("Cannot delete room through mucpresence plugin.")
return self