[CalendarServer-changes] [12916] CalendarServer/branches/users/sagen/move2who-4/txdav/who

source_changes at macosforge.org source_changes at macosforge.org
Fri Mar 14 15:43:31 PDT 2014


Revision: 12916
          http://trac.calendarserver.org//changeset/12916
Author:   wsanchez at apple.com
Date:     2014-03-14 15:43:31 -0700 (Fri, 14 Mar 2014)
Log Message:
-----------
Minor cleanup

Modified Paths:
--------------
    CalendarServer/branches/users/sagen/move2who-4/txdav/who/augment.py
    CalendarServer/branches/users/sagen/move2who-4/txdav/who/delegates.py
    CalendarServer/branches/users/sagen/move2who-4/txdav/who/directory.py
    CalendarServer/branches/users/sagen/move2who-4/txdav/who/idirectory.py
    CalendarServer/branches/users/sagen/move2who-4/txdav/who/util.py

Modified: CalendarServer/branches/users/sagen/move2who-4/txdav/who/augment.py
===================================================================
--- CalendarServer/branches/users/sagen/move2who-4/txdav/who/augment.py	2014-03-14 20:39:02 UTC (rev 12915)
+++ CalendarServer/branches/users/sagen/move2who-4/txdav/who/augment.py	2014-03-14 22:43:31 UTC (rev 12916)
@@ -19,65 +19,41 @@
 Augmenting Directory Service
 """
 
+__all__ = [
+    "AugmentedDirectoryService",
+]
+
+from zope.interface import implementer
+
+from twisted.internet.defer import inlineCallbacks, returnValue
+
 from twext.python.log import Logger
 from twext.who.directory import DirectoryRecord
 from twext.who.directory import DirectoryService as BaseDirectoryService
 from twext.who.idirectory import IDirectoryService, RecordType
 from twext.who.util import ConstantsContainer
-from twisted.internet.defer import inlineCallbacks, returnValue
+
 from txdav.common.idirectoryservice import IStoreDirectoryService
 from txdav.who.directory import (
     CalendarDirectoryRecordMixin, CalendarDirectoryServiceMixin
 )
 from txdav.who.idirectory import AutoScheduleMode, FieldName
-from zope.interface import implementer
 
-
 log = Logger()
 
 
-class AugmentedDirectoryRecord(DirectoryRecord, CalendarDirectoryRecordMixin):
 
-    def __init__(self, service, baseRecord, augmentedFields):
-        DirectoryRecord.__init__(self, service, augmentedFields)
-        self._baseRecord = baseRecord
+ at implementer(IDirectoryService, IStoreDirectoryService)
+class AugmentedDirectoryService(
+    BaseDirectoryService, CalendarDirectoryServiceMixin
+):
+    """
+    Augmented directory service.
 
