[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