[CalendarServer-changes] [1723] CalendarServer/branches/users/wsanchez/deleted-uids/twistedcaldav/ directory

source_changes at macosforge.org source_changes at macosforge.org
Fri Jul 27 14:51:42 PDT 2007


Revision: 1723
          http://trac.macosforge.org/projects/calendarserver/changeset/1723
Author:   wsanchez at apple.com
Date:     2007-07-27 14:51:42 -0700 (Fri, 27 Jul 2007)

Log Message:
-----------
Proxy principals now also have an alternate URI with the /principals/users type path.

Clean up display in renderDirectoryBody() so that principals are
legible.  (GUIDs are not).

Modified Paths:
--------------
    CalendarServer/branches/users/wsanchez/deleted-uids/twistedcaldav/directory/calendaruserproxy.py
    CalendarServer/branches/users/wsanchez/deleted-uids/twistedcaldav/directory/principal.py

Modified: CalendarServer/branches/users/wsanchez/deleted-uids/twistedcaldav/directory/calendaruserproxy.py
===================================================================
--- CalendarServer/branches/users/wsanchez/deleted-uids/twistedcaldav/directory/calendaruserproxy.py	2007-07-27 20:56:14 UTC (rev 1722)
+++ CalendarServer/branches/users/wsanchez/deleted-uids/twistedcaldav/directory/calendaruserproxy.py	2007-07-27 21:51:42 UTC (rev 1723)
@@ -24,6 +24,8 @@
     "CalendarUserProxyPrincipalResource",
 ]
 
+from cgi import escape
+
 from twisted.internet.defer import succeed
 from twisted.python import log
 from twisted.python.failure import Failure
@@ -91,15 +93,20 @@
         @param parent: the parent of this resource.
         @param proxyType: a C{str} containing the name of the resource.
         """
-        super(CalendarUserProxyPrincipalResource, self).__init__(path, joinURL(parent.principalURL(), proxyType))
-
-        self.parent = parent
-        self.pcollection = self.parent.parent.parent
-        self.proxyType = proxyType
-        self._url = joinURL(parent.principalURL(), proxyType)
         if self.isCollection():
-            self._url += "/"
+            slash = "/"
+        else:
+            slash = ""
 
+        url = joinURL(parent.principalURL(), proxyType) + slash
+
+        super(CalendarUserProxyPrincipalResource, self).__init__(path, url)
+
+        self.parent      = parent
+        self.proxyType   = proxyType
+        self.pcollection = self.parent.parent.parent # FIXME: if this is supposed to be public, it needs a better name
+        self._url        = url
+
         # Not terribly useful at present because we don't have a way
         # to map a GUID back to the correct principal.
         #self.guid = uuidFromName(self.parent.principalUID(), proxyType)
@@ -108,10 +115,19 @@
         # can easily map back to a principal.
         self.uid = "%s#%s" % (self.parent.principalUID(), proxyType)
 
+        self._alternate_urls = tuple(
+            joinURL(url, proxyType) + slash
+            for url in parent.alternateURIs()
+            if url.startswith("/")
+        )
+
         # Provision in __init__() because principals are used prior to request
         # lookups.
         self.provision()
 
+    def __str__(self):
+        return "%s [%s]" % (self.parent, self.proxyType)
+
     def _index(self):
         """
         Return the SQL database for this group principal.
@@ -187,6 +203,8 @@
     ##
 
     def renderDirectoryBody(self, request):
+        # FIXME: Too much code duplication here from principal.py
+
         def format_list(items, *args):
             def genlist():
                 try:
@@ -204,6 +222,12 @@
         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">"""
@@ -228,9 +252,10 @@
                #"""GUID: %s\n"""                   % (self.guid,),
                 """Principal UID: %s\n"""          % (self.principalUID(),),
                 """Principal URL: %s\n"""          % (link(self.principalURL()),),
-                """\nAlternate URIs:\n"""          , format_list(self.alternateURIs()),
-                """\nGroup members (%s):\n"""      % ({False:"Locked", True:"Editable"}[self.hasEditableMembership()]), format_list(link(p.principalURL()) for p in self.groupMembers()),
-                """\nGroup memberships:\n"""       , format_list(link(p.principalURL()) for p in self.groupMemberships()),
+                """\nAlternate URIs:\n"""          , format_list(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()),
                 """</pre></blockquote></div>""",
                 output
             ))
@@ -252,7 +277,7 @@
 
     def alternateURIs(self):
         # FIXME: Add API to IDirectoryRecord for getting a record URI?
-        return ()
+        return self._alternate_urls
 
     def principalURL(self):
         return self._url

Modified: CalendarServer/branches/users/wsanchez/deleted-uids/twistedcaldav/directory/principal.py
===================================================================
--- CalendarServer/branches/users/wsanchez/deleted-uids/twistedcaldav/directory/principal.py	2007-07-27 20:56:14 UTC (rev 1722)
+++ CalendarServer/branches/users/wsanchez/deleted-uids/twistedcaldav/directory/principal.py	2007-07-27 21:51:42 UTC (rev 1723)
@@ -26,6 +26,7 @@
     "DirectoryPrincipalResource",
 ]
 
+from cgi import escape
 from urllib import unquote
 from urlparse import urlparse
 
@@ -367,6 +368,9 @@
         # lookups.
         self.provision()
 
+    def __str__(self):
+        return "(%s) %s" % (self.record.recordType, self.record.shortName)
+
     ##
     # HTTP
     ##
@@ -384,8 +388,14 @@
                     log.err("Exception while rendering: %s" % (e,))
                     Failure().printTraceback()
                     yield "  ** %s **: %s\n" % (e.__class__.__name__, e)
-            return "".join(genlist())
+            return "".join(sorted(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)
 
@@ -408,8 +418,8 @@
                 """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()),
-                """\nGroup members:\n"""           , format_list(link(p.principalURL()) for p in self.groupMembers()),
-                """\nGroup memberships:\n"""       , format_list(link(p.principalURL()) for p in self.groupMemberships()),
+                """\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()),
                 """</pre></blockquote></div>""",

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


More information about the calendarserver-changes mailing list