[CalendarServer-changes] [7593] CalendarServer/trunk/twistedcaldav

source_changes at macosforge.org source_changes at macosforge.org
Tue Jun 14 13:25:56 PDT 2011


Revision: 7593
          http://trac.macosforge.org/projects/calendarserver/changeset/7593
Author:   sagen at apple.com
Date:     2011-06-14 13:25:48 -0700 (Tue, 14 Jun 2011)
Log Message:
-----------
Handle wiki calendars with non-ascii names (9592951)

Modified Paths:
--------------
    CalendarServer/trunk/twistedcaldav/directory/calendaruserproxy.py
    CalendarServer/trunk/twistedcaldav/directory/test/test_proxyprincipaldb.py
    CalendarServer/trunk/twistedcaldav/notify.py

Modified: CalendarServer/trunk/twistedcaldav/directory/calendaruserproxy.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/calendaruserproxy.py	2011-06-14 19:14:15 UTC (rev 7592)
+++ CalendarServer/trunk/twistedcaldav/directory/calendaruserproxy.py	2011-06-14 20:25:48 UTC (rev 7593)
@@ -596,12 +596,12 @@
 
             # Cache miss; compute members and update cache
             def gotMembersFromDB(dbmembers):
-                members = set([row[0] for row in dbmembers])
+                members = set([row[0].encode("utf-8") for row in dbmembers])
                 d = self._memcacher.setMembers(principalUID, members)
                 d.addCallback(lambda _: members)
                 return d
 
-            d =  self.query("select MEMBER from GROUPS where GROUPNAME = :1", (principalUID,))
+            d =  self.query("select MEMBER from GROUPS where GROUPNAME = :1", (principalUID.decode("utf-8"),))
             d.addCallback(gotMembersFromDB)
             return d
 
@@ -621,12 +621,12 @@
 
             # Cache miss; compute memberships and update cache
             def gotMembershipsFromDB(dbmemberships):
-                memberships = set([row[0] for row in dbmemberships])
+                memberships = set([row[0].encode("utf-8") for row in dbmemberships])
                 d = self._memcacher.setMemberships(principalUID, memberships)
                 d.addCallback(lambda _: memberships)
                 return d
 
-            d =  self.query("select GROUPNAME from GROUPS where MEMBER = :1", (principalUID,))
+            d =  self.query("select GROUPNAME from GROUPS where MEMBER = :1", (principalUID.decode("utf-8"),))
             d.addCallback(gotMembershipsFromDB)
             return d
 
@@ -647,7 +647,7 @@
                 """
                 insert into GROUPS (GROUPNAME, MEMBER)
                 values (:1, :2)
-                """, (principalUID, member,)
+                """, (principalUID.decode("utf-8"), member,)
             )
 
     def _add_to_db_one(self, principalUID, memberUID):
@@ -661,7 +661,7 @@
             """
             insert into GROUPS (GROUPNAME, MEMBER)
             values (:1, :2)
-            """, (principalUID, memberUID,)
+            """, (principalUID.decode("utf-8"), memberUID.decode("utf-8"),)
         )
 
     def _delete_from_db(self, principalUID):
@@ -670,7 +670,7 @@
 
         @param principalUID: the UID of the group principal to remove.
         """
-        return self.execute("delete from GROUPS where GROUPNAME = :1", (principalUID,))
+        return self.execute("delete from GROUPS where GROUPNAME = :1", (principalUID.decode("utf-8"),))
 
     def _delete_from_db_one(self, principalUID, memberUID):
         """
@@ -679,7 +679,7 @@
         @param principalUID: the UID of the group principal to remove.
         @param memberUID: the UID of the principal that is being removed as a member of this group.
         """
-        return self.execute("delete from GROUPS where GROUPNAME = :1 and MEMBER = :2", (principalUID, memberUID,))
+        return self.execute("delete from GROUPS where GROUPNAME = :1 and MEMBER = :2", (principalUID.decode("utf-8"), memberUID.decode("utf-8"),))
 
     def _delete_from_db_member(self, principalUID):
         """
@@ -687,7 +687,7 @@
 
         @param principalUID: the UID of the member principal to remove.
         """
-        return self.execute("delete from GROUPS where MEMBER = :1", (principalUID,))
+        return self.execute("delete from GROUPS where MEMBER = :1", (principalUID.decode("utf-8"),))
 
     def _db_version(self):
         """

