[CalendarServer-changes] [9333] CalendarServer/branches/users/gaya/sharedabgroups/txdav

source_changes at macosforge.org source_changes at macosforge.org
Tue Jun 5 16:42:41 PDT 2012


Revision: 9333
          http://trac.macosforge.org/projects/calendarserver/changeset/9333
Author:   gaya at apple.com
Date:     2012-06-05 16:42:39 -0700 (Tue, 05 Jun 2012)
Log Message:
-----------
add BIND_MODE to GROUP_BIND table

Modified Paths:
--------------
    CalendarServer/branches/users/gaya/sharedabgroups/txdav/carddav/datastore/sql.py
    CalendarServer/branches/users/gaya/sharedabgroups/txdav/common/datastore/sql_legacy.py
    CalendarServer/branches/users/gaya/sharedabgroups/txdav/common/datastore/sql_schema/current.sql

Modified: CalendarServer/branches/users/gaya/sharedabgroups/txdav/carddav/datastore/sql.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedabgroups/txdav/carddav/datastore/sql.py	2012-06-05 01:44:31 UTC (rev 9332)
+++ CalendarServer/branches/users/gaya/sharedabgroups/txdav/carddav/datastore/sql.py	2012-06-05 23:42:39 UTC (rev 9333)
@@ -72,7 +72,9 @@
 from twext.enterprise.dal.syntax import Update
 
 from twext.python.clsprop import classproperty
+from txdav.common.datastore.sql_tables import _BIND_MODE_READ
 
+
 class AddressBookHome(CommonHome):
 
     implements(IAddressBookHome)
@@ -285,26 +287,13 @@
             if not owned:
                 
                 bind = schema.GROUP_BIND
