Package omero :: Package plugins :: Module group
[hide private]
[frames] | no frames]

Source Code for Module omero.plugins.group

  1  #!/usr/bin/env python 
  2  """ 
  3     Group administration plugin 
  4   
  5     Copyright 2009 Glencoe Software, Inc. All rights reserved. 
  6     Use is subject to license terms supplied in LICENSE.txt 
  7   
  8  """ 
  9   
 10  import os 
 11  import sys 
 12   
 13  from omero.cli import BaseControl, CLI 
 14   
 15  HELP="""Group administration methods""" 
 16   
17 -class GroupControl(BaseControl):
18
19 - def _configure(self, parser):
20 sub = parser.sub() 21 add = parser.add(sub, self.add, "Add a new group with given permissions") 22 add.add_argument("name", help="ExperimenterGroup.name value") 23 24 perms = parser.add(sub, self.perms, "Modify a group's permissions") 25 perms.add_argument("id_or_name", help="ExperimenterGroup's id or name") 26 27 for x in (add, perms): 28 group = x.add_mutually_exclusive_group() 29 group.add_argument("--perms", help="Group permissions set as string, e.g. 'rw----' ") 30 group.add_argument("--type", help="Group permission set symbollically", 31 choices=("private", "read-only", "collaborative")) 32 33 list = parser.add(sub, self.list, "List current groups") 34 list.add_argument("--long", action="store_true", help = "Print comma-separated list of all groups, not just counts") 35 36 copy = parser.add(sub, self.copy, "Copy the members of one group to another group") 37 copy.add_argument("from_group", type=long, help = "Source group ID whose members will be copied") 38 copy.add_argument("to_group", type=long, help = "Target group ID which will have new members added") 39 40 insert = parser.add(sub, self.insert, "Insert one or more users into a group") 41 insert.add_argument("group", type=long, help = "ID of the group which is to have users added") 42 insert.add_argument("user", type=long, nargs="+", help = "ID of user to be inserted")
43
44 - def parse_perms(self, args):
45 perms = getattr(args, "perms", None) 46 if not perms: 47 if args.type == "private": 48 perms = "rw----" 49 elif args.type == "read-only": 50 perms = "rwr---" 51 elif args.type == "collaborative": 52 perms = "rwrw--" 53 if not perms: 54 perms = "rw----" 55 return perms
56
57 - def add(self, args):
58 59 import omero, Ice 60 from omero.rtypes import rstring 61 from omero_model_PermissionsI import PermissionsI as Perms 62 from omero_model_ExperimenterGroupI import ExperimenterGroupI as Grp 63 64 perms = self.parse_perms(args) 65 c = self.ctx.conn(args) 66 p = c.ic.getProperties() 67 g = Grp() 68 g.name = rstring(args.name) 69 g.details.permissions = Perms(perms) 70 admin = c.getSession().getAdminService() 71 id = admin.createGroup(g) 72 self.ctx.out("Added group %s (id=%s) with permissions %s" % (id, args.name, perms))
73
74 - def perms(self, args):
75 76 import omero 77 from omero_model_ExperimenterGroupI import ExperimenterGroupI as Grp 78 from omero_model_PermissionsI import PermissionsI as Perms 79 80 perms = self.parse_perms(args) 81 c = self.ctx.conn(args) 82 a = c.sf.getAdminService() 83 84 try: 85 try: 86 gid = long(args.id_or_name) 87 g = a.getGroup(gid) 88 except ValueError: 89 g = a.lookupGroup(args.id_or_name) 90 gid = g.id.val 91 except omero.ApiUsageException: 92 self.ctx.die(503, "Unknown group: %s" % gid) 93 94 95 old_perms = str(g.details.permissions) 96 if old_perms == perms: 97 self.ctx.out("Permissions for group %s (id=%s) already %s" % (g.name.val, gid, perms)) 98 else: 99 try: 100 a.changePermissions(Grp(gid, False), Perms(perms)) 101 self.ctx.out("Changed permissions for group %s (id=%s) to %s" % (g.name.val, gid, perms)) 102 except omero.GroupSecurityViolation: 103 import traceback 104 self.ctx.dbg(traceback.format_exc()) 105 self.ctx.die(504, "Cannot change permissions for group %s (id=%s) to %s" % (g.name.val, gid, perms))
106 107
108 - def list(self, args):
109 c = self.ctx.conn(args) 110 groups = c.sf.getAdminService().lookupGroups() 111 from omero.util.text import TableBuilder 112 if args.long: 113 tb = TableBuilder("id", "name", "perms", "owner ids", "member ids") 114 else: 115 tb = TableBuilder("id", "name", "perms", "# of owners", "# of members") 116 for group in groups: 117 row = [group.id.val, group.name.val, str(group.details.permissions)] 118 if args.long: 119 row.append(",".join(sorted([str(x.child.id.val) for x in group.copyGroupExperimenterMap() if x.owner.val]))) 120 row.append(",".join(sorted([str(x.child.id.val) for x in group.copyGroupExperimenterMap() if not x.owner.val]))) 121 else: 122 row.append(len([x for x in group.copyGroupExperimenterMap() if x.owner.val])) 123 row.append(len([x for x in group.copyGroupExperimenterMap() if not x.owner.val])) 124 tb.row(*tuple(row)) 125 self.ctx.out(str(tb.build()))
126
127 - def copy(self, args):
128 import omero 129 c = self.ctx.conn(args) 130 a = c.sf.getAdminService() 131 f_grp = a.getGroup(args.from_group) 132 t_grp = a.getGroup(args.to_group) 133 134 to_add = [(x.child.id.val, x.child.omeName.val) for x in f_grp.copyGroupExperimenterMap()] 135 already = [x.child.id.val for x in t_grp.copyGroupExperimenterMap()] 136 for add in list(to_add): 137 if add[0] in already: 138 self.ctx.out("%s already in group %s" % (add[1], args.to_group)) 139 to_add.remove(add) 140 self.addusersbyid(c, t_grp, [x[0] for x in to_add]) 141 self.ctx.out("%s coped to %s" % (args.from_group, args.to_group))
142
143 - def insert(self, args):
144 import omero 145 c = self.ctx.conn(args) 146 a = c.sf.getAdminService() 147 grp = a.getGroup(args.group) 148 self.addusersbyid(c, grp, args.user) 149 self.ctx.out("Added %s users to %s" % (len(args.user), args.group))
150
151 - def addusersbyid(self, c, group, users):
152 import omero 153 a = c.sf.getAdminService() 154 for add in list(users): 155 a.addGroups(omero.model.ExperimenterI(add, False), [group]) 156 self.ctx.out("Added %s" % add)
157 158 try: 159 register("group", GroupControl, HELP) 160 except NameError: 161 if __name__ == "__main__": 162 cli = CLI() 163 cli.register("group", GroupControl, HELP) 164 cli.invoke(sys.argv[1:]) 165