+    This is a directory service that wraps an L{IDirectoryService} and augments
+    directory records with additional or modified fields.
+    """
 
-    @inlineCallbacks
-    def members(self):
-        augmented = []
-        records = yield self._baseRecord.members()
-        for record in records:
-            augmented.append((yield self.service.augment(record)))
-        returnValue(augmented)
-
-
-    @inlineCallbacks
-    def groups(self):
-        augmented = []
-        txn = self.service._store.newTransaction()
-        groupUIDs = yield txn.groupsFor(self.uid)
-        for groupUID in groupUIDs:
-            groupRecord = yield self.service.recordWithShortName(
-                RecordType.group, groupUID
-            )
-            if groupRecord:
-                augmented.append((yield self.service.augment(groupRecord)))
-        returnValue(augmented)
-
-
-    def verifyPlaintextPassword(self, password):
-        return self._baseRecord.verifyPlaintextPassword(password)
-
-
-    def verifyHTTPDigest(self, *args):
-        return self._baseRecord.verifyHTTPDigest(*args)
-
-
- at implementer(IDirectoryService, IStoreDirectoryService)
-class AugmentedDirectoryService(BaseDirectoryService,
-                                CalendarDirectoryServiceMixin):
-
     fieldName = ConstantsContainer((
         BaseDirectoryService.fieldName,
         FieldName,
@@ -86,9 +62,7 @@
 
     @property
     def recordType(self):
-        """
-        Defer to the directory service we're augmenting
-        """
+        # Defer to the directory service we're augmenting
         return self._directory.recordType
 
 
@@ -100,6 +74,7 @@
 
 
     def recordTypes(self):
+        # Defer to the directory service we're augmenting
         return self._directory.recordTypes()
 
 
@@ -108,7 +83,7 @@
         records = yield self._directory.recordsFromExpression(expression)
         augmented = []
         for record in records:
-            record = yield self.augment(record)
+            record = yield self._augment(record)
             augmented.append(record)
         returnValue(augmented)
 
@@ -120,7 +95,7 @@
         )
         augmented = []
         for record in records:
-            record = yield self.augment(record)
+            record = yield self._augment(record)
             augmented.append(record)
         returnValue(augmented)
 
@@ -133,14 +108,14 @@
             uid = uid.decode("utf-8")
 
         record = yield self._directory.recordWithUID(uid)
-        record = yield self.augment(record)
+        record = yield self._augment(record)
         returnValue(record)
 
 
     @inlineCallbacks
     def recordWithGUID(self, guid):
         record = yield self._directory.recordWithGUID(guid)
-        record = yield self.augment(record)
+        record = yield self._augment(record)
         returnValue(record)
 
 
@@ -149,7 +124,7 @@
         records = yield self._directory.recordsWithRecordType(recordType)
         augmented = []
         for record in records:
-            record = yield self.augment(record)
+            record = yield self._augment(record)
             augmented.append(record)
         returnValue(augmented)
 
@@ -166,8 +141,10 @@
             log.warn("Need to change shortName to unicode")
             shortName = shortName.decode("utf-8")
 
-        record = yield self._directory.recordWithShortName(recordType, shortName)
-        record = yield self.augment(record)
+        record = yield self._directory.recordWithShortName(
+            recordType, shortName
+        )
+        record = yield self._augment(record)
         # log.debug(
         #     "Augment - recordWithShortName {rt}, {n} returned {r}, {u}",
         #     rt=recordType.name,
@@ -188,17 +165,18 @@
         records = yield self._directory.recordsWithEmailAddress(emailAddress)
         augmented = []
         for record in records:
-            record = yield self.augment(record)
+            record = yield self._augment(record)
             augmented.append(record)
         returnValue(augmented)
 
 
+    # FIXME: This shouldn't be here; we have recordsWithRecordType() above
     @inlineCallbacks
     def listRecords(self, recordType):
         records = yield self._directory.listRecords(recordType)
         augmented = []
         for record in records:
-            record = yield self.augment(record)
+            record = yield self._augment(record)
             augmented.append(record)
         returnValue(augmented)
 
@@ -213,13 +191,13 @@
         return self._directory.removeRecords(uids)
 
 
-    def assignToField(self, fields, name, value):
+    def _assignToField(self, fields, name, value):
         field = self.fieldName.lookupByName(name)
         fields[field] = value
 
 
     @inlineCallbacks
-    def augment(self, record):
+    def _augment(self, record):
         if record is None:
             returnValue(None)
 
@@ -240,14 +218,15 @@
         if augmentRecord:
             # record.enabled = augmentRecord.enabled
             # record.serverID = augmentRecord.serverID
-            self.assignToField(
+            self._assignToField(
                 fields, "hasCalendars",
                 augmentRecord.enabledForCalendaring
             )
-            self.assignToField(
+            self._assignToField(
                 fields, "hasContacts",
                 augmentRecord.enabledForAddressBooks
             )
+
             autoScheduleMode = {
                 "none": AutoScheduleMode.none,
                 "accept-always": AutoScheduleMode.accept,
@@ -256,42 +235,101 @@
                 "decline-if-busy": AutoScheduleMode.declineIfBusy,
                 "automatic": AutoScheduleMode.acceptIfFreeDeclineIfBusy,
             }.get(augmentRecord.autoScheduleMode, None)
-            self.assignToField(
+
+            self._assignToField(
                 fields, "autoScheduleMode",
                 autoScheduleMode
             )
-            self.assignToField(
+            self._assignToField(
                 fields, "autoAcceptGroup",
                 unicode(augmentRecord.autoAcceptGroup)
             )
-            self.assignToField(
+            self._assignToField(
                 fields, "loginAllowed",
                 augmentRecord.enabledForLogin
             )
 
             if (
                 (
-                    fields.get(self.fieldName.lookupByName("hasCalendars"), False) or
-                    fields.get(self.fieldName.lookupByName("hasContacts"), False)
-                ) and record.recordType == RecordType.group
+                    fields.get(
+                        self.fieldName.lookupByName("hasCalendars"), False
+                    ) or
+                    fields.get(
+                        self.fieldName.lookupByName("hasContacts"), False
+                    )
+                ) and
+                record.recordType == RecordType.group
             ):
-                self.assignToField(fields, "hasCalendars", False)
-                self.assignToField(fields, "hasContacts", False)
+                self._assignToField(fields, "hasCalendars", False)
+                self._assignToField(fields, "hasContacts", False)
 
                 # For augment records cloned from the Default augment record,
                 # don't emit this message:
                 if not augmentRecord.clonedFromDefault:
-                    log.error("Group '%s(%s)' cannot be enabled for calendaring or address books" % (record.guid, record.shortNames[0],))
+                    log.error(
+                        "Group {record} cannot be enabled for "
+                        "calendaring or address books",
+                        record=record
+                    )
 
         else:
             # Groups are by default always enabled
-            # record.enabled = (record.recordType == record.service.recordType_groups)
+            # record.enabled = (
+            #     record.recordType == record.service.recordType_groups
+            # )
             # record.serverID = ""
-            self.assignToField(fields, "hasCalendars", False)
-            self.assignToField(fields, "hasContacts", False)
-            self.assignToField(fields, "loginAllowed", False)
+            self._assignToField(fields, "hasCalendars", False)
+            self._assignToField(fields, "hasContacts", False)
+            self._assignToField(fields, "loginAllowed", False)
 
         # print("Augmented fields", fields)
 
         # Clone to a new record with the augmented fields
         returnValue(AugmentedDirectoryRecord(self, record, fields))
+
+
+
+class AugmentedDirectoryRecord(DirectoryRecord, CalendarDirectoryRecordMixin):
+    """
+    Augmented directory record.
+    """
+
+    def __init__(self, service, baseRecord, augmentedFields):
+        DirectoryRecord.__init__(self, service, augmentedFields)
+        self._baseRecord = baseRecord
+
+
+    @inlineCallbacks
+    def members(self):
+        augmented = []
+        records = yield self._baseRecord.members()
+
+        for record in records:
+            augmented.append((yield self.service._augment(record)))
+
+        returnValue(augmented)
+
+
+    @inlineCallbacks
+    def groups(self):
+        augmented = []
+
+        txn = self.service._store.newTransaction()
+        groupUIDs = yield txn.groupsFor(self.uid)
+
+        for groupUID in groupUIDs:
+            groupRecord = yield self.service.recordWithShortName(
+                RecordType.group, groupUID
+            )
+            if groupRecord:
+                augmented.append((yield self.service._augment(groupRecord)))
+
+        returnValue(augmented)
+
+
+    def verifyPlaintextPassword(self, password):
+        return self._baseRecord.verifyPlaintextPassword(password)
+
+
+    def verifyHTTPDigest(self, *args):
+        return self._baseRecord.verifyHTTPDigest(*args)

Modified: CalendarServer/branches/users/sagen/move2who-4/txdav/who/delegates.py
===================================================================
--- CalendarServer/branches/users/sagen/move2who-4/txdav/who/delegates.py	2014-03-14 20:39:02 UTC (rev 12915)
+++ CalendarServer/branches/users/sagen/move2who-4/txdav/who/delegates.py	2014-03-14 22:43:31 UTC (rev 12916)
@@ -31,7 +31,6 @@
 from twisted.internet.defer import inlineCallbacks, returnValue, succeed
 from twisted.python.constants import Names, NamedConstant
 
-
 log = Logger()
 
 
@@ -54,9 +53,9 @@
     writeDelegatorGroup.description = u"write-delegator-group"
 
 
+
 class DirectoryRecord(BaseDirectoryRecord):
 
-
     @inlineCallbacks
     def members(self, expanded=False):
         """
