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, ExceptionHandler
14
15 HELP="""Group administration methods"""
16
18
47
49 perms = getattr(args, "perms", None)
50 if not perms:
51 if args.type == "private":
52 perms = "rw----"
53 elif args.type == "read-only":
54 perms = "rwr---"
55 elif args.type == "collaborative":
56 perms = "rwrw--"
57 if not perms:
58 perms = "rw----"
59 return perms
60
61 - def add(self, args):
62
63 import omero, Ice
64 from omero.rtypes import rstring
65 from omero_model_PermissionsI import PermissionsI as Perms
66 from omero_model_ExperimenterGroupI import ExperimenterGroupI as Grp
67
68 perms = self.parse_perms(args)
69 c = self.ctx.conn(args)
70 p = c.ic.getProperties()
71 g = Grp()
72 g.name = rstring(args.name)
73 g.details.permissions = Perms(perms)
74 admin = c.getSession().getAdminService()
75 try:
76 grp = admin.lookupGroup(args.name)
77 if grp:
78 if args.ignore_existing:
79 self.ctx.out("Group exists: %s (id=%s)" % (args.name, grp.id.val))
80 return
81 else:
82 self.ctx.die(3, "Group exists: %s (id=%s)" % (args.name, grp.id.val))
83 except omero.ApiUsageException, aue:
84 pass
85
86 try:
87 id = admin.createGroup(g)
88 self.ctx.out("Added group %s (id=%s) with permissions %s" % (id, args.name, perms))
89 except omero.ValidationException, ve:
90
91 if self.exc.is_constraint_violation(ve):
92 self.ctx.die(66, "Group already exists: %s" % args.name)
93 else:
94 self.ctx.die(67, "Unknown ValidationException: %s" % ve.message)
95 except omero.SecurityViolation, se:
96 self.ctx.die(68, "Security violation: %s" % se.message)
97 except omero.ServerError, se:
98 self.ctx.die(4, "%s: %s" % (type(se), se.message))
99
100
102
103 import omero
104 from omero_model_ExperimenterGroupI import ExperimenterGroupI as Grp
105 from omero_model_PermissionsI import PermissionsI as Perms
106
107 perms = self.parse_perms(args)
108 c = self.ctx.conn(args)
109 a = c.sf.getAdminService()
110
111 try:
112 try:
113 gid = long(args.id_or_name)
114 g = a.getGroup(gid)
115 except ValueError:
116 g = a.lookupGroup(args.id_or_name)
117 gid = g.id.val
118 except omero.ApiUsageException:
119 self.ctx.die(503, "Unknown group: %s" % gid)
120
121
122 old_perms = str(g.details.permissions)
123 if old_perms == perms:
124 self.ctx.out("Permissions for group %s (id=%s) already %s" % (g.name.val, gid, perms))
125 else:
126 try:
127 a.changePermissions(Grp(gid, False), Perms(perms))
128 self.ctx.out("Changed permissions for group %s (id=%s) to %s" % (g.name.val, gid, perms))
129 except omero.GroupSecurityViolation:
130 import traceback
131 self.ctx.dbg(traceback.format_exc())
132 self.ctx.die(504, "Cannot change permissions for group %s (id=%s) to %s" % (g.name.val, gid, perms))
133
134
135 - def list(self, args):
136 c = self.ctx.conn(args)
137 groups = c.sf.getAdminService().lookupGroups()
138 from omero.util.text import TableBuilder
139 if args.long:
140 tb = TableBuilder("id", "name", "perms", "owner ids", "member ids")
141 else:
142 tb = TableBuilder("id", "name", "perms", "# of owners", "# of members")
143 for group in groups:
144 row = [group.id.val, group.name.val, str(group.details.permissions)]
145 if args.long:
146 row.append(",".join(sorted([str(x.child.id.val) for x in group.copyGroupExperimenterMap() if x.owner.val])))
147 row.append(",".join(sorted([str(x.child.id.val) for x in group.copyGroupExperimenterMap() if not x.owner.val])))
148 else:
149 row.append(len([x for x in group.copyGroupExperimenterMap() if x.owner.val]))
150 row.append(len([x for x in group.copyGroupExperimenterMap() if not x.owner.val]))
151 tb.row(*tuple(row))
152 self.ctx.out(str(tb.build()))
153
154 - def copy(self, args):
155 import omero
156 c = self.ctx.conn(args)
157 a = c.sf.getAdminService()
158 f_grp = a.getGroup(args.from_group)
159 t_grp = a.getGroup(args.to_group)
160
161 to_add = [(x.child.id.val, x.child.omeName.val) for x in f_grp.copyGroupExperimenterMap()]
162 already = [x.child.id.val for x in t_grp.copyGroupExperimenterMap()]
163 for add in list(to_add):
164 if add[0] in already:
165 self.ctx.out("%s already in group %s" % (add[1], args.to_group))
166 to_add.remove(add)
167 self.addusersbyid(c, t_grp, [x[0] for x in to_add])
168 self.ctx.out("%s coped to %s" % (args.from_group, args.to_group))
169
177
184
185 try:
186 register("group", GroupControl, HELP)
187 except NameError:
188 if __name__ == "__main__":
189 cli = CLI()
190 cli.register("group", GroupControl, HELP)
191 cli.invoke(sys.argv[1:])
192