Package omeroweb :: Package webadmin :: Package controller :: Module group
[hide private]
[frames] | no frames]

Source Code for Module omeroweb.webadmin.controller.group

  1  #!/usr/bin/env python 
  2  #  
  3  #  
  4  #  
  5  # Copyright (c) 2008 University of Dundee.  
  6  #  
  7  # This program is free software: you can redistribute it and/or modify 
  8  # it under the terms of the GNU Affero General Public License as 
  9  # published by the Free Software Foundation, either version 3 of the 
 10  # License, or (at your option) any later version. 
 11  #  
 12  # This program is distributed in the hope that it will be useful, 
 13  # but WITHOUT ANY WARRANTY; without even the implied warranty of 
 14  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
 15  # GNU Affero General Public License for more details. 
 16  #  
 17  # You should have received a copy of the GNU Affero General Public License 
 18  # along with this program.  If not, see <http://www.gnu.org/licenses/>. 
 19  #  
 20  # Author: Aleksandra Tarkowska <A(dot)Tarkowska(at)dundee(dot)ac(dot)uk>, 2008. 
 21  #  
 22  # Version: 1.0 
 23  # 
 24   
 25  from omero.rtypes import * 
 26  from omero.model import ExperimenterGroupI, PermissionsI 
 27   
 28  from webadmin.controller import BaseController 
 29   
