From e0e3b09aa39ec0f078cf007927bfd4e9573a1211 Mon Sep 17 00:00:00 2001 From: Thierry Parmentelat Date: Thu, 20 Sep 2012 16:11:04 +0200 Subject: [PATCH] add to List the same builtin relations as for Resolve use that to have 'sfi list' display member ships and PI relationships as well --- sfa/client/sfi.py | 38 +++++++++++++++++++++++++++++--- sfa/managers/registry_manager.py | 3 ++- 2 files changed, 37 insertions(+), 4 deletions(-) diff --git a/sfa/client/sfi.py b/sfa/client/sfi.py index 2707ffd2..35270191 100644 --- a/sfa/client/sfi.py +++ b/sfa/client/sfi.py @@ -197,6 +197,39 @@ def save_record_to_file(filename, record_dict): f.close() return +# used in sfi list +def terminal_render (records,options): + # sort records by type + grouped_by_type={} + for record in records: + type=record['type'] + if type not in grouped_by_type: grouped_by_type[type]=[] + grouped_by_type[type].append(record) + for (type, list) in grouped_by_type.items(): +# print 20 * '-', type + try: renderer=eval('terminal_render_'+type) + except: renderer=terminal_render_default + for record in list: renderer(record,options) + +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'])), + print "" +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 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'] + # minimally check a key argument def check_ssh_key (key): good_ssh_key = r'^.*(?:ssh-dss|ssh-rsa)[ ]+[A-Za-z0-9+/=]+(?: .*)?$' @@ -856,10 +889,9 @@ or version information about sfi itself raise Exception, "Not enough parameters for the 'list' command" # filter on person, slice, site, node, etc. - # THis really should be in the self.filter_records funct def comment... + # This really should be in the self.filter_records funct def comment... list = filter_records(options.type, list) - for record in list: - print "%s (%s)" % (record['hrn'], record['type']) + terminal_render (list, options) if options.file: save_records_to_file(options.file, list, options.fileformat) return diff --git a/sfa/managers/registry_manager.py b/sfa/managers/registry_manager.py index 687e1c63..898fac3a 100644 --- a/sfa/managers/registry_manager.py +++ b/sfa/managers/registry_manager.py @@ -226,7 +226,8 @@ class RegistryManager: records = dbsession.query(RegRecord).filter(RegRecord.hrn.startswith(hrn)) else: records = dbsession.query(RegRecord).filter_by(authority=hrn) - record_dicts=[ record.todict() for record in records ] + for record in records: augment_with_related_hrns (record) + record_dicts=[ record.todict(exclude_type=RegRecord) for record in records ] return record_dicts -- 2.47.0