From bd0e940015d80f094271d7947c98de57e90348a8 Mon Sep 17 00:00:00 2001 From: Dmitry Teselkin Date: Tue, 4 Apr 2017 18:02:21 +0300 Subject: [PATCH] Add --csvfile for list_deliverables list_deliverables produces multicolumn output only in verbose mode, and even in that mode it doesn't contain data about projects and latest commits. To simplify automated processing of that data this commit adds --csvfile parameter to specify that results should be stored in CSV file. Change-Id: I99af12a2a34d4f913ad4db6c3926e1b1a52a5a45 --- openstack_releases/cmds/list_deliverables.py | 31 +++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/openstack_releases/cmds/list_deliverables.py b/openstack_releases/cmds/list_deliverables.py index e8724d71a7..8f4c090a50 100644 --- a/openstack_releases/cmds/list_deliverables.py +++ b/openstack_releases/cmds/list_deliverables.py @@ -13,6 +13,7 @@ from __future__ import print_function import argparse +import csv import openstack_releases from openstack_releases import defaults @@ -47,6 +48,10 @@ def main(): default=defaults.RELEASE, help='the release series, such as "newton" or "ocata"', ) + parser.add_argument( + '--csvfile', + help='Save results (same as when --verbose) to CSV file', + ) model = parser.add_mutually_exclusive_group() model.add_argument( '--model', @@ -133,6 +138,14 @@ def main(): if not args.model: verbose_template += ' {model:15}' + csvfile = None + if args.csvfile: + csvfile = open(args.csvfile, 'w') + fieldnames = ['name', 'latest_release', 'repo', 'hash', + 'team', 'type', 'model'] + writer = csv.DictWriter(csvfile, fieldnames=fieldnames) + writer.writeheader() + all_deliv = deliverable.Deliverables( root_dir=args.deliverables_dir, collapse_history=False, @@ -168,7 +181,20 @@ def main(): 'a' in deliv.latest_release or 'b' in deliv.latest_release): continue - if args.verbose: + + if csvfile: + rel = (deliv.releases or [{}])[-1] + for prj in rel.get('projects', [{}]): + writer.writerow({ + 'name': deliv.name, + 'latest_release': rel.get('version', None), + 'repo': prj.get('repo', None), + 'hash': prj.get('hash', None), + 'team': deliv.team, + 'type': deliv.type, + 'model': deliv.model, + }) + elif args.verbose: print(verbose_template.format( name=deliv.name, latest_release=deliv.latest_release, @@ -181,3 +207,6 @@ def main(): print(r) else: print(deliv.name) + + if csvfile: + csvfile.close()