[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