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
Signed by: pep
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.xmlmask import MatchXMLMask
from slixmpp.exceptions import IqError, IqTimeout
from slixmpp.plugins.xep_0045.stanza import MUCPresence
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):
"""

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