[CalendarServer-changes] [2140] CalendarServer/trunk/twistedcaldav/directory

source_changes at macosforge.org source_changes at macosforge.org
Wed Feb 13 15:19:38 PST 2008


Revision: 2140
          http://trac.macosforge.org/projects/calendarserver/changeset/2140
Author:   wsanchez at apple.com
Date:     2008-02-13 15:19:36 -0800 (Wed, 13 Feb 2008)

Log Message:
-----------
Centralize generation of formatted data in directory rendering output.
Sort principals in a reasonable-ish way.
Add principal full name to output.

Modified Paths:
--------------
    CalendarServer/trunk/twistedcaldav/directory/calendaruserproxy.py
    CalendarServer/trunk/twistedcaldav/directory/principal.py

Modified: CalendarServer/trunk/twistedcaldav/directory/calendaruserproxy.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/calendaruserproxy.py	2008-02-13 22:47:45 UTC (rev 2139)
+++ CalendarServer/trunk/twistedcaldav/directory/calendaruserproxy.py	2008-02-13 23:19:36 UTC (rev 2140)
@@ -202,30 +202,8 @@
 
     def renderDirectoryBody(self, request):
         # FIXME: Too much code duplication here from principal.py
+        from twistedcaldav.directory.principal import format_list, format_principals, format_link
 
