[CalendarServer-changes] [6746] CalendarServer/branches/users/sagen/purge_old_events

source_changes at macosforge.org source_changes at macosforge.org
Mon Jan 17 16:20:42 PST 2011


Revision: 6746
          http://trac.macosforge.org/projects/calendarserver/changeset/6746
Author:   sagen at apple.com
Date:     2011-01-17 16:20:34 -0800 (Mon, 17 Jan 2011)
Log Message:
-----------
Go the principal.calendarHome( ) route to retrieve the calendar home

Modified Paths:
--------------
    CalendarServer/branches/users/sagen/purge_old_events/calendarserver/tools/purge.py
    CalendarServer/branches/users/sagen/purge_old_events/twistedcaldav/directory/aggregate.py

Modified: CalendarServer/branches/users/sagen/purge_old_events/calendarserver/tools/purge.py
===================================================================
--- CalendarServer/branches/users/sagen/purge_old_events/calendarserver/tools/purge.py	2011-01-17 23:09:45 UTC (rev 6745)
+++ CalendarServer/branches/users/sagen/purge_old_events/calendarserver/tools/purge.py	2011-01-18 00:20:34 UTC (rev 6746)
@@ -93,18 +93,22 @@
     def __init__(self, store):
         self._store = store
 
+    @inlineCallbacks
     def startService(self):
         try:
             rootResource = getRootResource(config, self._store)
             directory = rootResource.getDirectory()
-            total = (yield purgeOldEvents(directory, rootResource, self.cutoff,
-                verbose=self.verbose, dryrun=self.dryrun))
+            total = (yield purgeOldEvents(self._store, directory, rootResource,
+                self.cutoff, verbose=self.verbose, dryrun=self.dryrun))
             if self.verbose:
-                amount = "%d event%s" % (total, "s" if total > 1 else "")
-                if self.dryrun:
-                    print "Would have deleted %s" % (amount,)
+                if total:
+                    amount = "%d event%s" % (total, "s" if total > 1 else "")
+                    if self.dryrun:
+                        print "Would have deleted %s" % (amount,)
+                    else:
+                        print "Deleted %s" % (amount,)
                 else:
-                    print "Deleted %s" % (amount,)
+                    print "No old events found"
         except Exception, e:
             print "Error:", e
             raise
@@ -287,31 +291,50 @@
 
 
 @inlineCallbacks
-def purgeOldEvents(directory, root, date, verbose=False, dryrun=False):
+def purgeOldEvents(store, directory, root, date, verbose=False, dryrun=False):
 
     if dryrun:
         print "Dry run"
 
-    records = []
-    calendars = root.getChild("calendars")
-    uids = calendars.getChild("__uids__")
-
     if verbose:
-        print "Querying database for old events...",
+        print "Querying database for old events..."
 
-    oldEvents = (yield self._store.eventsOlderThan(date))
+    oldEvents = (yield store.eventsOlderThan(date))
 
     request = FakeRequest(root, None, None)
     request.checkedSACL = True
     eventCount = 0
+    prevHomeName = None
+
     for homeName, calendarName, eventName, maxDate in oldEvents:
+        if homeName != prevHomeName:
+
+            # Retrieve the calendar home
+            record = directory.recordWithGUID(homeName)
+            if record is None:
+                # The user has already been removed from the directory service.  We
+                # need to fashion a temporary, fake record
+
+                # FIXME: probaby want a more elegant way to accomplish this,
+                # since it requires the aggregate directory to examine these first:
+                record = DirectoryRecord(directory, "users", homeName, shortNames=(homeName,),
+                    enabledForCalendaring=True)
+                record.enabled = True
+                directory._tmpRecords["shortNames"][homeName] = record
+                directory._tmpRecords["guids"][homeName] = record
+
+            principalCollection = directory.principalCollection
+            principal = principalCollection.principalForRecord(record)
+            calendarHome = (yield principal.calendarHome(request))
+            prevHomeName = homeName
+
         eventCount += 1
         if verbose:
-            print "%s/%s/%s %s" % (homeName, calendarName, eventName, maxDate)
+            print "%s %s/%s/%s ends: %s" % (record.shortNames[0], homeName,
+                calendarName, eventName, maxDate)
         if not dryrun:
-            calendarHome = uids.getChild(homeName)
-            calendar = calendarHome.getChild(calendarName)
-            event = calendar.getChild(eventName)
+            calendar = (yield calendarHome.getChild(calendarName))
+            event = (yield calendar.getChild(eventName))
             uri = "/calendars/__uids__/%s/%s/%s" % (
                 homeName,
                 calendarName,
@@ -326,10 +349,7 @@
                 print "Removing %s/%s/%s" % (homeName, calendarName, eventName)
             result = (yield event.storeRemove(request, True, uri))
 
-    if verbose:
-        print "%d old events found" % (eventCount,)
-
-    if not dryrun:
+    if eventCount and not dryrun:
         if verbose:
             print "Committing changes"
         txn = request._newStoreTransaction
@@ -603,4 +623,3 @@
 
     returnValue(assignments)
 
-

Modified: CalendarServer/branches/users/sagen/purge_old_events/twistedcaldav/directory/aggregate.py
===================================================================
--- CalendarServer/branches/users/sagen/purge_old_events/twistedcaldav/directory/aggregate.py	2011-01-17 23:09:45 UTC (rev 6745)
+++ CalendarServer/branches/users/sagen/purge_old_events/twistedcaldav/directory/aggregate.py	2011-01-18 00:20:34 UTC (rev 6746)
@@ -139,6 +139,8 @@
 
         return self._queryAll("recordWithUID", uid)
 
+    recordWithGUID = recordWithUID
+
     def recordWithAuthID(self, authID):
         return self._queryAll("recordWithAuthID", authID)
 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20110117/594368c6/attachment.html>


More information about the calendarserver-changes mailing list