25
25
-e ENDPOINT specify REST endpoint
26
26
(default = { ENDPOINT } )
27
27
-o outfile specify output file (default: write to stdout)
28
+ -g filter_group filter users by group name (eg, 'ap1-login')
28
29
-h display this help text
29
30
30
31
PASS for USER is taken from the first of:
@@ -48,6 +49,7 @@ class Options:
48
49
osg_co_id = OSG_CO_ID
49
50
outfile = None
50
51
authstr = None
52
+ filtergrp = None
51
53
52
54
53
55
options = Options ()
@@ -145,7 +147,7 @@ def get_co_person_osguser(pid):
145
147
146
148
def parse_options (args ):
147
149
try :
148
- ops , args = getopt .getopt (args , 'u:c:d:f:e:o:h' )
150
+ ops , args = getopt .getopt (args , 'u:c:d:f:g: e:o:h' )
149
151
except getopt .GetoptError :
150
152
usage ()
151
153
@@ -163,6 +165,7 @@ def parse_options(args):
163
165
if op == '-f' : passfile = arg
164
166
if op == '-e' : options .endpoint = arg
165
167
if op == '-o' : options .outfile = arg
168
+ if op == '-g' : options .filtergrp = arg
166
169
167
170
user , passwd = getpw (options .user , passfd , passfile )
168
171
options .authstr = mkauthstr (user , passwd )
@@ -179,13 +182,22 @@ def gid_pids_to_osguser_pid_gids(gid_pids, pid_osguser):
179
182
return pid_gids
180
183
181
184
182
- def get_osguser_groups ():
185
+ def filter_by_group (pid_gids , groups , filter_group_name ):
186
+ groups_idx = { v : k for k ,v in groups .items () }
187
+ filter_gid = groups_idx [filter_group_name ] # raises KeyError if missing
188
+ filter_group_pids = set (get_co_group_members__pids (filter_gid ))
189
+ return { p : g for p ,g in pid_gids .items () if p in filter_group_pids }
190
+
191
+
192
+ def get_osguser_groups (filter_group_name = None ):
183
193
groups = get_osg_co_groups__map ()
184
194
ospool_gids = filter (co_group_is_ospool , groups )
185
195
gid_pids = { gid : get_co_group_members__pids (gid ) for gid in ospool_gids }
186
196
all_pids = set ( pid for gid in gid_pids for pid in gid_pids [gid ] )
187
197
pid_osguser = { pid : get_co_person_osguser (pid ) for pid in all_pids }
188
198
pid_gids = gid_pids_to_osguser_pid_gids (gid_pids , pid_osguser )
199
+ if filter_group_name is not None :
200
+ pid_gids = filter_by_group (pid_gids , groups , filter_group_name )
189
201
190
202
return { pid_osguser [pid ]: sorted (map (groups .get , gids ))
191
203
for pid , gids in pid_gids .items () }
@@ -207,7 +219,7 @@ def print_usermap(osguser_groups):
207
219
def main (args ):
208
220
parse_options (args )
209
221
210
- osguser_groups = get_osguser_groups ()
222
+ osguser_groups = get_osguser_groups (options . filtergrp )
211
223
print_usermap (osguser_groups )
212
224
213
225
0 commit comments