[CalendarServer-changes] [3147] CalendarServer/trunk
source_changes at macosforge.org
source_changes at macosforge.org
Mon Oct 13 15:23:17 PDT 2008
Revision: 3147
http://trac.macosforge.org/projects/calendarserver/changeset/3147
Author: sagen at apple.com
Date: 2008-10-13 15:23:17 -0700 (Mon, 13 Oct 2008)
Log Message:
-----------
Changing default for pubsub node configuration, and allowing node config to be specified in plist
Also, added "delete" node command to interactive xmpp session
Modified Paths:
--------------
CalendarServer/trunk/conf/caldavd-test.plist
CalendarServer/trunk/conf/caldavd.plist
CalendarServer/trunk/twistedcaldav/config.py
CalendarServer/trunk/twistedcaldav/notify.py
CalendarServer/trunk/twistedcaldav/test/test_notify.py
Modified: CalendarServer/trunk/conf/caldavd-test.plist
===================================================================
--- CalendarServer/trunk/conf/caldavd-test.plist 2008-10-13 19:59:14 UTC (rev 3146)
+++ CalendarServer/trunk/conf/caldavd-test.plist 2008-10-13 22:23:17 UTC (rev 3147)
@@ -416,6 +416,14 @@
<key>ServiceAddress</key>
<string>pubsub.xmpp.host.name</string>
+ <key>NodeConfiguration</key>
+ <dict>
+ <key>pubsub#deliver_payloads</key>
+ <string>1</string>
+ <key>pubsub#persist_items</key>
+ <string>1</string>
+ </dict>
+
<!-- Sends a presence notification to XMPP server at this interval (prevents disconnect) -->
<key>KeepAliveSeconds</key>
<integer>120</integer>
Modified: CalendarServer/trunk/conf/caldavd.plist
===================================================================
--- CalendarServer/trunk/conf/caldavd.plist 2008-10-13 19:59:14 UTC (rev 3146)
+++ CalendarServer/trunk/conf/caldavd.plist 2008-10-13 22:23:17 UTC (rev 3147)
@@ -312,6 +312,14 @@
<key>ServiceAddress</key>
<string>pubsub.xmpp.host.name</string>
+ <key>NodeConfiguration</key>
+ <dict>
+ <key>pubsub#deliver_payloads</key>
+ <string>1</string>
+ <key>pubsub#persist_items</key>
+ <string>1</string>
+ </dict>
+
<!-- Sends a presence notification to XMPP server at this interval (prevents disconnect) -->
<key>KeepAliveSeconds</key>
<integer>120</integer>
Modified: CalendarServer/trunk/twistedcaldav/config.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/config.py 2008-10-13 19:59:14 UTC (rev 3146)
+++ CalendarServer/trunk/twistedcaldav/config.py 2008-10-13 22:23:17 UTC (rev 3147)
@@ -254,6 +254,10 @@
"JID" : "", # "jid at xmpp.host.name/resource"
"Password" : "",
"ServiceAddress" : "", # "pubsub.xmpp.host.name"
+ "NodeConfiguration" : {
+ "pubsub#deliver_payloads" : "1",
+ "pubsub#persist_items" : "1",
+ },
"KeepAliveSeconds" : 120,
"HeartbeatMinutes" : 30,
"AllowedJIDs": [],
@@ -544,7 +548,7 @@
service["Enabled"]
):
for key, value in service.iteritems():
- if not value and key not in ("AllowedJIDs"):
+ if not value and key not in ("AllowedJIDs", "HeartbeatMinutes"):
raise ConfigurationError("Invalid %s for XMPPNotifierService: %r"
% (key, value))
Modified: CalendarServer/trunk/twistedcaldav/notify.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/notify.py 2008-10-13 19:59:14 UTC (rev 3146)
+++ CalendarServer/trunk/twistedcaldav/notify.py 2008-10-13 22:23:17 UTC (rev 3147)
@@ -568,11 +568,6 @@
pubsubNS = 'http://jabber.org/protocol/pubsub'
- nodeConf = {
- 'pubsub#deliver_payloads': '1',
- 'pubsub#persist_items' : '0',
- }
-
def __init__(self, settings, reactor=None, configOverride=None,
heartbeat=True, roster=True):
self.xmlStream = None
@@ -581,7 +576,7 @@
from twisted.internet import reactor
self.reactor = reactor
self.config = configOverride or config
- self.doHeartbeat = heartbeat
+ self.doHeartbeat = heartbeat and self.settings['HeartbeatMinutes'] != 0
self.doRoster = roster
self.roster = {}
@@ -636,9 +631,11 @@
pubsubElement = iq.addElement('pubsub', defaultUri=self.pubsubNS)
publishElement = pubsubElement.addElement('publish')
publishElement['node'] = nodeName
- itemElement = publishElement.addElement('item')
- payloadElement = itemElement.addElement('plistfrag',
- defaultUri='plist-apple')
+ if self.settings["NodeConfiguration"]["pubsub#deliver_payloads"] == '1':
+ itemElement = publishElement.addElement('item')
+ payloadElement = itemElement.addElement('plistfrag',
+ defaultUri='plist-apple')
+
self.sendDebug("Publishing (%s)" % (nodeName,), iq)
d = iq.send(to=self.settings['ServiceAddress'])
d.addCallback(self.publishNodeSuccess, nodeName)
@@ -748,6 +745,7 @@
return
try:
+ nodeConf = self.settings["NodeConfiguration"]
self.sendDebug("Received configuration form (%s)" % (nodeName,), iq)
pubsubElement = self._getChild(iq, 'pubsub')
if pubsubElement:
@@ -772,7 +770,7 @@
if var == "FORM_TYPE":
filledForm.addChild(field)
else:
- value = self.nodeConf.get(var, None)
+ value = nodeConf.get(var, None)
if (value is not None and
(str(self._getChild(field,
"value")) != value)):
@@ -853,7 +851,43 @@
finally:
self.unlockNode(None, nodeName)
+ def deleteNode(self, nodeName):
+ if self.xmlStream is None:
+ # We lost our connection
+ self.unlockNode(None, nodeName)
+ return
+ try:
+ if not self.lockNode(nodeName):
+ return
+
+ iq = IQ(self.xmlStream)
+ pubsubElement = iq.addElement('pubsub',
+ defaultUri=self.pubsubNS+"#owner")
+ publishElement = pubsubElement.addElement('delete')
+ publishElement['node'] = nodeName
+ self.sendDebug("Deleting (%s)" % (nodeName,), iq)
+ d = iq.send(to=self.settings['ServiceAddress'])
+ d.addCallback(self.deleteNodeSuccess, nodeName)
+ d.addErrback(self.deleteNodeFailure, nodeName)
+ except:
+ self.unlockNode(None, nodeName)
+ raise
+
+ def deleteNodeSuccess(self, iq, nodeName):
+ self.unlockNode(None, nodeName)
+ self.sendDebug("Node delete successful (%s)" % (nodeName,), iq)
+
+ def deleteNodeFailure(self, result, nodeName):
+ try:
+ iq = result.value.getElement()
+ self.log_error("PubSub node delete error: %s" %
+ (iq.toXml().encode('ascii', 'replace')),)
+ self.sendDebug("Node delete failed (%s)" % (nodeName,), iq)
+ finally:
+ self.unlockNode(None, nodeName)
+
+
def requestRoster(self):
if self.doRoster:
self.roster = {}
@@ -988,16 +1022,24 @@
response = "Outstanding: %s" % (str(self.outstanding),)
elif txt.startswith("publish"):
try:
- publish, nodeName = txt.split()
+ publish, nodeName = str(body).split()
except ValueError:
response = "Please phrase it like 'publish nodename'"
else:
response = "Publishing node %s" % (nodeName,)
self.reactor.callLater(1, self.enqueue, "update",
nodeName)
+ elif txt.startswith("delete"):
+ try:
+ delete, nodeName = str(body).split()
+ except ValueError:
+ response = "Please phrase it like 'delete nodename'"
+ else:
+ response = "Deleting node %s" % (nodeName,)
+ self.reactor.callLater(1, self.deleteNode, nodeName)
elif txt.startswith("create"):
try:
- publish, nodeName = txt.split()
+ publish, nodeName = str(body).split()
except ValueError:
response = "Please phrase it like 'create nodename'"
else:
Modified: CalendarServer/trunk/twistedcaldav/test/test_notify.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/test/test_notify.py 2008-10-13 19:59:14 UTC (rev 3146)
+++ CalendarServer/trunk/twistedcaldav/test/test_notify.py 2008-10-13 22:23:17 UTC (rev 3147)
@@ -347,7 +347,10 @@
def setUp(self):
self.xmlStream = StubXmlStream()
- self.settings = { 'ServiceAddress' : 'pubsub.example.com' }
+ self.settings = { 'ServiceAddress' : 'pubsub.example.com',
+ 'NodeConfiguration' : { 'pubsub#deliver_payloads' : '1' },
+ 'HeartbeatMinutes' : 30,
+ }
self.notifier = XMPPNotifier(self.settings, reactor=Clock(),
configOverride=self.xmppEnabledConfig, heartbeat=False)
self.notifier.streamOpened(self.xmlStream)
@@ -430,13 +433,13 @@
formElement['type'] = 'form'
fields = [
( "unknown", "don't edit me", "text-single" ),
- ( "pubsub#deliver_payloads", "1", "boolean" ),
- ( "pubsub#persist_items", "1", "boolean" ),
+ ( "pubsub#deliver_payloads", "0", "boolean" ),
+ ( "pubsub#persist_items", "0", "boolean" ),
]
expectedFields = {
"unknown" : "don't edit me",
"pubsub#deliver_payloads" : "1",
- "pubsub#persist_items" : "0",
+ "pubsub#persist_items" : "1",
}
for field in fields:
fieldElement = formElement.addElement("field")
@@ -478,6 +481,7 @@
xmlStream = StubXmlStream()
settings = { 'ServiceAddress' : 'pubsub.example.com', 'JID' : 'jid',
'Password' : 'password', 'KeepAliveSeconds' : 5,
+ 'NodeConfiguration' : { 'pubsub#deliver_payloads' : "1" },
'HeartbeatMinutes' : 30 }
notifier = XMPPNotifier(settings, reactor=clock, heartbeat=True,
roster=False, configOverride=xmppConfig)
@@ -508,6 +512,7 @@
clock = Clock()
xmlStream = StubXmlStream()
settings = { 'ServiceAddress' : 'pubsub.example.com', 'JID' : 'jid',
+ 'NodeConfiguration' : { 'pubsub#deliver_payloads' : "1" },
'Password' : 'password', 'KeepAliveSeconds' : 5 }
notifier = XMPPNotifier(settings, reactor=clock, heartbeat=False)
factory = XMPPNotificationFactory(notifier, settings, reactor=clock)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20081013/0056b28d/attachment-0001.html
More information about the calendarserver-changes
mailing list