@@ -66,7 +65,7 @@
         the members will consist of the records who have delegated *to*
         this record.
         """
-        parentUID, proxyType = self.uid.split("#")
+        parentUID, proxyType = self.uid.split(u"#")
 
         txn = self.service._store.newTransaction()
 
@@ -87,7 +86,7 @@
         records = []
         for uid in delegateUIDs:
             if uid != parentUID:
-                record = (yield self.service._masterDirectory.recordWithUID(uid))
+                record = yield self.service._masterDirectory.recordWithUID(uid)
                 if record is not None:
                     records.append(record)
         yield txn.commit()
@@ -109,14 +108,13 @@
         ):
             raise NotAllowedError("Setting members not supported")
 
-        parentUID, proxyType = self.uid.split("#")
+        parentUID, proxyType = self.uid.split(u"#")
         readWrite = (self.recordType is RecordType.writeDelegateGroup)
 
         log.debug(
-            "Setting delegate assignments for {u} ({rw}) to {m}".format(
-                u=parentUID, rw=("write" if readWrite else "read"),
-                m=[r.uid for r in memberRecords]
-            )
+            "Setting delegate assignments for {u} ({rw}) to {m}",
+            u=parentUID, rw=("write" if readWrite else "read"),
+            m=[r.uid for r in memberRecords]
         )
 
         txn = self.service._store.newTransaction()
@@ -124,7 +122,9 @@
         yield txn.removeDelegates(parentUID, readWrite)
         yield txn.removeDelegateGroups(parentUID, readWrite)
 
-        delegator = yield self.service._masterDirectory.recordWithUID(parentUID)
+        delegator = (
+            yield self.service._masterDirectory.recordWithUID(parentUID)
+        )
 
         for delegate in memberRecords:
             yield addDelegate(txn, delegator, delegate, readWrite)

Modified: CalendarServer/branches/users/sagen/move2who-4/txdav/who/directory.py
===================================================================
--- CalendarServer/branches/users/sagen/move2who-4/txdav/who/directory.py	2014-03-14 20:39:02 UTC (rev 12915)
+++ CalendarServer/branches/users/sagen/move2who-4/txdav/who/directory.py	2014-03-14 22:43:31 UTC (rev 12916)
@@ -18,7 +18,6 @@
 Calendar/Contacts specific methods for DirectoryRecord
 """
 
