[CalendarServer-changes] [1252] CalendarServer/trunk

source_changes at macosforge.org source_changes at macosforge.org
Fri Feb 23 13:31:20 PST 2007


Revision: 1252
          http://trac.macosforge.org/projects/calendarserver/changeset/1252
Author:   cdaboo at apple.com
Date:     2007-02-23 13:31:19 -0800 (Fri, 23 Feb 2007)

Log Message:
-----------
Split api for query into "simple" and "compound" versions that take simple string objects as arguments, rather than complex
nested dicts. Now the compound expression has to be genereted in Python and passed in. A new dsquery python module has been
created to aid creation of compound exprssion strings.

Fix lookup of locations so that it looks for /Resources record types with a specific resource type value.

Modified Paths:
--------------
    CalendarServer/trunk/run
    CalendarServer/trunk/twistedcaldav/directory/appleopendirectory.py

Modified: CalendarServer/trunk/run
===================================================================
--- CalendarServer/trunk/run	2007-02-23 21:21:24 UTC (rev 1251)
+++ CalendarServer/trunk/run	2007-02-23 21:31:19 UTC (rev 1252)
@@ -417,7 +417,7 @@
   if ! py_have_module opendirectory; then
     opendirectory="${top}/PyOpenDirectory";
 
-    svn_get "PyOpenDirectory" "${opendirectory}" "${svn_uri_base}/PyOpenDirectory/trunk" 1213;
+    svn_get "PyOpenDirectory" "${opendirectory}" "${svn_uri_base}/PyOpenDirectory/trunk" 1251;
     py_build "PyOpenDirectory" "${opendirectory}" false;
     py_install "PyOpenDirectory" "${opendirectory}";
 

Modified: CalendarServer/trunk/twistedcaldav/directory/appleopendirectory.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/appleopendirectory.py	2007-02-23 21:21:24 UTC (rev 1251)
+++ CalendarServer/trunk/twistedcaldav/directory/appleopendirectory.py	2007-02-23 21:31:19 UTC (rev 1252)
@@ -29,6 +29,7 @@
 
 import opendirectory
 import dsattributes
+import dsquery
 
 from twisted.python import log
 from twisted.internet.threads import deferToThread
@@ -123,12 +124,12 @@
             dsattributes.kDS1AttrXMLPlist,
         ]
 
-        records = opendirectory.queryRecordsWithAttributes(
+        records = opendirectory.queryRecordsWithAttribute(
             self.directory,
-            { dsattributes.kDS1AttrXMLPlist: vhostname },
+            dsattributes.kDS1AttrXMLPlist,
+            vhostname,
             dsattributes.eDSContains,
             True,    # case insentive for hostnames
-            False,
             dsattributes.kDSStdRecordTypeComputers,
             attrs
         )
@@ -304,35 +305,61 @@
                 dsattributes.kDSNAttrServicesLocator,
             ]
 
+            query = None
             if recordType == DirectoryService.recordType_users:
                 listRecordType = dsattributes.kDSStdRecordTypeUsers
+
             elif recordType == DirectoryService.recordType_groups:
                 listRecordType = dsattributes.kDSStdRecordTypeGroups
                 attrs.append(dsattributes.kDSNAttrGroupMembers)
+
             elif recordType == DirectoryService.recordType_locations:
-                listRecordType = dsattributes.kDSStdRecordTypeLocations
+                listRecordType = dsattributes.kDSStdRecordTypeResources
+                query = dsquery.match(dsattributes.kDSNAttrResourceType, "1", dsattributes.eDSExact)
+            
             elif recordType == DirectoryService.recordType_resources:
                 listRecordType = dsattributes.kDSStdRecordTypeResources
+                query = dsquery.expression(dsquery.expression.OR, (
+                    dsquery.match(dsattributes.kDSNAttrResourceType, "0", dsattributes.eDSExact),
+                    dsquery.match(dsattributes.kDSNAttrResourceType, "2", dsattributes.eDSExact),
+                    dsquery.match(dsattributes.kDSNAttrResourceType, "3", dsattributes.eDSExact),
+                    dsquery.match(dsattributes.kDSNAttrResourceType, "4", dsattributes.eDSExact),
+                    dsquery.match(dsattributes.kDSNAttrResourceType, "5", dsattributes.eDSExact),
+                ))
+            
             else:
                 raise UnknownRecordTypeError("Unknown Open Directory record type: %s"
                                              % (recordType,))
 
+            if self.requireComputerRecord:
+                cprecord = dsquery.match(dsattributes.kDSNAttrServicesLocator, self.servicetag, dsattributes.eDSStartsWith)
+                if query:
+                    query = dsquery.expression(dsquery.expression.AND, (cprecord, query))
+                else:
+                    query = cprecord
+                
             records = {}
 
             try:
-                if self.requireComputerRecord:
-                    query = {
-                        dsattributes.kDSNAttrServicesLocator: self.servicetag,
-                    }
-                    results = opendirectory.queryRecordsWithAttributes(
-                        self.directory,
-                        query,
-                        dsattributes.eDSStartsWith,
-                        False,
-                        False,
-                        listRecordType,
-                        attrs,
-                    )
+                if query:
+                    if isinstance(query, dsquery.match):
+                        results = opendirectory.queryRecordsWithAttribute(
+                            self.directory,
+                            query.attribute,
+                            query.value,
+                            query.matchType,
+                            False,
+                            listRecordType,
+                            attrs,
+                        )
+                    else:
+                        results = opendirectory.queryRecordsWithAttributes(
+                            self.directory,
+                            query.generate(),
+                            False,
+                            listRecordType,
+                            attrs,
+                        )
                 else:
                     results = opendirectory.listAllRecordsWithAttributes(
                         self.directory,

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20070223/c9c49ad7/attachment.html


More information about the calendarserver-changes mailing list