[CalendarServer-changes] [9036] CalendarServer/trunk/calendarserver/tools/shell

source_changes at macosforge.org source_changes at macosforge.org
Wed Apr 11 16:57:27 PDT 2012


Revision: 9036
          http://trac.macosforge.org/projects/calendarserver/changeset/9036
Author:   wsanchez at apple.com
Date:     2012-04-11 16:57:27 -0700 (Wed, 11 Apr 2012)
Log Message:
-----------
Refactor record search and info generation to directory module.

Modified Paths:
--------------
    CalendarServer/trunk/calendarserver/tools/shell/cmd.py
    CalendarServer/trunk/calendarserver/tools/shell/directory.py

Modified: CalendarServer/trunk/calendarserver/tools/shell/cmd.py
===================================================================
--- CalendarServer/trunk/calendarserver/tools/shell/cmd.py	2012-04-11 23:36:08 UTC (rev 9035)
+++ CalendarServer/trunk/calendarserver/tools/shell/cmd.py	2012-04-11 23:57:27 UTC (rev 9036)
@@ -25,8 +25,6 @@
     "Commands",
 ]
 
-import operator
-
 #from twisted.python import log
 from twisted.internet.defer import succeed
 from twisted.internet.defer import inlineCallbacks, returnValue
@@ -37,6 +35,7 @@
 
 from calendarserver.tools.tables import Table
 from calendarserver.tools.shell.vfs import Folder, RootFolder
+from calendarserver.tools.shell.directory import findRecords, summarizeRecords
 
 
 class UsageError(Exception):
@@ -465,46 +464,16 @@
         if not tokens:
             raise UsageError("No search term")
 
-        for token in tokens:
-            searchFieldNames = ("fullName", "firstName", "lastName", "emailAddresses")
-            searchFields = tuple(
-                (fieldName, token, True, "contains")
-                for fieldName in searchFieldNames
-            )
+        records = (yield findRecords(self.protocol.service.directory, tokens))
 
-        records = (yield self.protocol.service.directory.recordsMatchingFields(searchFields))
-        records = sorted(tuple(records), key=operator.attrgetter("fullName"))
-
         if records:
-            table = Table()
+            self.terminal.write((yield summarizeRecords(self.protocol.service.directory, records)))
+        else:
+            self.terminal.write("No matching principals found.")
 
-            table.addHeader((
-                "UID",
-                "Record Type",
-                "Short Names",
-                "Email Addresses",
-                "Full Name",
-            ))
+        self.terminal.nextLine()
 
-            def formatItems(items):
-                if items:
-                    return ", ".join(items)
-                else:
-                    return None
 
-            for record in records:
-                table.addRow((
-                    record.uid,
-                    record.recordType,
-                    formatItems(record.shortNames),
-                    formatItems(record.emailAddresses),
-                    record.fullName,
-                ))
-
-            table.printTable(self.terminal)
-            self.terminal.nextLine()
-
-
     #
     # Python prompt, for the win
     #

Modified: CalendarServer/trunk/calendarserver/tools/shell/directory.py
===================================================================
--- CalendarServer/trunk/calendarserver/tools/shell/directory.py	2012-04-11 23:36:08 UTC (rev 9035)
+++ CalendarServer/trunk/calendarserver/tools/shell/directory.py	2012-04-11 23:57:27 UTC (rev 9036)
@@ -19,6 +19,7 @@
 """
 
 __all__ = [
+    "findRecords",
     "recordInfo",
     "recordBasicInfo",
     "recordGroupMembershipInfo",
@@ -26,6 +27,8 @@
 ]
 
 
+import operator
+
 from twisted.internet.defer import succeed
 from twisted.internet.defer import inlineCallbacks, returnValue
 
@@ -33,6 +36,20 @@
 
 
 @inlineCallbacks
+def findRecords(directory, terms):
+    for term in terms:
+        searchFieldNames = ("fullName", "firstName", "lastName", "emailAddresses")
+        searchFields = tuple(
+            (fieldName, term, True, "contains")
+            for fieldName in searchFieldNames
+        )
+
+    records = (yield directory.recordsMatchingFields(searchFields))
+
+    returnValue(sorted(tuple(records), key=operator.attrgetter("fullName")))
+
+
+ at inlineCallbacks
 def recordInfo(directory, record):
     """
     Complete record information.
@@ -154,3 +171,35 @@
         table.addRow(row)
 
     returnValue(table.toString())
+
+
+def summarizeRecords(directory, records):
+    table = Table()
+
+    table.addHeader((
+        "UID",
+        "Record Type",
+        "Short Names",
+        "Email Addresses",
+        "Full Name",
+    ))
+
+    def formatItems(items):
+        if items:
+            return ", ".join(items)
+        else:
+            return None
+
+    for record in records:
+        table.addRow((
+            record.uid,
+            record.recordType,
+            formatItems(record.shortNames),
+            formatItems(record.emailAddresses),
+            record.fullName,
+        ))
+
+    if table.rows:
+        return succeed(table.toString())
+    else:
+        return succeed(None)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20120411/c32c3725/attachment.html>


More information about the calendarserver-changes mailing list