# a few utilities common to sfi and sfaadmin
+from __future__ import print_function
+
def optparse_listvalue_callback(option, opt, value, parser):
former=getattr(parser.values,option.dest)
if not former: former=[]
- setattr(parser.values, option.dest, former+value.split(','))
+ # support for using e.g. sfi update -t slice -x the.slice.hrn -r none
+ # instead of -r '' which is painful and does not pass well through ssh
+ if value.lower()=='none':
+ newvalue=former
+ else:
+ newvalue=former+value.split(',')
+ setattr(parser.values, option.dest, newvalue)
def optparse_dictvalue_callback (option, option_string, value, parser):
try:
else: return "%d %s"%(how_many,names)
def terminal_render_default (record,options):
- print "%s (%s)" % (record['hrn'], record['type'])
+ print("%s (%s)" % (record['hrn'], record['type']))
def terminal_render_user (record, options):
- print "%s (User)"%record['hrn'],
- if record.get('reg-pi-authorities',None): print " [PI at %s]"%(" and ".join(record['reg-pi-authorities'])),
- if record.get('reg-slices',None): print " [IN slices %s]"%(" and ".join(record['reg-slices'])),
+ print("%s (User)"%record['hrn'], end=' ')
+ if options.verbose and record.get('email', None):
+ print("email='{}'".format(record['email']), end=' ')
+ if record.get('reg-pi-authorities', None):
+ print(" [PI at %s]"%(" and ".join(record['reg-pi-authorities'])), end=' ')
+ if record.get('reg-slices', None):
+ print(" [IN slices %s]"%(" and ".join(record['reg-slices'])), end=' ')
user_keys=record.get('reg-keys',[])
if not options.verbose:
- print " [has %s]"%(terminal_render_plural(len(user_keys),"key"))
+ print(" [has %s]"%(terminal_render_plural(len(user_keys),"key")))
else:
- print ""
- for key in user_keys: print 8*' ',key.strip("\n")
+ print("")
+ for key in user_keys: print(8*' ',key.strip("\n"))
def terminal_render_slice (record, options):
- print "%s (Slice)"%record['hrn'],
- if record.get('reg-researchers',None): print " [USERS %s]"%(" and ".join(record['reg-researchers'])),
+ print("%s (Slice)"%record['hrn'], end=' ')
+ if record.get('reg-researchers', None):
+ print(" [USERS %s]"%(" and ".join(record['reg-researchers'])), end=' ')
# print record.keys()
- print ""
+ print("")
def terminal_render_authority (record, options):
- print "%s (Authority)"%record['hrn'],
- if record.get('reg-pis',None): print " [PIS %s]"%(" and ".join(record['reg-pis'])),
- print ""
+ print("%s (Authority)"%record['hrn'], end=' ')
+ if options.verbose and record.get('name'):
+ print("name='{}'".format(record['name']))
+ if record.get('reg-pis', None):
+ print(" [PIS %s]"%(" and ".join(record['reg-pis'])), end=' ')
+ print("")
def terminal_render_node (record, options):
- print "%s (Node)"%record['hrn']
+ print("%s (Node)"%record['hrn'])
### used in sfi list
-def terminal_render (records,options):
+def terminal_render (records, options):
# sort records by type
- grouped_by_type={}
+ grouped_by_type = {}
for record in records:
- type=record['type']
- if type not in grouped_by_type: grouped_by_type[type]=[]
+ type = record['type']
+ if type not in grouped_by_type:
+ grouped_by_type[type]=[]
grouped_by_type[type].append(record)
- group_types=grouped_by_type.keys()
+ group_types = grouped_by_type.keys()
group_types.sort()
for type in group_types:
- group=grouped_by_type[type]
+ group = grouped_by_type[type]
# print 20 * '-', type
- try: renderer=eval('terminal_render_'+type)
- except: renderer=terminal_render_default
- for record in group: renderer(record,options)
-
+ try: renderer = eval('terminal_render_' + type)
+ except: renderer = terminal_render_default
+ for record in group:
+ renderer(record, options)
####################
def filter_records(type, records):