# a few utilities common to sfi and sfaadmin
+
+
+
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(','))
+ former = getattr(parser.values, option.dest)
+ if not former:
+ former = []
+ # 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):
+def optparse_dictvalue_callback(option, option_string, value, parser):
try:
- (k,v)=value.split('=',1)
- d=getattr(parser.values, option.dest)
- d[k]=v
+ (k, v) = value.split('=', 1)
+ d = getattr(parser.values, option.dest)
+ d[k] = v
except:
parser.print_help()
sys.exit(1)
-# a code fragment that could be helpful for argparse which unfortunately is
+# a code fragment that could be helpful for argparse which unfortunately is
# available with 2.7 only, so this feels like too strong a requirement for the client side
-#class ExtraArgAction (argparse.Action):
+# class ExtraArgAction (argparse.Action):
# def __call__ (self, parser, namespace, values, option_string=None):
# would need a try/except of course
-# (k,v)=values.split('=')
-# d=getattr(namespace,self.dest)
-# d[k]=v
+# (k, v) = values.split('=')
+# d = getattr(namespace, self.dest)
+# d[k] = v
#####
-#parser.add_argument ("-X","--extra",dest='extras', default={}, action=ExtraArgAction,
-# help="set extra flags, testbed dependent, e.g. --extra enabled=true")
-
+# parser.add_argument ("-X", "--extra", dest='extras', default={}, action=ExtraArgAction,
+# help="set extra flags, testbed dependent, e.g. --extra enabled=true")
+
##############################
# these are not needed from the outside
-def terminal_render_plural (how_many, name,names=None):
- if not names: names="%ss"%name
- if how_many<=0: return "No %s"%name
- elif how_many==1: return "1 %s"%name
- else: return "%d %s"%(how_many,names)
-
-def terminal_render_default (record,options):
- 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'])),
- user_keys=record.get('reg-keys',[])
+
+
+def terminal_render_plural(how_many, name, names=None):
+ if not names:
+ names = "%ss" % name
+ if how_many <= 0:
+ return "No %s" % name
+ elif how_many == 1:
+ return "1 %s" % name
+ else:
+ return "%d %s" % (how_many, names)
+
+
+def terminal_render_default(record, options):
+ print("%s (%s)" % (record['hrn'], record['type']))
+
+
+def terminal_render_user(record, options):
+ 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")
-
-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("")
+ for key in user_keys:
+ print(8 * ' ', key.strip("\n"))
+
+
+def terminal_render_slice(record, options):
+ 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 ""
-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 ""
-def terminal_render_node (record, options):
- print "%s (Node)"%record['hrn']
+ print("")
+
+
+def terminal_render_authority(record, options):
+ 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'])
-### used in sfi list
-def terminal_render (records,options):
+
+# used in sfi list
+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 = list(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):
filtered_records = []
for record in records:
if (record['type'] == type) or (type == "all"):
filtered_records.append(record)
return filtered_records
-
-