1
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
18
43
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):
73
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
150
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