[CalendarServer-changes] [13028] twext/trunk/twext/who/aggregate.py
source_changes at macosforge.org
source_changes at macosforge.org
Fri Mar 28 12:34:47 PDT 2014
Revision: 13028
http://trac.calendarserver.org//changeset/13028
Author: wsanchez at apple.com
Date: 2014-03-28 12:34:47 -0700 (Fri, 28 Mar 2014)
Log Message:
-----------
Implement recordWith* methods.
Modified Paths:
--------------
twext/trunk/twext/who/aggregate.py
Modified: twext/trunk/twext/who/aggregate.py
===================================================================
--- twext/trunk/twext/who/aggregate.py 2014-03-28 19:31:41 UTC (rev 13027)
+++ twext/trunk/twext/who/aggregate.py 2014-03-28 19:34:47 UTC (rev 13028)
@@ -79,10 +79,23 @@
return self._recordType
- def recordsFromExpression(self, expression, records=None):
+ @inlineCallbacks
+ def _oneFromSubServices(self, methodName, *args, **kwargs):
+ for service in self.services:
+ m = getattr(service, methodName)
+ record = yield m(*args, **kwargs)
+
+ if record is not None:
+ returnValue(record)
+
+ returnValue(None)
+
+
+ def _gatherFromSubServices(self, methodName, *args, **kwargs):
ds = []
for service in self.services:
- d = service.recordsFromExpression(expression, records=records)
+ m = getattr(service, methodName)
+ d = m(*args, **kwargs)
ds.append(d)
def unwrapFirstError(f):
@@ -95,33 +108,57 @@
return d
- @inlineCallbacks
+ def recordsFromExpression(self, expression, records=None):
+ return self._gatherFromSubServices(
+ "recordsFromExpression", expression, records=None
+ )
+
+
+ # Implementation of recordWith*() methods may seem unnecessary here, since
+ # they eventually end up at recordsFromExpression() anyway (in our
+ # superclass).
+ # However, the wrapped services may have optimzed versions of these, so we
+ # want to call their implementations, not bypass them.
+
+
+ def recordsWithFieldValue(self, fieldName, value):
+ return self._gatherFromSubServices(
+ "recordsWithFieldValue", fieldName, value
+ )
+
+
def recordWithUID(self, uid):
- for service in self.services:
- record = yield service.recordWithUID(uid)
- if record is not None:
- returnValue(record)
- returnValue(None)
+ return self._oneFromSubServices("recordWithUID", uid)
- def recordWithShortName(self, recordType, shortName):
+ def recordWithGUID(self, guid):
+ return self._oneFromSubServices("recordWithGUID", guid)
+
+
+ def recordsWithRecordType(self, recordType):
# Since we know the recordType, we can go directly to the appropriate
# service.
for service in self.services:
if recordType in service.recordTypes():
- return service.recordWithShortName(recordType, shortName)
- return succeed(None)
+ return service.recordsWithRecordType(recordType)
+ return succeed(())
- def recordsWithRecordType(self, recordType):
+ def recordWithShortName(self, recordType, shortName):
# Since we know the recordType, we can go directly to the appropriate
# service.
for service in self.services:
if recordType in service.recordTypes():
- return service.recordsWithRecordType(recordType)
- return succeed(())
+ return service.recordWithShortName(recordType, shortName)
+ return succeed(None)
+ def recordsWithEmailAddress(self, emailAddress):
+ return self._gatherFromSubServices(
+ "recordsWithEmailAddress", emailAddress
+ )
+
+
@inlineCallbacks
def updateRecords(self, records, create=False):
for record in records:
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20140328/1ceee205/attachment-0001.html>
More information about the calendarserver-changes
mailing list