30 -class BaseGroups(BaseController):
31 32 groups = None 33 groupsCount = 0 34
35 - def __init__(self, conn):
36 BaseController.__init__(self, conn) 37 groupsList = list(self.conn.getObjects("ExperimenterGroup")) 38 groupsList.sort(key=lambda x: x.getName().lower()) 39 self.groups = list() 40 for gr in groupsList: 41 self.groups.append({'group': gr, 'locked': self.isLocked(gr.name), 'permissions': self.getPermissions(gr)}) 42 self.groupsCount = len(groupsList)
43
44 - def isLocked(self, gname):
45 if gname == "user": 46 return True 47 elif gname == "system": 48 return True 49 elif gname == "guest": 50 return True 51 else: 52 False
53
54 -class BaseGroup(BaseController):
55 56 group = None 57 experimenters = None 58
59 - def __init__(self, conn, gid=None):
60 BaseController.__init__(self, conn) 61 if gid is not None: 62 self.group = self.conn.getObject("ExperimenterGroup", gid) 63 64 self.owners = list() 65 for gem in self.group.copyGroupExperimenterMap(): 66 if gem.owner.val == True: 67 self.owners.append(gem.child.id.val) 68 self.experimenters = list(self.conn.getObjects("Experimenter")) 69 self.experimenters.sort(key=lambda x: x.getOmeName().lower())
70
71 - def getOwnersNames(self):
72 owners = list() 73 for e in self.conn.getObjects("Experimenter", self.owners): 74 owners.append(e.getFullName()) 75 return ", ".join(owners)
76
77 - def containedExperimenters(self):
78 self.members = list(self.conn.containedExperimenters(self.group.id)) 79 self.members.sort(key=lambda x: x.getOmeName().lower()) 80 for i, m in enumerate(self.members): 81 if m.copyGroupExperimenterMap()[0].parent.id.val == self.group.id: 82 self.members[i].setFirstName("*%s" % (m.firstName)) 83 84 self.available = list() 85 memberIds = [m.id for m in self.members] 86 for e in self.experimenters: 87 if e.id not in memberIds: 88 self.available.append(e)
89
90 - def setMembersOfGroup(self, available, members):
91 old_members = list(self.conn.containedExperimenters(self.group.id)) 92 old_available = list() 93 for e in self.experimenters: 94 flag = False 95 for m in old_members: 96 if e.id == m.id: 97 flag = True 98 if not flag: 99 old_available.append(e) 100 101 add_exps = list() 102 rm_exps = list() 103 for om in old_members: 104 for a in available: 105 if om.id == long(str(a)): 106 rm_exps.append(om._obj) 107 for oa in old_available: 108 for m in members: 109 if oa.id == long(str(m)): 110 add_exps.append(oa._obj) 111 112 for r in rm_exps: 113 if self.conn.getDefaultGroup(r.id.val).id == self.group.id: 114 rm_exps.remove(r) 115 116 self.conn.setMembersOfGroup(self.group._obj, add_exps, rm_exps)
117
118 - def createGroup(self, name, owners, perm, r=None, description=None):
119 new_gr = ExperimenterGroupI() 120 new_gr.name = rstring(str(name)) 121 new_gr.description = (description!="" and description is not None) and rstring(str(description)) or None 122 new_gr.details.permissions = self.setActualPermissions(perm, r) 123 124 listOfOwners = set() 125 for e in self.experimenters: 126 for o in owners: 127 if long(o) == e.id: 128 listOfOwners.add(e._obj) 129 130 return self.conn.createGroup(new_gr, list(listOfOwners))
131
132 - def updateGroup(self, name, owners, perm, r=None, description=None):
133 up_gr = self.group._obj 134 up_gr.name = rstring(str(name)) 135 up_gr.description = (description!="" and description is not None) and rstring(str(description)) or None 136 permissions = None 137 perm = int(perm) 138 if self.getActualPermissions() != perm or self.isReadOnly()!=r: 139 permissions = self.setActualPermissions(perm, r) 140 # old list of groups 141 old_owners = list() 142 for oex in up_gr.copyGroupExperimenterMap(): 143 if oex.owner.val: 144 old_owners.append(oex.child) 145 146 # create list of new groups 147 new_owners = list() 148 for e in self.experimenters: 149 for o in owners: 150 if long(o) == e.id: 151 new_owners.append(e._obj) 152 153 add_exps = list() 154 rm_exps = list() 155 156 # remove 157 for oex in old_owners: 158 flag = False 159 for nex in new_owners: 160 if nex.id.val == oex.id.val: 161 flag = True 162 if not flag: 163 rm_exps.append(oex) 164 165 # add 166 for nex in new_owners: 167 flag = False 168 for oex in old_owners: 169 if oex.id.val == nex.id.val: 170 flag = True 171 if not flag: 172 add_exps.append(nex) 173 174 self.conn.updateGroup(up_gr, add_exps, rm_exps, permissions)
175
176 - def updatePermissions(self, perm, r=None):
177 permissions = None 178 perm = int(perm) 179 if self.getActualPermissions() != perm or self.isReadOnly()!=r: 180 permissions = self.setActualPermissions(perm, r) 181 self.conn.updatePermissions(self.group._obj, permissions)
182
183 - def getActualPermissions(self):
184 p = None 185 if self.group.details.getPermissions() is None: 186 raise AttributeError('Object has no permissions') 187 else: 188 p = self.group.details.getPermissions() 189 190 flag = None 191 if p.isUserRead(): 192 flag = 0 193 if p.isGroupRead(): 194 flag = 1 195 if p.isWorldRead(): 196 flag = 2 197 198 return flag
199
200 - def isReadOnly(self):
201 p = None 202 if self.group.details.getPermissions() is None: 203 raise AttributeError('Object has no permissions') 204 else: 205 p = self.group.details.getPermissions() 206 207 flag = False 208 if p.isUserRead() and not p.isUserWrite(): 209 flag = True 210 if p.isGroupRead() and not p.isGroupWrite(): 211 flag = True 212 if p.isWorldRead() and not p.isWorldWrite(): 213 flag = True 214 return flag
215
216 - def setActualPermissions(self, p, r=None):
217 permissions = PermissionsI() 218 p = int(p) 219 if p == 0: 220 #private 221 permissions.setUserRead(True) 222 permissions.setUserWrite(True) 223 permissions.setGroupRead(False) 224 permissions.setGroupWrite(False) 225 permissions.setWorldRead(False) 226 permissions.setWorldWrite(False) 227 elif p == 1: 228 #collaborative 229 permissions.setUserRead(True) 230 permissions.setUserWrite(True) 231 permissions.setGroupRead(True) 232 permissions.setGroupWrite(not r) 233 permissions.setWorldRead(False) 234 permissions.setWorldWrite(False) 235 elif p == 2: 236 #public 237 permissions.setUserRead(True) 238 permissions.setUserWrite(True) 239 permissions.setGroupRead(True) 240 permissions.setGroupWrite(not r) 241 permissions.setWorldRead(True) 242 permissions.setWorldWrite(not r) 243 return permissions
244