[CalendarServer-changes] [7380] CalendarServer/branches/users/sagen/inboxitems
source_changes at macosforge.org
source_changes at macosforge.org
Thu Apr 28 13:56:36 PDT 2011
Revision: 7380
http://trac.macosforge.org/projects/calendarserver/changeset/7380
Author: sagen at apple.com
Date: 2011-04-28 13:56:36 -0700 (Thu, 28 Apr 2011)
Log Message:
-----------
Branch for processing Leopard->Lion inbox items
Modified Paths:
--------------
CalendarServer/branches/users/sagen/inboxitems/calendarserver/tap/caldav.py
CalendarServer/branches/users/sagen/inboxitems/twisted/plugins/caldav.py
CalendarServer/branches/users/sagen/inboxitems/twistedcaldav/upgrade.py
Modified: CalendarServer/branches/users/sagen/inboxitems/calendarserver/tap/caldav.py
===================================================================
--- CalendarServer/branches/users/sagen/inboxitems/calendarserver/tap/caldav.py 2011-04-28 20:54:25 UTC (rev 7379)
+++ CalendarServer/branches/users/sagen/inboxitems/calendarserver/tap/caldav.py 2011-04-28 20:56:36 UTC (rev 7380)
@@ -69,7 +69,7 @@
from twistedcaldav.mail import IMIPReplyInboxResource
from twistedcaldav import memcachepool
from twistedcaldav.stdconfig import DEFAULT_CONFIG, DEFAULT_CONFIG_FILE
-from twistedcaldav.upgrade import UpgradeFileSystemFormatService
+from twistedcaldav.upgrade import UpgradeFileSystemFormatService, PostDBImportService
from calendarserver.tap.util import pgServiceFromConfig
@@ -506,27 +506,8 @@
self.monitor.addProcess("mailgateway", mailGatewayArgv,
env=PARENT_ENVIRONMENT)
- self.maker.log_info("Adding task service")
- taskArgv = [
- sys.executable,
- sys.argv[0],
- ]
- if config.UserName:
- taskArgv.extend(("-u", config.UserName))
- if config.GroupName:
- taskArgv.extend(("-g", config.GroupName))
- taskArgv.extend((
- "--reactor=%s" % (config.Twisted.reactor,),
- "-n", "caldav_task",
- "-f", self.configPath,
- ))
- self.monitor.addProcess(
- "caldav_task", taskArgv, env=PARENT_ENVIRONMENT
- )
-
-
class CalDAVServiceMaker (LoggingMixIn):
implements(IPlugin, IServiceMaker)
@@ -982,7 +963,8 @@
mainService = createMainService(cp, store)
upgradeSvc = UpgradeFileSystemFormatService(config,
UpgradeToDatabaseService.wrapService(
- CachingFilePath(config.DocumentRoot), mainService,
+ CachingFilePath(config.DocumentRoot),
+ PostDBImportService(config, store, mainService),
store, uid=uid, gid=gid
)
)
Modified: CalendarServer/branches/users/sagen/inboxitems/twisted/plugins/caldav.py
===================================================================
--- CalendarServer/branches/users/sagen/inboxitems/twisted/plugins/caldav.py 2011-04-28 20:54:25 UTC (rev 7379)
+++ CalendarServer/branches/users/sagen/inboxitems/twisted/plugins/caldav.py 2011-04-28 20:56:36 UTC (rev 7380)
@@ -50,6 +50,5 @@
TwistedCalDAV = TAP("calendarserver.tap.caldav.CalDAVServiceMaker")
-CalDAVTask = TAP("calendarserver.sidecar.task.CalDAVTaskServiceMaker")
CalDAVNotifier = TAP("twistedcaldav.notify.NotificationServiceMaker")
CalDAVMailGateway = TAP("twistedcaldav.mail.MailGatewayServiceMaker")
Modified: CalendarServer/branches/users/sagen/inboxitems/twistedcaldav/upgrade.py
===================================================================
--- CalendarServer/branches/users/sagen/inboxitems/twistedcaldav/upgrade.py 2011-04-28 20:54:25 UTC (rev 7379)
+++ CalendarServer/branches/users/sagen/inboxitems/twistedcaldav/upgrade.py 2011-04-28 20:56:36 UTC (rev 7380)
@@ -33,15 +33,22 @@
from twistedcaldav.mail import MailGatewayTokensDatabase
from twistedcaldav.ical import Component
from twistedcaldav import caldavxml
+from twistedcaldav.ical import Component
+from twistedcaldav.scheduling.cuaddress import LocalCalendarUser
+from twistedcaldav.scheduling.scheduler import DirectScheduler
+
from twisted.application.service import Service
from twisted.internet import reactor
from twisted.internet.defer import inlineCallbacks, succeed
from txdav.caldav.datastore.index_file import db_basename
+from calendarserver.tap.util import getRootResource, FakeRequest
+
from calendarserver.tools.util import getDirectory
from calendarserver.tools.resources import migrateResources
+
from twisted.python.reflect import namedAny
deadPropertyXattrPrefix = namedAny(
@@ -807,3 +814,125 @@
+class PostDBImportService(Service, object):
+
+ def __init__(self, config, store, service):
+ self.wrappedService = service
+ self.store = store
+ self.config = config
+
+ def startService(self):
+ self.processInboxItems()
+
+
+ @inlineCallbacks
+ def processInboxItems(self):
+
+ inboxItemsList = os.path.join(self.config.DataRoot, "tasks", "incoming",
+ "scheduleinboxes.task")
+ if os.path.exists(inboxItemsList):
+
+ root = getRootResource(self.config, self.store)
+ directory = root.getDirectory()
+ principalCollection = directory.principalCollection
+
+ inboxItems = set()
+ with open(inboxItemsList) as input:
+ for inboxItem in input:
+ inboxItem = inboxItem.strip()
+ inboxItems.add(inboxItem)
+
+ try:
+ for inboxItem in list(inboxItems):
+ log.info("Processing inbox item: %s" % (inboxItem,))
+ ignore, uuid, ignore, fileName = inboxItem.rsplit("/", 3)
+
+ record = directory.recordWithUID(uuid)
+ if not record:
+ continue
+
+ principal = principalCollection.principalForRecord(record)
+ if not principal:
+ continue
+
+ request = FakeRequest(root, "PUT", None)
+ request.checkedSACL = True
+ request.authnUser = request.authzUser = davxml.Principal(
+ davxml.HRef.fromString("/principals/__uids__/%s/" % (uuid,))
+ )
+
+ calendarHome = yield principal.calendarHome(request)
+ if not calendarHome:
+ continue
+
+ inbox = yield calendarHome.getChild("inbox")
+ if inbox and inbox.exists():
+
+ inboxItemResource = yield inbox.getChild(fileName)
+ if inboxItemResource and inboxItemResource.exists():
+
+ uri = "/calendars/__uids__/%s/inbox/%s" % (uuid, fileName)
+ request.path = uri
+ request._rememberResource(inboxItemResource, uri)
+
+ yield self.processInboxItem(
+ root,
+ directory,
+ principal,
+ request,
+ inbox,
+ inboxItemResource,
+ uuid,
+ uri
+ )
+ inboxItems.remove(inboxItem)
+
+ finally:
+ # Rewrite the task file in case we exit before we're done
+ with open(inboxItemsList + ".tmp", "w") as output:
+ for inboxItem in inboxItems:
+ output.write("%s\n" % (inboxItem,))
+ os.rename(inboxItemsList + ".tmp", inboxItemsList)
+
+ os.remove(inboxItemsList)
+ reactor.callLater(0, self.wrappedService.setServiceParent, self.parent)
+
+
+ @inlineCallbacks
+ def processInboxItem(self, root, directory, principal, request, inbox,
+ inboxItem, uuid, uri):
+ log.debug("Processing inbox item %s" % (inboxItem,))
+
+ ownerPrincipal = principal
+ cua = "urn:uuid:%s" % (uuid,)
+ owner = LocalCalendarUser(cua, ownerPrincipal,
+ inbox, ownerPrincipal.scheduleInboxURL())
+
+ data = yield inboxItem.iCalendarText()
+ calendar = Component.fromString(data)
+ try:
+ method = calendar.propertyValue("METHOD")
+ except ValueError:
+ returnValue(None)
+
+ if method == "REPLY":
+ # originator is attendee sending reply
+ originator = calendar.getAttendees()[0]
+ else:
+ # originator is the organizer
+ originator = calendar.getOrganizer()
+
+ principalCollection = directory.principalCollection
+ originatorPrincipal = principalCollection.principalForCalendarUserAddress(originator)
+ originator = LocalCalendarUser(originator, originatorPrincipal)
+ recipients = (owner,)
+
+ txn = request._newStoreTransaction
+
+ scheduler = DirectScheduler(request, inboxItem)
+ yield scheduler.doSchedulingViaPUT(originator, recipients, calendar,
+ internal_request=False)
+ yield inboxItem.storeRemove(request, True, uri)
+
+ yield txn.commit()
+
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20110428/22b67e39/attachment-0001.html>
More information about the calendarserver-changes
mailing list