summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sleekxmpp/plugins/stanza_pubsub.py17
-rw-r--r--sleekxmpp/plugins/xep_0004.py24
-rw-r--r--sleekxmpp/plugins/xep_0060.py6
-rw-r--r--sleekxmpp/xmlstream/jid.py10
-rw-r--r--sleekxmpp/xmlstream/stanzabase.py5
5 files changed, 53 insertions, 9 deletions
diff --git a/sleekxmpp/plugins/stanza_pubsub.py b/sleekxmpp/plugins/stanza_pubsub.py
index 96d02f93..01aac095 100644
--- a/sleekxmpp/plugins/stanza_pubsub.py
+++ b/sleekxmpp/plugins/stanza_pubsub.py
@@ -284,6 +284,14 @@ class DefaultConfig(ElementBase):
t = self._getAttr('type')
if not t: t = 'leaf'
return t
+
+ def getConfig(self):
+ return self['form']
+
+ def setConfig(self, value):
+ self['form'].setStanzaValues(value.getStanzaValues())
+ print self['form']['title']
+ return self
registerStanzaPlugin(PubsubOwner, DefaultConfig)
registerStanzaPlugin(DefaultConfig, xep_0004.Form)
@@ -356,8 +364,17 @@ class OwnerDefault(OwnerConfigure):
interfaces = set(('node', 'config'))
plugin_attrib_map = {}
plugin_tag_map = {}
+
+ def getConfig(self):
+ return self['form']
+
+ def setConfig(self, value):
+ self['form'].setStanzaValues(value.getStanzaValues())
+ print self['from']['title']
+ return self
registerStanzaPlugin(PubsubOwner, OwnerDefault)
+registerStanzaPlugin(OwnerDefault, xep_0004.Form)
class OwnerDelete(ElementBase, OptionalSetting):
namespace = 'http://jabber.org/protocol/pubsub#owner'
diff --git a/sleekxmpp/plugins/xep_0004.py b/sleekxmpp/plugins/xep_0004.py
index 86963632..9e67e656 100644
--- a/sleekxmpp/plugins/xep_0004.py
+++ b/sleekxmpp/plugins/xep_0004.py
@@ -31,6 +31,7 @@ class Form(ElementBase):
ElementBase.__init__(self, *args, **kwargs)
if title is not None:
self['title'] = title
+ self.field = FieldAccessor(self)
def setup(self, xml=None):
if ElementBase.setup(self, xml): #if we had to generate xml
@@ -111,7 +112,7 @@ class Form(ElementBase):
reportedXML = self.xml.find('{%s}reported' % self.namespace)
if reportedXML is not None:
self.xml.remove(reportedXML)
-
+
def getFields(self, use_dict=False):
fields = {} if use_dict else []
fieldsXML = self.xml.findall('{%s}field' % FormField.namespace)
@@ -195,6 +196,27 @@ class Form(ElementBase):
fields = self.getFields(use_dict=True)
for field in values:
fields[field]['value'] = values[field]
+
+ def merge(self, other):
+ new = copy.copy(self)
+ nfields = new.getFields(use_dict=True)
+ ofields = other.getFields(use_dict=True)
+ nfields.update(ofields)
+ new.setFields([(x, nfields[x]) for x in nfields])
+ return new
+
+class FieldAccessor(object):
+ def __init__(self, form):
+ self.form = form
+
+ def __getitem__(self, key):
+ return self.form.getFields(use_dict=True)[key]
+
+ def __contains__(self, key):
+ return key in self.form.getFields(use_dict=True)
+
+ def has_key(self, key):
+ return key in self.form.getFields(use_dict=True)
class FormField(ElementBase):
diff --git a/sleekxmpp/plugins/xep_0060.py b/sleekxmpp/plugins/xep_0060.py
index a92a3844..0b056f0b 100644
--- a/sleekxmpp/plugins/xep_0060.py
+++ b/sleekxmpp/plugins/xep_0060.py
@@ -4,6 +4,7 @@ import logging
#from xml.etree import cElementTree as ET
from .. xmlstream.stanzabase import registerStanzaPlugin, ElementBase, ET
from . import stanza_pubsub
+from . xep_0004 import Form
class xep_0060(base.base_plugin):
"""
@@ -41,7 +42,8 @@ class xep_0060(base.base_plugin):
submitform.field['pubsub#node_type'].setValue('leaf')
else:
submitform.addField('pubsub#node_type', value='leaf')
- configure.append(submitform.getXML('submit'))
+ submitform['type'] = 'submit'
+ configure.append(submitform.xml)
pubsub.append(configure)
iq = self.xmpp.makeIqSet(pubsub)
iq.attrib['to'] = jid
@@ -117,7 +119,7 @@ class xep_0060(base.base_plugin):
if not form or form is None:
logging.error("No form found.")
return False
- return self.xmpp.plugin['xep_0004'].buildForm(form)
+ return Form(xml=form)
def getNodeSubscriptions(self, jid, node):
pubsub = ET.Element('{http://jabber.org/protocol/pubsub#owner}pubsub')
diff --git a/sleekxmpp/xmlstream/jid.py b/sleekxmpp/xmlstream/jid.py
index 292abd92..3e997113 100644
--- a/sleekxmpp/xmlstream/jid.py
+++ b/sleekxmpp/xmlstream/jid.py
@@ -59,24 +59,24 @@ class JID(object):
if name == 'resource':
if self._resource is None:
self._resource = self._jid.split('/', 1)[-1]
- return self._resource
+ return self._resource or ""
elif name == 'user':
if self._user is None:
if '@' in self._jid:
self._user = self._jid.split('@', 1)[0]
else:
self._user = self._user
- return self._user
+ return self._user or ""
elif name in ('server', 'domain'):
if self._domain is None:
self._domain = self._jid.split('@', 1)[-1].split('/', 1)[0]
- return self._domain
+ return self._domain or ""
elif name == 'full':
- return self._jid
+ return self._jid or ""
elif name == 'bare':
if self._bare is None:
self._bare = self._jid.split('/', 1)[0]
- return self._bare
+ return self._bare or ""
def __setattr__(self, name, value):
"""
diff --git a/sleekxmpp/xmlstream/stanzabase.py b/sleekxmpp/xmlstream/stanzabase.py
index 3223901a..7458f3c7 100644
--- a/sleekxmpp/xmlstream/stanzabase.py
+++ b/sleekxmpp/xmlstream/stanzabase.py
@@ -362,7 +362,10 @@ class ElementBase(object):
self.idx = 0
return self
- def __bool__(self):
+ def __bool__(self): #python 3.x
+ return True
+
+ def __nonzero__(self): #python 2.x
return True
def __next__(self):