1.1 --- a/libxml2dom/__init__.py Sat Jul 28 16:39:56 2007 +0000
1.2 +++ b/libxml2dom/__init__.py Sat Jul 28 16:40:22 2007 +0000
1.3 @@ -20,7 +20,7 @@
1.4 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
1.5 """
1.6
1.7 -__version__ = "0.4.3"
1.8 +__version__ = "0.4.4"
1.9
1.10 from libxml2dom.macrolib import *
1.11 from libxml2dom.macrolib import \
2.1 --- a/libxml2dom/xmpp.py Sat Jul 28 16:39:56 2007 +0000
2.2 +++ b/libxml2dom/xmpp.py Sat Jul 28 16:40:22 2007 +0000
2.3 @@ -57,6 +57,7 @@
2.4
2.5 XMPP_BIND_NAMESPACE = "urn:ietf:params:xml:ns:xmpp-bind"
2.6 XMPP_CLIENT_NAMESPACE = "jabber:client"
2.7 +XEP_0022_EVENT_NAMESPACE = "jabber:x:event"
2.8 XMPP_REGISTER_NAMESPACE = "jabber:iq:register"
2.9 XMPP_SASL_NAMESPACE = "urn:ietf:params:xml:ns:xmpp-sasl"
2.10 XMPP_SESSION_NAMESPACE = "urn:ietf:params:xml:ns:xmpp-session"
2.11 @@ -93,9 +94,18 @@
2.12 elif Node_namespaceURI(_node) == XMPP_CLIENT_NAMESPACE:
2.13 if Node_localName(_node) == "iq":
2.14 return XMPPIqElement(_node, self, context_node.ownerDocument)
2.15 + elif Node_localName(_node) == "message":
2.16 + return XMPPMessageElement(_node, self, context_node.ownerDocument)
2.17 + elif Node_localName(_node) == "presence":
2.18 + return XMPPPresenceElement(_node, self, context_node.ownerDocument)
2.19 else:
2.20 return XMPPClientElement(_node, self, context_node.ownerDocument)
2.21
2.22 + # Make special event elements.
2.23 +
2.24 + elif Node_namespaceURI(_node) == XEP_0022_EVENT_NAMESPACE:
2.25 + return XEP0022EventElement(_node, self, context_node.ownerDocument)
2.26 +
2.27 # Make special registration elements.
2.28
2.29 elif Node_namespaceURI(_node) == XMPP_REGISTER_NAMESPACE:
2.30 @@ -145,6 +155,7 @@
2.31 ns = {
2.32 "bind" : XMPP_BIND_NAMESPACE,
2.33 "client" : XMPP_CLIENT_NAMESPACE,
2.34 + "event": XEP_0022_EVENT_NAMESPACE,
2.35 "register" : XMPP_REGISTER_NAMESPACE,
2.36 "sasl" : XMPP_SASL_NAMESPACE,
2.37 "session" : XMPP_SESSION_NAMESPACE,
2.38 @@ -180,7 +191,6 @@
2.39 b64value = base64.encodestring("%s\x00%s\x00%s" % (jid, username, password))
2.40 text = self.ownerDocument.createTextNode(b64value)
2.41 self.appendChild(text)
2.42 -
2.43
2.44 mechanism = property(_mechanism, _setMechanism)
2.45 value = property(_value)
2.46 @@ -248,6 +258,63 @@
2.47 to = property(_to, _setTo, _delTo)
2.48 type = property(_type, _setType, _delType)
2.49
2.50 +class XMPPMessageElement(XMPPClientElement):
2.51 +
2.52 + "An XMPP message element."
2.53 +
2.54 + def _event(self):
2.55 + return self.xpath(".//event:*")[0]
2.56 +
2.57 + def _body(self):
2.58 + return self.xpath("./client:body")[0]
2.59 +
2.60 + def _setBody(self, body):
2.61 + self.appendChild(body)
2.62 +
2.63 + def _delBody(self):
2.64 + self.removeChild(self.body)
2.65 +
2.66 + def createBody(self):
2.67 + return self.ownerDocument.createElementNS(XMPP_CLIENT_NAMESPACE, "body")
2.68 +
2.69 + body = property(_body, _setBody, _delBody)
2.70 + event = property(_event)
2.71 +
2.72 +class XEP0022EventElement(XMPPNode):
2.73 +
2.74 + "An XEP-0022 event element."
2.75 +
2.76 + def _offline(self):
2.77 + return bool(self.xpath("./event:offline"))
2.78 +
2.79 + def _delivered(self):
2.80 + return bool(self.xpath("./event:delivered"))
2.81 +
2.82 + def _displayed(self):
2.83 + return bool(self.xpath("./event:displayed"))
2.84 +
2.85 + def _composing(self):
2.86 + return bool(self.xpath("./event:composing"))
2.87 +
2.88 + def _id(self):
2.89 + ids = self.xpath("./event:id")
2.90 + if ids:
2.91 + return ids[0].textContent
2.92 + else:
2.93 + return None
2.94 +
2.95 + offline = property(_offline)
2.96 + delivered = property(_delivered)
2.97 + displayed = property(_displayed)
2.98 + composing = property(_composing)
2.99 + id = property(_id)
2.100 +
2.101 +class XMPPPresenceElement(XMPPClientElement):
2.102 +
2.103 + "An XMPP presence element."
2.104 +
2.105 + pass
2.106 +
2.107 class XMPPIqElement(XMPPClientElement):
2.108
2.109 """
2.110 @@ -421,12 +488,12 @@
2.111 else:
2.112 return doc.documentElement
2.113
2.114 - def receive(self, timeout):
2.115 + def receive(self, timeout=None):
2.116
2.117 """
2.118 Wait for an incoming stanza, or as long as 'timeout' (in milliseconds),
2.119 - returning either a stanza document (fragment) or None if nothing was
2.120 - received.
2.121 + or forever if 'timeout' is omitted or set to None, returning either a
2.122 + stanza document (fragment) or None if nothing was received.
2.123 """
2.124
2.125 if self._ready(timeout):
2.126 @@ -445,6 +512,9 @@
2.127 def createMessage(self):
2.128 return self.createStanza(XMPP_CLIENT_NAMESPACE, "message")
2.129
2.130 + def createPresence(self):
2.131 + return self.createStanza(XMPP_CLIENT_NAMESPACE, "presence")
2.132 +
2.133 def createStanza(self, namespaceURI, localName):
2.134 return createXMPPStanza(namespaceURI, localName)
2.135