RSpecVersion.todict() needs to turn values() into a list()
[sfa.git] / sfa / client / common.py
index b2e2fde..16a0694 100644 (file)
@@ -1,9 +1,17 @@
 # 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:
@@ -35,48 +43,57 @@ def terminal_render_plural (how_many, name,names=None):
     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):