-        def format_list(items, *args):
-            def genlist():
-                try:
-                    item = None
-                    for item in items:
-                        yield " -> %s\n" % (item,)
-                    if item is None:
-                        yield " '()\n"
-                except Exception, e:
-                    log.err("Exception while rendering: %s" % (e,))
-                    Failure().printTraceback()
-                    yield "  ** %s **: %s\n" % (e.__class__.__name__, e)
-            return "".join(genlist())
-
-        def link(url):
-            return """<a href="%s">%s</a>""" % (url, url)
-
-        def format_principals(principals):
-            return format_list(
-                """<a href="%s">%s</a>""" % (principal.principalURL(), escape(str(principal)))
-                for principal in principals
-            )
-
         def gotSuper(output):
             return "".join((
                 """<div class="directory-listing">"""
@@ -243,14 +221,14 @@
                 """Short name: %s\n"""             % (self.parent.record.shortName,),
                 """Full name: %s\n"""              % (self.parent.record.fullName,),
                 """Principal UID: %s\n"""          % (self.parent.principalUID(),),
-                """Principal URL: %s\n"""          % (link(self.parent.principalURL()),),
+                """Principal URL: %s\n"""          % (format_link(self.parent.principalURL()),),
                 """\n"""
                 """Proxy Principal Information\n"""
                 """---------------------\n"""
                #"""GUID: %s\n"""                   % (self.guid,),
                 """Principal UID: %s\n"""          % (self.principalUID(),),
-                """Principal URL: %s\n"""          % (link(self.principalURL()),),
-                """\nAlternate URIs:\n"""          , format_list(link(u) for u in self.alternateURIs()),
+                """Principal URL: %s\n"""          % (format_link(self.principalURL()),),
+                """\nAlternate URIs:\n"""          , format_list(format_link(u) for u in self.alternateURIs()),
                 """\nGroup members (%s):\n""" % ({False:"Locked", True:"Editable"}[self.hasEditableMembership()])
                                                    , format_principals(self.groupMembers()),
                 """\nGroup memberships:\n"""       , format_principals(self.groupMemberships()),

Modified: CalendarServer/trunk/twistedcaldav/directory/principal.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/principal.py	2008-02-13 22:47:45 UTC (rev 2139)
+++ CalendarServer/trunk/twistedcaldav/directory/principal.py	2008-02-13 23:19:36 UTC (rev 2140)
@@ -386,29 +386,6 @@
     ##
 
     def renderDirectoryBody(self, request):
-        def format_list(items, *args):
-            def genlist():
-                try:
-                    item = None
-                    for item in items:
-                        yield " -> %s\n" % (item,)
-                    if item is None:
-                        yield " '()\n"
-                except Exception, e:
-                    log.err("Exception while rendering: %s" % (e,))
-                    Failure().printTraceback()
-                    yield "  ** %s **: %s\n" % (e.__class__.__name__, e)
-            return "".join(genlist())
-
-        def format_principals(principals):
-            return format_list(
-                """<a href="%s">%s</a>""" % (principal.principalURL(), escape(str(principal)))
-                for principal in principals
-            )
-
-        def link(url):
-            return """<a href="%s">%s</a>""" % (url, url)
-
         def gotSuper(output):
             return "".join((
                 """<div class="directory-listing">"""
@@ -426,8 +403,8 @@
                 """Short name: %s\n"""             % (self.record.shortName,),
                 """Full name: %s\n"""              % (self.record.fullName,),
                 """Principal UID: %s\n"""          % (self.principalUID(),),
-                """Principal URL: %s\n"""          % (link(self.principalURL()),),
-                """\nAlternate URIs:\n"""          , format_list(link(u) for u in self.alternateURIs()),
+                """Principal URL: %s\n"""          % (format_link(self.principalURL()),),
+                """\nAlternate URIs:\n"""          , format_list(format_link(u) for u in self.alternateURIs()),
                 """\nGroup members:\n"""           , format_principals(self.groupMembers()),
                 """\nGroup memberships:\n"""       , format_principals(self.groupMemberships()),
                 """</pre></blockquote></div>""",
@@ -552,29 +529,6 @@
     Directory calendar principal resource.
     """
     def renderDirectoryBody(self, request):
-        def format_list(items, *args):
-            def genlist():
-                try:
-                    item = None
-                    for item in items:
-                        yield " -> %s\n" % (item,)
-                    if item is None:
-                        yield " '()\n"
-                except Exception, e:
-                    log.err("Exception while rendering: %s" % (e,))
-                    Failure().printTraceback()
-                    yield "  ** %s **: %s\n" % (e.__class__.__name__, e)
-            return "".join(genlist())
-
-        def format_principals(principals):
-            return format_list(
-                """<a href="%s">%s</a>""" % (principal.principalURL(), escape(str(principal)))
-                for principal in principals
-            )
-
-        def link(url):
-            return """<a href="%s">%s</a>""" % (url, url)
-
         def gotSuper(output):
             return "".join((
                 """<div class="directory-listing">"""
@@ -592,12 +546,12 @@
                 """Short name: %s\n"""             % (self.record.shortName,),
                 """Full name: %s\n"""              % (self.record.fullName,),
                 """Principal UID: %s\n"""          % (self.principalUID(),),
-                """Principal URL: %s\n"""          % (link(self.principalURL()),),
-                """\nAlternate URIs:\n"""          , format_list(link(u) for u in self.alternateURIs()),
+                """Principal URL: %s\n"""          % (format_link(self.principalURL()),),
+                """\nAlternate URIs:\n"""          , format_list(format_link(u) for u in self.alternateURIs()),
                 """\nGroup members:\n"""           , format_principals(self.groupMembers()),
                 """\nGroup memberships:\n"""       , format_principals(self.groupMemberships()),
-                """\nCalendar homes:\n"""          , format_list(link(u) for u in self.calendarHomeURLs()),
-                """\nCalendar user addresses:\n""" , format_list(link(a) for a in self.calendarUserAddresses()),
+                """\nCalendar homes:\n"""          , format_list(format_link(u) for u in self.calendarHomeURLs()),
+                """\nCalendar user addresses:\n""" , format_list(format_link(a) for a in self.calendarUserAddresses()),
                 """</pre></blockquote></div>""",
                 output
             ))
@@ -731,3 +685,47 @@
     name = "record-name"
 
 davxml.registerElement(RecordNameProperty)
+
+def format_list(items, *args):
+    def genlist():
+        try:
+            item = None
+            for item in items:
+                yield " -> %s\n" % (item,)
+            if item is None:
+                yield " '()\n"
+        except Exception, e:
+            log.err("Exception while rendering: %s" % (e,))
+            Failure().printTraceback()
+            yield "  ** %s **: %s\n" % (e.__class__.__name__, e)
+    return "".join(genlist())
+
+def format_principals(principals):
+    def sort(a, b):
+        def sortkey(principal):
+            try:
+                record = principal.record
+            except AttributeError:
+                try:
+                    record = principal.parent.record
+                except:
+                    return None
+
+            return [record.recordType, record.shortName]
+
+        return cmp(sortkey(a), sortkey(b))
+
+    def describe(principal):
+        if hasattr(principal, "record"):
+            return " - %s" % (principal.record.fullName,)
+        else:
+            return ""
+
+    return format_list(
+        """<a href="%s">%s%s</a>"""
+        % (principal.principalURL(), escape(str(principal)), describe(principal))
+        for principal in sorted(principals, sort)
+    )
+
+def format_link(url):
+    return """<a href="%s">%s</a>""" % (url, url)

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


More information about the calendarserver-changes mailing list