[CalendarServer-changes] [8374] CalendarServer/trunk/calendarserver/tools/shell.py
source_changes at macosforge.org
source_changes at macosforge.org
Fri Dec 2 17:45:10 PST 2011
Revision: 8374
http://trac.macosforge.org/projects/calendarserver/changeset/8374
Author: wsanchez at apple.com
Date: 2011-12-02 17:45:09 -0800 (Fri, 02 Dec 2011)
Log Message:
-----------
Add directory-based principal paths.
Modified Paths:
--------------
CalendarServer/trunk/calendarserver/tools/shell.py
Modified: CalendarServer/trunk/calendarserver/tools/shell.py
===================================================================
--- CalendarServer/trunk/calendarserver/tools/shell.py 2011-12-03 00:17:44 UTC (rev 8373)
+++ CalendarServer/trunk/calendarserver/tools/shell.py 2011-12-03 01:45:09 UTC (rev 8374)
@@ -555,14 +555,37 @@
class RootFolder(Folder):
"""
Root of virtual data hierarchy.
+
+ Hierarchy:
+ / RootFolder
+ uids/ UIDsFolder
+ <uid>/ PrincipalHomeFolder
+ calendars/ CalendarHomeFolder
+ <name>/ CalendarFolder
+ <uid> CalendarObject
+ addressbooks/ AddressBookHomeFolder
+ <name>/ AddressBookFolder
+ <uid> AddressBookObject
+ users/ UsersFolder
+ <name>/ PrincipalHomeFolder
+ ...
+ locations/ LocationsFolder
+ <name>/ PrincipalHomeFolder
+ ...
+ resources/ ResourcesFolder
+ <name>/ PrincipalHomeFolder
+ ...
"""
def __init__(self, service):
Folder.__init__(self, service, ())
- self._childClasses["uids"] = UIDFolder
+ self._childClasses["uids" ] = UIDsFolder
+ self._childClasses["users" ] = UsersFolder
+ self._childClasses["locations"] = LocationsFolder
+ self._childClasses["resources"] = ResourcesFolder
-class UIDFolder(Folder):
+class UIDsFolder(Folder):
"""
Folder containing all principals by UID.
"""
@@ -583,21 +606,84 @@
returnValue(result)
+
+class RecordFolder(Folder):
+ def _recordForName(self, name):
+ recordTypeAttr = "recordType_" + self.recordType
+ recordType = getattr(self.service.directory, recordTypeAttr)
+
+ log.msg("Record type = %s" % (recordType,))
+
+ return self.service.directory.recordWithShortName(recordType, name)
+
+ def child(self, name):
+ record = self._recordForName(name)
+ log.msg("Record = %s" % (record,))
+ return PrincipalHomeFolder(
+ self.service,
+ self.path + (record.uid,),
+ record.uid,
+ record=record
+ )
+
+ @inlineCallbacks
+ def list(self):
+ result = []
+
+ # ...
+
+ returnValue(result)
+
+
+class UsersFolder(RecordFolder):
+ """
+ Folder containing all user principals by name.
+ """
+ recordType = "users"
+
+
+class LocationsFolder(RecordFolder):
+ """
+ Folder containing all location principals by name.
+ """
+ recordType = "locations"
+
+
+class ResourcesFolder(RecordFolder):
+ """
+ Folder containing all resource principals by name.
+ """
+ recordType = "resources"
+
+
class PrincipalHomeFolder(Folder):
"""
Folder containing everything related to a given principal.
"""
- def __init__(self, service, path, uid):
+ def __init__(self, service, path, uid, record=None):
Folder.__init__(self, service, path)
+ if record is not None:
+ assert uid == record.uid
+
self.uid = uid
+ self.record = record
@inlineCallbacks
def _initChildren(self):
if not hasattr(self, "_didInitChildren"):
txn = self.service.store.newTransaction()
- home = (yield txn.calendarHomeWithUID(self.uid))
+ if (
+ self.record is not None and
+ self.service.config.EnableCalDAV and
+ self.record.enabledForCalendaring
+ ):
+ create = True
+ else:
+ create = False
+
+ home = (yield txn.calendarHomeWithUID(self.uid, create=create))
if home:
self._children["calendars"] = CalendarHomeFolder(
self.service,
@@ -605,6 +691,15 @@
home,
)
+ if (
+ self.record is not None and
+ self.service.config.EnableCardDAV and
+ self.record.enabledForAddressBooks
+ ):
+ create = True
+ else:
+ create = False
+
home = (yield txn.addressbookHomeWithUID(self.uid))
if home:
self._children["addressbooks"] = AddressBookHomeFolder(
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20111202/a85e8641/attachment-0001.html>
More information about the calendarserver-changes
mailing list