[CalendarServer-changes] [9946] CalendarServer/trunk/calendarserver/tools/shell/vfs.py
source_changes at macosforge.org
source_changes at macosforge.org
Tue Oct 16 17:52:02 PDT 2012
Revision: 9946
http://trac.calendarserver.org//changeset/9946
Author: wsanchez at apple.com
Date: 2012-10-16 17:52:02 -0700 (Tue, 16 Oct 2012)
Log Message:
-----------
Implement list() for UIDsFolder.
Be proactive about closing new transactions.
Modified Paths:
--------------
CalendarServer/trunk/calendarserver/tools/shell/vfs.py
Modified: CalendarServer/trunk/calendarserver/tools/shell/vfs.py
===================================================================
--- CalendarServer/trunk/calendarserver/tools/shell/vfs.py 2012-10-16 20:05:47 UTC (rev 9945)
+++ CalendarServer/trunk/calendarserver/tools/shell/vfs.py 2012-10-17 00:52:02 UTC (rev 9946)
@@ -256,19 +256,41 @@
@inlineCallbacks
def list(self):
- result = set()
+ results = {}
# FIXME: This should be the merged total of calendar homes and address book homes.
# FIXME: Merge in directory UIDs also?
- # FIXME: Add directory info (eg. name) to listing
+ # FIXME: Add directory info (eg. name) to list entry
- for txn, home in (yield self.service.store.eachCalendarHome()):
- result.add(ListEntry(self, PrincipalHomeFolder, home.uid()))
+ def addResult(uid):
+ if uid in results:
+ return
- returnValue(result)
+ record = self.service.directory.recordWithUID(uid)
+ if record:
+ info = {
+ "Record Type": record.recordType,
+ "Short Name" : record.shortNames[0],
+ "Full Name" : record.fullName,
+ }
+ else:
+ info = {}
+ results[uid] = ListEntry(self, PrincipalHomeFolder, uid, **info)
+ txn = self.service.store.newTransaction()
+ try:
+ for home in (yield txn.calendarHomes()):
+ addResult(home.uid())
+ for home in (yield txn.addressbookHomes()):
+ addResult(home.uid())
+ finally:
+ txn.abort()
+ returnValue(results.itervalues())
+
+
+
class RecordFolder(Folder):
def _recordForName(self, name):
recordTypeAttr = "recordType_" + self.recordType
@@ -358,67 +380,76 @@
if not hasattr(self, "_didInitChildren"):
txn = self.service.store.newTransaction()
- if (
- self.record is not None and
- self.service.config.EnableCalDAV and
- self.record.enabledForCalendaring
- ):
- create = True
- else:
- create = False
+ try:
+ if (
+ self.record is not None and
+ self.service.config.EnableCalDAV and
+ self.record.enabledForCalendaring
+ ):
+ create = True
+ else:
+ create = False
- # Try assuming it exists
- home = (yield txn.calendarHomeWithUID(self.uid, create=False))
+ # Try assuming it exists
+ home = (yield txn.calendarHomeWithUID(self.uid, create=False))
- if home is None and create:
- # Doesn't exist, so create it in a different
- # transaction, to avoid having to commit the live
- # transaction.
- txnTemp = self.service.store.newTransaction()
- home = (yield txnTemp.calendarHomeWithUID(self.uid, create=True))
- (yield txnTemp.commit())
+ if home is None and create:
+ # Doesn't exist, so create it in a different
+ # transaction, to avoid having to commit the live
+ # transaction.
+ txnTemp = self.service.store.newTransaction()
+ try:
+ home = (yield txnTemp.calendarHomeWithUID(self.uid, create=True))
+ (yield txnTemp.commit())
- # Fetch the home again. This time we expect it to be there.
- home = (yield txn.calendarHomeWithUID(self.uid, create=False))
- assert home
+ # Fetch the home again. This time we expect it to be there.
+ home = (yield txn.calendarHomeWithUID(self.uid, create=False))
+ assert home
+ finally:
+ txn.abort()
- if home:
- self._children["calendars"] = CalendarHomeFolder(
- self.service,
- self.path + ("calendars",),
- home,
- self.record,
- )
+ if home:
+ self._children["calendars"] = CalendarHomeFolder(
+ self.service,
+ self.path + ("calendars",),
+ home,
+ self.record,
+ )
- if (
- self.record is not None and
- self.service.config.EnableCardDAV and
- self.record.enabledForAddressBooks
- ):
- create = True
- else:
- create = False
+ if (
+ self.record is not None and
+ self.service.config.EnableCardDAV and
+ self.record.enabledForAddressBooks
+ ):
+ create = True
+ else:
+ create = False
- # Again, assume it exists
- home = (yield txn.addressbookHomeWithUID(self.uid))
+ # Again, assume it exists
+ home = (yield txn.addressbookHomeWithUID(self.uid))
- if not home and create:
- # Repeat the above dance.
- txnTemp = self.service.store.newTransaction()
- home = (yield txnTemp.addressbookHomeWithUID(self.uid, create=True))
- (yield txnTemp.commit())
+ if not home and create:
+ # Repeat the above dance.
+ txnTemp = self.service.store.newTransaction()
+ try:
+ home = (yield txnTemp.addressbookHomeWithUID(self.uid, create=True))
+ (yield txnTemp.commit())
- # Fetch the home again. This time we expect it to be there.
- home = (yield txn.addressbookHomeWithUID(self.uid, create=False))
- assert home
+ # Fetch the home again. This time we expect it to be there.
+ home = (yield txn.addressbookHomeWithUID(self.uid, create=False))
+ assert home
+ finally:
+ txn.abort()
- if home:
- self._children["addressbooks"] = AddressBookHomeFolder(
- self.service,
- self.path + ("addressbooks",),
- home,
- self.record,
- )
+ if home:
+ self._children["addressbooks"] = AddressBookHomeFolder(
+ self.service,
+ self.path + ("addressbooks",),
+ home,
+ self.record,
+ )
+ finally:
+ txn.abort()
self._didInitChildren = True
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20121016/cf8933f4/attachment.html>
More information about the calendarserver-changes
mailing list