[CalendarServer-changes] [8956] CalendarServer/branches/users/gaya/ldapdirectorybacker/twistedcaldav /directory/opendirectorybacker.py
source_changes at macosforge.org
source_changes at macosforge.org
Fri Mar 30 17:05:56 PDT 2012
Revision: 8956
http://trac.macosforge.org/projects/calendarserver/changeset/8956
Author: gaya at apple.com
Date: 2012-03-30 17:05:55 -0700 (Fri, 30 Mar 2012)
Log Message:
-----------
Clean up ABDirectoryQueryResult and its use
Modified Paths:
--------------
CalendarServer/branches/users/gaya/ldapdirectorybacker/twistedcaldav/directory/opendirectorybacker.py
Modified: CalendarServer/branches/users/gaya/ldapdirectorybacker/twistedcaldav/directory/opendirectorybacker.py
===================================================================
--- CalendarServer/branches/users/gaya/ldapdirectorybacker/twistedcaldav/directory/opendirectorybacker.py 2012-03-30 22:08:34 UTC (rev 8955)
+++ CalendarServer/branches/users/gaya/ldapdirectorybacker/twistedcaldav/directory/opendirectorybacker.py 2012-03-31 00:05:55 UTC (rev 8956)
@@ -232,25 +232,28 @@
self._dsLocalRecords = []
for (recordShortName, value) in results: #@UnusedVariable
- record = ABDirectoryQueryResult(self.directoryBackedAddressBook, value, "/Local/Default")
+ try:
+ record = ABDirectoryQueryResult(self.directoryBackedAddressBook, value, "/Local/Default")
+ except:
+ traceback.print_exc()
+ self.log_info("Could not get vcard for record %s" % (record,))
+
+ else:
+ uid = record.vCard().getProperty("UID").value()
- if self.ignoreSystemRecords:
- # remove system users and people
- if record.guid.startswith("FFFFEEEE-DDDD-CCCC-BBBB-AAAA"):
- self.log_info("Ignoring vcard for system record %s" % (record,))
+ if self.ignoreSystemRecords:
+ # remove system users and people
+ if uid.startswith("FFFFEEEE-DDDD-CCCC-BBBB-AAAA"):
+ self.log_info("Ignoring vcard for system record %s" % (record,))
+ continue
+
+ if uid in records:
+ self.log_info("Record skipped due to duplicate UID: %s" % (record,))
continue
+
+ self.log_debug("VCard text =\n%s" % (record.vCardText(), ))
+ records[uid] = record
- if record.guid in records:
- self.log_info("Record skipped due to conflict (duplicate uuid): %s" % (record,))
- else:
- try:
- vCardText = record.vCardText()
- except:
- traceback.print_exc()
- self.log_info("Could not get vcard for record %s" % (record,))
- else:
- self.log_debug("VCard text =\n%s" % (vCardText, ))
- records[record.guid] = record
return records
@@ -285,23 +288,33 @@
for (recordShortName, value) in queryResults: #@UnusedVariable
- record = ABDirectoryQueryResult(self.directoryBackedAddressBook, value, defaultNodeName=self.defaultNodeName,
- generateSimpleUIDs=self.generateSimpleUIDs,
- addDSAttrXProperties=self.addDSAttrXProperties,
- appleInternalServer=self.appleInternalServer,
- )
+ try:
+ record = ABDirectoryQueryResult(self.directoryBackedAddressBook, value,
+ defaultNodeName=self.defaultNodeName,
+ generateSimpleUIDs=self.generateSimpleUIDs,
+ addDSAttrXProperties=self.addDSAttrXProperties,
+ appleInternalServer=self.appleInternalServer,
+ )
+ except:
+ traceback.print_exc()
+ self.log_info("Could not get vcard for record %s" % (record,))
+
+ else:
+ uid = record.vCard().getProperty("UID").value()
- if self.ignoreSystemRecords:
- # remove system users and people
- if record.guid.startswith("FFFFEEEE-DDDD-CCCC-BBBB-AAAA"):
- self.log_info("Ignoring vcard for system record %s" % (record,))
+ if self.ignoreSystemRecords:
+ # remove system users and people
+ if uid.startswith("FFFFEEEE-DDDD-CCCC-BBBB-AAAA"):
+ self.log_info("Ignoring vcard for system record %s" % (record,))
+ continue
+
+ if uid in records:
+ self.log_info("Record skipped due to duplicate UID: %s" % (record,))
continue
+
+ self.log_debug("VCard text =\n%s" % (record.vCardText(), ))
+ records[uid] = record
- if record.guid in records:
- self.log_info("Ignoring vcard for record due to conflict (duplicate uuid): %s" % (record,))
- else:
- records[record.guid] = record
-
self.log_debug("After filtering, %s records (limited=%s)." % (len(records), limited))
returnValue((records, limited, ))
@@ -450,20 +463,11 @@
maxRecords = int(maxResults * 1.2)
if self.maxDSQueryRecords and maxRecords > self.maxDSQueryRecords:
maxRecords = self.maxDSQueryRecords
-
+
records, limited = (yield self._getDirectoryRecords(dsFilter, attributes, maxRecords))
- #filter out bad records --- should only happen during development
for record in records.values():
- try:
- vCardText = record.vCardText()
- except:
- traceback.print_exc()
- self.log_info("Could not get vcard for record %s" % (record,))
- else:
- if not record.firstValueForAttribute(dsattributes.kDSNAttrMetaNodeLocation).startswith("/Local"):
- self.log_debug("VCard text =\n%s" % (vCardText, ))
- queryRecords.append(record)
+ queryRecords.append(record)
returnValue((queryRecords, limited,))
@@ -1002,9 +1006,6 @@
self._directoryBackedAddressBook = directoryBackedAddressBook
self._vCard = None
- self._vCardText = None
- self._uriName = None
- self._hRef = None
#clean attributes
self.attributes = {}
@@ -1034,20 +1035,17 @@
guid = ABDirectoryQueryResult.peopleUIDSeparator.join([nodeUUIDStr, nameUUIDStr,])
self.attributes[dsattributes.kDS1AttrGeneratedUID] = guid
- self.guid = guid
-
+ #generate a vCard here. May throw an exception
+ self.vCard()
def __repr__(self):
- return "<%s[%s(%s)] %s" % (
+ return "<%s[%s(%s)]>" % (
self.__class__.__name__,
- self.firstValueForAttribute(dsattributes.kDSNAttrRecordType),
- self.firstValueForAttribute(dsattributes.kDSNAttrMetaNodeLocation),
- self.guid,
- #self.shortNames,
- #self.fullName
+ self.vCard().getProperty("FN").value(),
+ self.vCard().getProperty("UID").value()
)
def __hash__(self):
@@ -1057,12 +1055,6 @@
])
return hash(s)
- """
- def nextFileName(self):
- self.renameCounter += 1
- self.fileName = self.baseFileName + "-" + str(self.renameCounter)
- self.fileNameLower = self.fileName.lower()
- """
def hasAttribute(self, attributeName ):
return self.valuesForAttribute(attributeName, None) is not None
@@ -1468,9 +1460,10 @@
# dsattributes.kDS1AttrGeneratedUID, # Used for 36 character (128 bit) unique ID. Usually found in user,
# group, and computer records. An example value is "A579E95E-CDFE-4EBC-B7E7-F2158562170F".
# The standard format contains 32 hex characters and four hyphen characters.
- # !! don't use self.guid which is URL encoded
+
vcard.addProperty(Property("UID", self.firstValueForAttribute(dsattributes.kDS1AttrGeneratedUID)))
+
# 3.6.8 URL Type Definition
# dsattributes.kDSNAttrURL, # List of URLs.
# dsattributes.kDS1AttrWeblogURI, # Single-valued attribute that defines the URI of a user's weblog.
@@ -1601,25 +1594,16 @@
return self._vCard
def vCardText(self):
- if not self._vCardText:
- self._vCardText = str(self.vCard())
-
- return self._vCardText
-
+ return str(self.vCard())
+
def uriName(self):
- if not self._uriName:
- self._uriName = self.vCard().getProperty("UID").value() + ".vcf"
- #print("uriName():self._uriName=%s" % self._uriName)
- return self._uriName
+ return self.vCard().getProperty("UID").value() + ".vcf"
-
def hRef(self, parentURI="/directory/"):
- if not self._hRef:
- self._hRef = davxml.HRef.fromString(joinURL(parentURI, self.uriName()))
-
- return self._hRef
-
-
+ # FIXME: Get the parent URI from self._directoryBackedAddressBook
+ return davxml.HRef.fromString(joinURL(parentURI, self.uriName()))
+
+
def readProperty(self, property, request):
if type(property) is tuple:
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20120330/4f84e0db/attachment-0001.html>
More information about the calendarserver-changes
mailing list