-
 import uuid
 
 from twext.python.log import Logger

Modified: CalendarServer/branches/users/sagen/move2who-4/txdav/who/idirectory.py
===================================================================
--- CalendarServer/branches/users/sagen/move2who-4/txdav/who/idirectory.py	2014-03-14 20:39:02 UTC (rev 12915)
+++ CalendarServer/branches/users/sagen/move2who-4/txdav/who/idirectory.py	2014-03-14 22:43:31 UTC (rev 12916)
@@ -23,6 +23,9 @@
 """
 
 __all__ = [
+    "AutoScheduleMode",
+    "RecordType",
+    "FieldName",
 ]
 
 from twisted.python.constants import Names, NamedConstant

Modified: CalendarServer/branches/users/sagen/move2who-4/txdav/who/util.py
===================================================================
--- CalendarServer/branches/users/sagen/move2who-4/txdav/who/util.py	2014-03-14 20:39:02 UTC (rev 12915)
+++ CalendarServer/branches/users/sagen/move2who-4/txdav/who/util.py	2014-03-14 22:43:31 UTC (rev 12916)
@@ -42,8 +42,8 @@
     txdav.dps.client.DirectoryService
     """
 
-    # MOVE2WHO FIXME: this needs to talk to its own separate database.  In fact,
-    # don't pass store=None if you already have called storeFromConfig()
+    # MOVE2WHO FIXME: this needs to talk to its own separate database.  In
+    # fact, don't pass store=None if you already have called storeFromConfig()
     # within this process.  Pass the existing store in here.
     if store is None:
         pool, txnFactory = getDBPool(config)
@@ -70,13 +70,17 @@
             directory = XMLDirectoryService(fp)
 
         elif "opendirectory" in directoryType:
-            from twext.who.opendirectory import DirectoryService as ODDirectoryService
+            from twext.who.opendirectory import (
+                DirectoryService as ODDirectoryService
+            )
             directory = ODDirectoryService()
 
         elif "ldap" in directoryType:
             if params.credentials.dn and params.credentials.password:
-                creds = UsernamePassword(params.credentials.dn,
-                                         params.credentials.password)
+                creds = UsernamePassword(
+                    params.credentials.dn,
+                    params.credentials.password
+                )
             else:
                 creds = None
             directory = LDAPDirectoryService(
@@ -99,12 +103,15 @@
                 "resources": CalRecordType.resource,
                 "addresses": CalRecordType.address,
             }.get(recordTypeName, None)
+
             if recordType is None:
                 log.error("Invalid Record Type: {rt}", rt=recordTypeName)
                 raise DirectoryConfigurationError
+
             if recordType in types:
                 log.error("Duplicate Record Type: {rt}", rt=recordTypeName)
                 raise DirectoryConfigurationError
+
             types.append(recordType)
 
         directory.recordType = ConstantsContainer(types)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20140314/7808169b/attachment-0001.html>


More information about the calendarserver-changes mailing list