[CalendarServer-changes] [8338] CalendarServer/trunk/calendarserver/tools/shell.py
source_changes at macosforge.org
source_changes at macosforge.org
Fri Nov 18 16:37:06 PST 2011
Revision: 8338
http://trac.macosforge.org/projects/calendarserver/changeset/8338
Author: wsanchez at apple.com
Date: 2011-11-18 16:37:05 -0800 (Fri, 18 Nov 2011)
Log Message:
-----------
Populate PrincipalHomeFolder on-demand.
Modified Paths:
--------------
CalendarServer/trunk/calendarserver/tools/shell.py
Modified: CalendarServer/trunk/calendarserver/tools/shell.py
===================================================================
--- CalendarServer/trunk/calendarserver/tools/shell.py 2011-11-18 23:55:29 UTC (rev 8337)
+++ CalendarServer/trunk/calendarserver/tools/shell.py 2011-11-19 00:37:05 UTC (rev 8338)
@@ -546,7 +546,10 @@
raise NotFoundError("Folder %r has no child %r" % (str(self), name))
def list(self):
- return succeed(("%s/" % (n,) for n in self._childClasses))
+ result = set()
+ result.update(self._children)
+ result.update(self._childClasses)
+ return succeed(result)
class RootFolder(Folder):
@@ -589,22 +592,48 @@
self.uid = uid
- @inlineCallbacks
- def calendarHomeFolder(service, path):
+ @inlineCallbacks
+ def _initChildren(self):
+ if not hasattr(self, "_didInitChildren"):
txn = self.service.store.newTransaction()
+
home = (yield txn.calendarHomeWithUID(self.uid))
+ if home:
+ self._children["calendars"] = CalendarHomeFolder(
+ self.service,
+ self.path + ("calendars",),
+ home,
+ )
+ home = (yield txn.addressbookHomeWithUID(self.uid))
if home:
- returnValue(CalendarHomeFolder(service, path, home))
- else:
- returnValue(Folder(service, path))
+ self._children["addressbooks"] = AddressBookHomeFolder(
+ self.service,
+ self.path + ("addressbooks",),
+ home,
+ )
- self._childClasses["calendars"] = calendarHomeFolder
+ self._didInitChildren = True
+ def _needsChildren(m):
+ def decorate(self, *args, **kwargs):
+ d = self._initChildren()
+ d.addCallback(lambda _: m(self, *args, **kwargs))
+ return d
+ return decorate
+ @_needsChildren
+ def child(self, name):
+ return Folder.child(self, name)
+
+ @_needsChildren
+ def list(self):
+ return Folder.list(self)
+
+
class CalendarHomeFolder(Folder):
"""
- Home folder.
+ Calendar home folder.
"""
def __init__(self, service, path, home):
Folder.__init__(self, service, path)
@@ -761,7 +790,13 @@
returnValue("\n".join(result))
+class AddressBookHomeFolder(Folder):
+ """
+ Address book home folder.
+ """
+ # FIXME
+
def main(argv=sys.argv, stderr=sys.stderr, reactor=None):
if reactor is None:
from twisted.internet import reactor
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20111118/4a9e575c/attachment.html>
More information about the calendarserver-changes
mailing list