Skip to content

Commit

Permalink
Improve groups.py plugin (See ome#2571)
Browse files Browse the repository at this point in the history
 * Take ids or names for the group and user arguments
 * Allow removing users from groups as well as adding
 * Fix various print comments
  • Loading branch information
joshmoore committed Feb 22, 2012
1 parent 0f7cc99 commit e1882cd
Showing 1 changed file with 56 additions and 21 deletions.
77 changes: 56 additions & 21 deletions components/tools/OmeroPy/src/omero/plugins/group.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,12 +38,16 @@ def _configure(self, parser):
list.add_argument("--long", action="store_true", help = "Print comma-separated list of all groups, not just counts")

copy = parser.add(sub, self.copy, "Copy the members of one group to another group")
copy.add_argument("from_group", type=long, help = "Source group ID whose members will be copied")
copy.add_argument("to_group", type=long, help = "Target group ID which will have new members added")
copy.add_argument("from_group", help = "Source group ID or NAME whose members will be copied")
copy.add_argument("to_group", help = "Target group ID or NAME which will have new members added")

insert = parser.add(sub, self.insert, "Insert one or more users into a group")
insert.add_argument("GROUP", metavar="group", type=long, help = "ID of the group which is to have users added")
insert.add_argument("USER", type=long, nargs="+", help = "ID of user to be inserted")
insert.add_argument("GROUP", metavar="group", help = "ID or NAME of the group which is to have users added")
insert.add_argument("USER", metavar="user", nargs="+", help = "ID or NAME of user to be inserted")

remove = parser.add(sub, self.remove, "remove one or more users from a group")
remove.add_argument("GROUP", metavar="group", help = "ID or NAME of the group which is to have users removed")
remove.add_argument("USER", metavar="user", nargs="+", help = "ID or NAME of user to be removed")

def parse_perms(self, args):
perms = getattr(args, "perms", None)
Expand Down Expand Up @@ -97,6 +101,31 @@ def add(self, args):
except omero.ServerError, se:
self.ctx.die(4, "%s: %s" % (type(se), se.message))

def find_group(self, admin, id_or_name):
import omero
try:
try:
gid = long(id_or_name)
g = admin.getGroup(gid)
except ValueError:
g = admin.lookupGroup(id_or_name)
gid = g.id.val
return gid, g
except omero.ApiUsageException:
self.ctx.die(503, "Unknown group: %s" % gid)

def find_user(self, admin, id_or_name):
import omero
try:
try:
uid = long(id_or_name)
u = admin.getExperimenter(uid)
except ValueError:
u = admin.lookupExperimenter(id_or_name)
uid = u.id.val
return uid, u
except omero.ApiUsageException:
self.ctx.die(503, "Unknown experimenter: %s" % uid)

def perms(self, args):

Expand All @@ -108,16 +137,7 @@ def perms(self, args):
c = self.ctx.conn(args)
a = c.sf.getAdminService()

try:
try:
gid = long(args.id_or_name)
g = a.getGroup(gid)
except ValueError:
g = a.lookupGroup(args.id_or_name)
gid = g.id.val
except omero.ApiUsageException:
self.ctx.die(503, "Unknown group: %s" % gid)

gid, g = self.find_group(admin, args.id_or_name)

old_perms = str(g.details.permissions)
if old_perms == perms:
Expand Down Expand Up @@ -155,8 +175,8 @@ def copy(self, args):
import omero
c = self.ctx.conn(args)
a = c.sf.getAdminService()
f_grp = a.getGroup(args.from_group)
t_grp = a.getGroup(args.to_group)
f_gid, f_grp = self.find_group(a, args.from_group)
t_gid, t_grp = self.find_group(a, args.to_group)

to_add = [(x.child.id.val, x.child.omeName.val) for x in f_grp.copyGroupExperimenterMap()]
already = [x.child.id.val for x in t_grp.copyGroupExperimenterMap()]
Expand All @@ -165,22 +185,37 @@ def copy(self, args):
self.ctx.out("%s already in group %s" % (add[1], args.to_group))
to_add.remove(add)
self.addusersbyid(c, t_grp, [x[0] for x in to_add])
self.ctx.out("%s coped to %s" % (args.from_group, args.to_group))
self.ctx.out("%s copied to %s" % (args.from_group, args.to_group))

def insert(self, args):
import omero
c = self.ctx.conn(args)
a = c.sf.getAdminService()
grp = a.getGroup(args.GROUP)
self.addusersbyid(c, grp, args.USER)
self.ctx.out("Added %s users to %s" % (len(args.USER), args.GROUP))
gid, grp = self.find_group(a, args.GROUP)
uids = [self.find_user(a, x)[0] for x in args.USER]
self.addusersbyid(c, grp, uids)

def remove(self, args):
import omero
c = self.ctx.conn(args)
a = c.sf.getAdminService()
gid, grp = self.find_group(a, args.GROUP)
uids = [self.find_user(a, x)[0] for x in args.USER]
self.removeusersbyid(c, grp, uids)

def addusersbyid(self, c, group, users):
import omero
a = c.sf.getAdminService()
for add in list(users):
a.addGroups(omero.model.ExperimenterI(add, False), [group])
self.ctx.out("Added %s" % add)
self.ctx.out("Added %s to group %s" % (add, group.id.val))

def removeusersbyid(self, c, group, users):
import omero
a = c.sf.getAdminService()
for add in list(users):
a.removeGroups(omero.model.ExperimenterI(add, False), [group])
self.ctx.out("Removed %s from group %s" % (add, group.id.val))

try:
register("group", GroupControl, HELP)
Expand Down

0 comments on commit e1882cd

Please sign in to comment.