-                groupIDRows = (yield Select([bind.GROUP_ID,],
+                groupIDRows = (yield Select([bind.GROUP_ID, bind.BIND_MODE],
                      From=bind,
                      Where=(bind.ADDRESSBOOK_BIND_ID == groupBindID)).on(home._txn))
                 
                 print("xxx AddressBook.loadAllObjects() groupIDRows=%s" % (groupIDRows,))
-                
                 if groupIDRows:
-                    [groupIDs] = groupIDRows
-                    
-                    for groupID in groupIDs:
-                        
-                        #debug, print group members
-                        bind = schema.GROUP_MEMBERSHIP
-                        memberRows = (yield Select([bind.MEMBER_ID,],
-                                      From=bind,
-                                      Where=bind.GROUP_ID == groupID).on(home._txn))
-                    
-                        print("xxx AddressBook.loadAllObjects() for groupID=%s" % (memberRows,))
-                   
-                        child = GroupAddressBook(home, resource_name, resourceID, groupIDs)
+                    child = GroupAddressBook(home, resource_name, resourceID, groupIDRows)
             
             if not child:
                 child = cls(home, resource_name, resourceID, owned)
@@ -413,17 +402,13 @@
         resourceID, groupBindID = data[0]
         
         bind = schema.GROUP_BIND
-        groupIDRows = (yield Select([bind.GROUP_ID,],
+        groupIDRows = (yield Select([bind.GROUP_ID, bind.BIND_MODE,],
              From=bind,
              Where=(bind.ADDRESSBOOK_BIND_ID == groupBindID)).on(home._txn))
         
-        print("xxx AddressBook.objectWithName() memberIDRows=%s name=%s" % (groupIDRows, name,))
-        
+        print("xxx AddressBook.objectWithName() groupIDRows=%s name=%s" % (groupIDRows, name,))
         if groupIDRows:
-            groupIDs = [];
-            for groupIDRow in groupIDRows:
-                groupIDs.extend(groupIDRow)
-            child = GroupAddressBook(home, name, resourceID, groupIDs)
+            child = GroupAddressBook(home, name, resourceID, groupIDRows)
         elif didGroupAddressbookQuery:
             child = None
         else:
@@ -443,7 +428,7 @@
     implements(IAddressBook)
 
 
-    def __init__(self, home, name, resourceID, groupIDs):
+    def __init__(self, home, name, resourceID, groupIDBindModes):
         """
         Initialize an addressbook pointing at a path on disk.
 
@@ -460,14 +445,11 @@
         """
 
         super(GroupAddressBook, self).__init__(home, name, resourceID, False)
-        print("xxx GroupAddressBook.__init__() self=%s, memberIDs=%s" % (self, groupIDs,))
         self._objectResourceClass = GroupAddressBookObject
+        self._groupIDBindModes = groupIDBindModes
+        print("xxx GroupAddressBook.__init__() self=%s, groupIDBindModes=%s" % (self, groupIDBindModes,))
 
-        print("xxx GroupAddressBook.objectResources() self=%s, self._objectResourceClass=%s" % (self, self._objectResourceClass))
 
-        self._groupIDs = groupIDs
-
-
     @classproperty
     def _memberIDsForGroupIDQuery(cls): #@NoSelf
         bind = schema.GROUP_MEMBERSHIP
@@ -588,16 +570,23 @@
                 return read-only/read-write members indication
         """
         
-        print("xxx GroupAddressBook.allowedChildResourceIDs() self=%s" % (self,))
-        allowedChildResourceIDs = []
-        for groupID in tuple(self._groupIDs):
+        print("xxx GroupAddressBook.allowedChildResourceIDs() self=%s, self._groupIDBindModes=%s" % (self, self._groupIDBindModes, ))
+        readonlyChildResourceIDs = []
+        readWriteChildResourceIDs = []
+        for groupID, bindMode in self._groupIDBindModes:
             groupMemberIDRows = (yield self._memberIDsForGroupIDQuery.on(self._txn, groupID=groupID))
-                
-            print("xxx GroupAddressBook.allowedChildResourceIDs(): groupMemberIDRows=%s" % (groupMemberIDRows,))
             for groupMemberIDRow in groupMemberIDRows:
-                allowedChildResourceIDs += groupMemberIDRow
-            print("xxx GroupAddressBook.allowedChildResourceIDs(): allowedChildResourceIDs=%s" % (allowedChildResourceIDs,))
-        returnValue(set(allowedChildResourceIDs))
+                if bindMode == _BIND_MODE_READ:
+                    readonlyChildResourceIDs.append(groupMemberIDRow[0])
+                else:
+                    readWriteChildResourceIDs.append(groupMemberIDRow[0])
+        
+        #debug, calc and print composite privs
+        readWriteChildResourceIDSet = set(readWriteChildResourceIDs);
+        readonlyChildResourceIDSet = set(readonlyChildResourceIDs).difference(readWriteChildResourceIDSet)
+        print("xxx GroupAddressBook.allowedChildResourceIDs(): readonlyChildResourceIDSet=%s, readWriteChildResourceIDSet=%s" % (readonlyChildResourceIDSet, readWriteChildResourceIDSet,))
+        
+        returnValue(set(readonlyChildResourceIDs + readWriteChildResourceIDs))
 
 
     @inlineCallbacks
@@ -606,7 +595,6 @@
             AddressBookObject.listObjectResources + filtering
         """
         
-        print("xxx GroupAddressBook.allowedChildResourceIDs() self=%s" % (self,))
         print("xxx GroupAddressBook.listObjectResources() self=%s" % (self,))
         if self._objectNames is None:
         
@@ -619,7 +607,6 @@
             
             names = []
             for row in rows:
-                print("xxx GroupAddressBook.listObjectResources(): row=%s" % (row,))
                 if row[1] in allowedChildResourceIDs:
                     names += [row[0],]
                 

Modified: CalendarServer/branches/users/gaya/sharedabgroups/txdav/common/datastore/sql_legacy.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedabgroups/txdav/common/datastore/sql_legacy.py	2012-06-05 01:44:31 UTC (rev 9332)
+++ CalendarServer/branches/users/gaya/sharedabgroups/txdav/common/datastore/sql_legacy.py	2012-06-05 23:42:39 UTC (rev 9333)
@@ -495,6 +495,7 @@
             {
                 bind.ADDRESSBOOK_BIND_ID: Parameter("addressbookBindID"),
                 bind.GROUP_ID: Parameter("groupID"),
+                bind.BIND_MODE: Parameter("mode"),
             }
         )
         
@@ -604,7 +605,7 @@
         # constraints in place, whereas INVITE does not. Really we need to do this in a sub-transaction so
         # we can roll back if any one query fails.
         if rows:
-            print("xxx addOrUpdateRecord() leg rows=%s" % (rows,))
+            print("xxx addOrUpdateRecord() rows=%s" % (rows,))
             [[resourceID, homeResourceID]] = rows
             yield self._updateBindQuery.on(
                 self._txn,
@@ -648,6 +649,7 @@
                 self._txn,
                 groupID=self._collection._resourceID,
                 addressbookBindID=bindID,
+                mode=bindMode,
             )
             print("xxx _insertInviteQuery(): uid=%s, name=%s, homeID=%s, resourceID=%s" 
                                             % (record.inviteuid, 

Modified: CalendarServer/branches/users/gaya/sharedabgroups/txdav/common/datastore/sql_schema/current.sql
===================================================================
--- CalendarServer/branches/users/gaya/sharedabgroups/txdav/common/datastore/sql_schema/current.sql	2012-06-05 01:44:31 UTC (rev 9332)
+++ CalendarServer/branches/users/gaya/sharedabgroups/txdav/common/datastore/sql_schema/current.sql	2012-06-05 23:42:39 UTC (rev 9333)
@@ -418,11 +418,10 @@
 --------------------------------
 
 create table GROUP_BIND (
-    ADDRESSBOOK_BIND_ID             integer      references ADDRESSBOOK_BIND, 
+    ADDRESSBOOK_BIND_ID          integer      references ADDRESSBOOK_BIND, 
     GROUP_ID integer,    -- temporary, should use line below when parser is fixed
 --  GROUP_ID integer      references GROUP_MEMBERSHIP(GROUP_ID),
---  or add the following line
---  foreign key(GROUP_ID) references GROUP_MEMBERSHIP(GROUP_ID)
+    BIND_MODE                    integer      not null, -- enum CALENDAR_BIND_MODE
     primary key(ADDRESSBOOK_BIND_ID, GROUP_ID) -- implicit index
 );
 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20120605/16160751/attachment.html>


More information about the calendarserver-changes mailing list