Modified: CalendarServer/trunk/twistedcaldav/directory/test/test_proxyprincipaldb.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/test/test_proxyprincipaldb.py	2011-06-14 19:14:15 UTC (rev 7592)
+++ CalendarServer/trunk/twistedcaldav/directory/test/test_proxyprincipaldb.py	2011-06-14 20:25:48 UTC (rev 7593)
@@ -86,6 +86,21 @@
         self.assertEqual(membershipsB, set(("A",)))
 
     @inlineCallbacks
+    def test_normalDBNonAscii(self):
+    
+        # Get the DB
+        db_path = os.path.abspath(self.mktemp())
+        db = ProxySqliteDB(db_path)
+        principalID = "Test \xe4\xbd\x90\xe8\x97\xa4"
+        yield db.setGroupMembers(principalID, ("B", "C", "D",))
+        
+        membersA = yield db.getMembers(principalID)
+        membershipsB = yield db.getMemberships("B")
+        
+        self.assertEqual(membersA, set(("B", "C", "D",)))
+        self.assertEqual(membershipsB, set((principalID,)))
+
+    @inlineCallbacks
     def test_DBIndexed(self):
     
         # Get the DB

Modified: CalendarServer/trunk/twistedcaldav/notify.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/notify.py	2011-06-14 19:14:15 UTC (rev 7592)
+++ CalendarServer/trunk/twistedcaldav/notify.py	2011-06-14 20:25:48 UTC (rev 7593)
@@ -689,7 +689,7 @@
             iq = IQ(self.xmlStream)
             pubsubElement = iq.addElement('pubsub', defaultUri=self.pubsubNS)
             publishElement = pubsubElement.addElement('publish')
-            publishElement['node'] = nodeName
+            publishElement['node'] = nodeName.decode("utf-8")
             if self.settings["NodeConfiguration"]["pubsub#deliver_payloads"] == '1':
                 itemElement = publishElement.addElement('item')
                 itemElement.addElement('plistfrag', defaultUri='plist-apple')
@@ -742,7 +742,7 @@
             iq = IQ(self.xmlStream)
             pubsubElement = iq.addElement('pubsub', defaultUri=self.pubsubNS)
             child = pubsubElement.addElement('create')
-            child['node'] = nodeName
+            child['node'] = nodeName.decode("utf-8")
             d = iq.send(to=self.settings['ServiceAddress'])
             d.addCallback(self.createNodeSuccess, nodeName, publish)
             d.addErrback(self.createNodeFailure, nodeName, publish)
@@ -794,7 +794,7 @@
             child = iq.addElement('pubsub',
                 defaultUri=self.pubsubNS+"#owner")
             child = child.addElement('configure')
-            child['node'] = nodeName
+            child['node'] = nodeName.decode("utf-8")
             d = iq.send(to=self.settings['ServiceAddress'])
             d.addCallback(self.requestConfigurationFormSuccess, nodeName,
                 publish)
@@ -829,7 +829,7 @@
                         filledPubSub = filledIq.addElement('pubsub',
                             defaultUri=self.pubsubNS+"#owner")
                         filledConfigure = filledPubSub.addElement('configure')
-                        filledConfigure['node'] = nodeName
+                        filledConfigure['node'] = nodeName.decode("utf-8")
                         filledForm = filledConfigure.addElement('x',
                             defaultUri='jabber:x:data')
                         filledForm['type'] = 'submit'
@@ -859,7 +859,7 @@
                             cancelPubSub = cancelIq.addElement('pubsub',
                                 defaultUri=self.pubsubNS+"#owner")
                             cancelConfig = cancelPubSub.addElement('configure')
-                            cancelConfig['node'] = nodeName
+                            cancelConfig['node'] = nodeName.decode("utf-8")
                             cancelX = cancelConfig.addElement('x',
                                 defaultUri='jabber:x:data')
                             cancelX['type'] = 'cancel'
@@ -940,7 +940,7 @@
             pubsubElement = iq.addElement('pubsub',
                 defaultUri=self.pubsubNS+"#owner")
             publishElement = pubsubElement.addElement('delete')
-            publishElement['node'] = nodeName
+            publishElement['node'] = nodeName.decode("utf-8")
             self.sendDebug("Deleting (%s)" % (nodeName,), iq)
             d = iq.send(to=self.settings['ServiceAddress'])
             d.addCallback(self.deleteNodeSuccess, nodeName)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20110614/6ea3ff21/attachment.html>


More information about the calendarserver-changes mailing list