black: re-format
black and isort are enabled in the openbmc-build-scripts on Python files
to have a consistent formatting. Re-run the formatter on the whole
repository.
Change-Id: If1010ead857d41364c024bf8145a979a9377d382
Signed-off-by: Patrick Williams <patrick@stwcx.xyz>
diff --git a/tools/ct_metrics/gen_csv_results.py b/tools/ct_metrics/gen_csv_results.py
index 3ad9d67..2b4df12 100755
--- a/tools/ct_metrics/gen_csv_results.py
+++ b/tools/ct_metrics/gen_csv_results.py
@@ -6,22 +6,21 @@
http://robot-framework.readthedocs.io/en/3.0/autodoc/robot.result.html
"""
-import sys
-import os
-import getopt
import csv
-import robot.errors
+import datetime
+import getopt
+import os
import re
import stat
-import datetime
-
-from robot.api import ExecutionResult
-from robot.result.visitor import ResultVisitor
+import sys
from xml.etree import ElementTree
+import robot.errors
from gen_arg import *
from gen_print import *
from gen_valid import *
+from robot.api import ExecutionResult
+from robot.result.visitor import ResultVisitor
# Remove the python library path to restore with local project path later.
save_path_0 = sys.path[0]
@@ -33,7 +32,7 @@
this_program = sys.argv[0]
-info = " For more information: " + this_program + ' -h'
+info = " For more information: " + this_program + " -h"
if len(sys.argv) == 1:
print(info)
sys.exit(1)
@@ -41,64 +40,88 @@
parser = argparse.ArgumentParser(
usage=info,
- description="%(prog)s uses a robot framework API to extract test result\
- data from output.xml generated by robot tests. For more information on the\
- Robot Framework API, see\
- http://robot-framework.readthedocs.io/en/3.0/autodoc/robot.result.html",
+ description=(
+ "%(prog)s uses a robot framework API to extract test result data"
+ " from output.xml generated by robot tests. For more information on"
+ " the Robot Framework API, see "
+ " http://robot-framework.readthedocs.io/en/3.0/autodoc/robot.result.html"
+ ),
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
- prefix_chars='-+')
+ prefix_chars="-+",
+)
parser.add_argument(
- '--source',
- '-s',
- help='The output.xml robot test result file path. This parameter is \
- required.')
+ "--source",
+ "-s",
+ help=(
+ "The output.xml robot test result file path. This parameter is "
+ " required."
+ ),
+)
parser.add_argument(
- '--dest',
- '-d',
- help='The directory path where the generated .csv files will go. This \
- parameter is required.')
+ "--dest",
+ "-d",
+ help=(
+ "The directory path where the generated .csv files will go. This "
+ " parameter is required."
+ ),
+)
parser.add_argument(
- '--version_id',
- help='Driver version of openbmc firmware which was used during test,\
- e.g. "v2.1-215-g6e7eacb". This parameter is required.')
+ "--version_id",
+ help=(
+ "Driver version of openbmc firmware which was used during test, "
+ ' e.g. "v2.1-215-g6e7eacb". This parameter is required.'
+ ),
+)
parser.add_argument(
- '--platform',
- help='OpenBMC platform which was used during test,\
- e.g. "Witherspoon". This parameter is required.')
+ "--platform",
+ help=(
+ "OpenBMC platform which was used during test, e.g."
+ ' "Witherspoon". This parameter is required.'
+ ),
+)
parser.add_argument(
- '--level',
- help='OpenBMC release level which was used during test,\
- e.g. "Master", "OBMC920". This parameter is required.')
+ "--level",
+ help=(
+ "OpenBMC release level which was used during test, e.g."
+ ' "Master", "OBMC920". This parameter is required.'
+ ),
+)
parser.add_argument(
- '--test_phase',
- help='Name of testing phase, e.g. "DVT", "SVT", etc.\
- This parameter is optional.',
- default="FVT")
+ "--test_phase",
+ help=(
+ 'Name of testing phase, e.g. "DVT", "SVT", etc. This'
+ " parameter is optional."
+ ),
+ default="FVT",
+)
parser.add_argument(
- '--subsystem',
- help='Name of the subsystem, e.g. "OPENBMC" etc.\
- This parameter is optional.',
- default="OPENBMC")
+ "--subsystem",
+ help=(
+ 'Name of the subsystem, e.g. "OPENBMC" etc. This parameter is'
+ " optional."
+ ),
+ default="OPENBMC",
+)
parser.add_argument(
- '--processor',
+ "--processor",
help='Name of processor, e.g. "P9". This parameter is optional.',
- default="OPENPOWER")
+ default="OPENPOWER",
+)
# Populate stock_list with options we want.
stock_list = [("test_mode", 0), ("quiet", 0), ("debug", 0)]
-def exit_function(signal_number=0,
- frame=None):
+def exit_function(signal_number=0, frame=None):
r"""
Execute whenever the program ends normally or with the signals that we
catch (i.e. TERM, INT).
@@ -111,8 +134,7 @@
qprint_pgm_footer()
-def signal_handler(signal_number,
- frame):
+def signal_handler(signal_number, frame):
r"""
Handle signals. Without a function to catch a SIGTERM or SIGINT, the
program would terminate immediately with return code 143 and without
@@ -146,8 +168,15 @@
return True
-def parse_output_xml(xml_file_path, csv_dir_path, version_id, platform, level,
- test_phase, processor):
+def parse_output_xml(
+ xml_file_path,
+ csv_dir_path,
+ version_id,
+ platform,
+ level,
+ test_phase,
+ processor,
+):
r"""
Parse the robot-generated output.xml file and extract various test
output data. Put the extracted information into a csv file in the "dest"
@@ -175,13 +204,19 @@
total_non_critical_failed = 0
result = ExecutionResult(xml_file_path)
- result.configure(stat_config={'suite_stat_level': 2,
- 'tag_stat_combine': 'tagANDanother'})
+ result.configure(
+ stat_config={
+ "suite_stat_level": 2,
+ "tag_stat_combine": "tagANDanother",
+ }
+ )
stats = result.statistics
print("--------------------------------------")
try:
- total_critical_tc = stats.total.critical.passed + stats.total.critical.failed
+ total_critical_tc = (
+ stats.total.critical.passed + stats.total.critical.failed
+ )
total_critical_passed = stats.total.critical.passed
total_critical_failed = stats.total.critical.failed
except AttributeError:
@@ -194,7 +229,9 @@
except AttributeError:
pass
- print("Total Test Count:\t %d" % (total_non_critical_tc + total_critical_tc))
+ print(
+ "Total Test Count:\t %d" % (total_non_critical_tc + total_critical_tc)
+ )
print("Total Critical Test Failed:\t %d" % total_critical_failed)
print("Total Critical Test Passed:\t %d" % total_critical_passed)
@@ -221,11 +258,11 @@
# Default Test data
l_test_type = test_phase
- l_pse_rel = 'Master'
+ l_pse_rel = "Master"
if level:
l_pse_rel = level
- l_env = 'HW'
+ l_env = "HW"
l_proc = processor
l_platform_type = ""
l_func_area = ""
@@ -252,14 +289,27 @@
if l_driver and l_platform_type:
print("Driver and system info set.")
else:
- print("Both driver and system info need to be set.\
- CSV file is not generated.")
+ print(
+ "Both driver and system info need to be set. CSV"
+ " file is not generated."
+ )
sys.exit()
# Default header
- l_header = ['test_start', 'test_end', 'subsys', 'test_type',
- 'test_result', 'test_name', 'pse_rel', 'driver',
- 'env', 'proc', 'platform_type', 'test_func_area']
+ l_header = [
+ "test_start",
+ "test_end",
+ "subsys",
+ "test_type",
+ "test_result",
+ "test_name",
+ "pse_rel",
+ "driver",
+ "env",
+ "proc",
+ "platform_type",
+ "test_func_area",
+ ]
l_csvlist.append(l_header)
@@ -274,11 +324,11 @@
for testcase in collectDataObj.testData:
# Functional Area: Suite Name
# Test Name: Test Case Name
- l_func_area = str(testcase.parent).split(' ', 1)[1]
+ l_func_area = str(testcase.parent).split(" ", 1)[1]
l_test_name = str(testcase)
# Test Result pass=0 fail=1
- if testcase.status == 'PASS':
+ if testcase.status == "PASS":
l_test_result = 0
else:
l_test_result = 1
@@ -289,18 +339,36 @@
# Data Sequence: test_start,test_end,subsys,test_type,
# test_result,test_name,pse_rel,driver,
# env,proc,platform_type,test_func_area,
- l_data = [l_stime, l_etime, subsystem, l_test_type, l_test_result,
- l_test_name, l_pse_rel, l_driver, l_env, l_proc,
- l_platform_type, l_func_area]
+ l_data = [
+ l_stime,
+ l_etime,
+ subsystem,
+ l_test_type,
+ l_test_result,
+ l_test_name,
+ l_pse_rel,
+ l_driver,
+ l_env,
+ l_proc,
+ l_platform_type,
+ l_func_area,
+ ]
l_csvlist.append(l_data)
# Open the file and write to the CSV file
l_file = open(l_csvfile, "w")
- l_writer = csv.writer(l_file, lineterminator='\n')
+ l_writer = csv.writer(l_file, lineterminator="\n")
l_writer.writerows(l_csvlist)
l_file.close()
# Set file permissions 666.
- perm = stat.S_IRUSR + stat.S_IWUSR + stat.S_IRGRP + stat.S_IWGRP + stat.S_IROTH + stat.S_IWOTH
+ perm = (
+ stat.S_IRUSR
+ + stat.S_IWUSR
+ + stat.S_IRGRP
+ + stat.S_IWGRP
+ + stat.S_IROTH
+ + stat.S_IWOTH
+ )
os.chmod(l_csvfile, perm)
@@ -336,19 +404,19 @@
bmc_version_id = ""
bmc_platform = ""
- with open(xml_file_path, 'rt') as output:
+ with open(xml_file_path, "rt") as output:
tree = ElementTree.parse(output)
- for node in tree.iter('msg'):
+ for node in tree.iter("msg"):
# /etc/os-release output is logged in the XML as msg
# Example: ${output} = VERSION_ID="v1.99.2-71-gbc49f79"
- if '${output} = VERSION_ID=' in node.text:
+ if "${output} = VERSION_ID=" in node.text:
# Get BMC version (e.g. v1.99.1-96-g2a46570)
bmc_version_id = str(node.text.split("VERSION_ID=")[1])[1:-1]
# Platform is logged in the XML as msg.
# Example: ${bmc_model} = Witherspoon BMC
- if '${bmc_model} = ' in node.text:
+ if "${bmc_model} = " in node.text:
bmc_platform = node.text.split(" = ")[1]
print_vars(bmc_version_id, bmc_platform)
@@ -356,7 +424,6 @@
def main():
-
if not gen_get_options(parser, stock_list):
return False
@@ -365,8 +432,9 @@
qprint_pgm_header()
- parse_output_xml(source, dest, version_id, platform, level,
- test_phase, processor)
+ parse_output_xml(
+ source, dest, version_id, platform, level, test_phase, processor
+ )
return True
diff --git a/tools/github_issues_to_csv b/tools/github_issues_to_csv
index c287f7c..ce6e1e2 100644
--- a/tools/github_issues_to_csv
+++ b/tools/github_issues_to_csv
@@ -8,10 +8,11 @@
import argparse
import csv
import getpass
+
import requests
auth = None
-states = 'all'
+states = "all"
def write_issues(response, csv_out):
@@ -22,36 +23,45 @@
if response.status_code != 200:
raise Exception(response.status_code)
for issue in response.json():
- if 'pull_request' not in issue:
- labels = ', '.join([lable['name'] for lable in issue['labels']])
+ if "pull_request" not in issue:
+ labels = ", ".join([lable["name"] for lable in issue["labels"]])
# Below lines to overcome "TypeError: 'NoneType' object has
# no attribute '__getitem__'"
- close_date = issue.get('closed_at')
+ close_date = issue.get("closed_at")
if close_date:
- close_date = issue.get('closed_at').split('T')[0]
+ close_date = issue.get("closed_at").split("T")[0]
- assignee_resp = issue.get('assignees', 'Not Assigned')
+ assignee_resp = issue.get("assignees", "Not Assigned")
if assignee_resp:
- owners = ','.join([assignee_login['login'] for
- assignee_login in assignee_resp])
+ owners = ",".join(
+ [
+ assignee_login["login"]
+ for assignee_login in assignee_resp
+ ]
+ )
else:
owners = "Not Assigned"
- milestone_resp = issue.get('milestone', 'Not Assigned')
+ milestone_resp = issue.get("milestone", "Not Assigned")
if milestone_resp:
- milestone_resp = milestone_resp['title'].encode('utf-8')
+ milestone_resp = milestone_resp["title"].encode("utf-8")
# Change the following line to write out additional fields
- csv_out.writerow([labels.encode('utf-8'),
- issue.get('title').encode('utf-8'),
- issue.get('state').encode('utf-8'),
- issue.get('created_at').split('T')[0],
- close_date,
- issue.get('html_url').encode('utf-8'),
- issue.get('user').get('login').encode('utf-8'),
- owners, milestone_resp])
+ csv_out.writerow(
+ [
+ labels.encode("utf-8"),
+ issue.get("title").encode("utf-8"),
+ issue.get("state").encode("utf-8"),
+ issue.get("created_at").split("T")[0],
+ close_date,
+ issue.get("html_url").encode("utf-8"),
+ issue.get("user").get("login").encode("utf-8"),
+ owners,
+ milestone_resp,
+ ]
+ )
def get_issues_from_github_to_csv(name, response):
@@ -65,36 +75,49 @@
print(states)
# Multiple requests are required if response is paged
- if 'link' in response.headers:
- pages = {rel[6:-1]: url[url.index('<') + 1:-1] for url, rel in
- (link.split(';') for link in
- response.headers['link'].split(','))}
- while 'last' in pages and 'next' in pages:
- pages = {rel[6:-1]: url[url.index('<') + 1:-1] for url, rel in
- (link.split(';') for link in
- response.headers['link'].split(','))}
- response = requests.get(pages['next'], auth=auth)
+ if "link" in response.headers:
+ pages = {
+ rel[6:-1]: url[url.index("<") + 1 : -1]
+ for url, rel in (
+ link.split(";") for link in response.headers["link"].split(",")
+ )
+ }
+ while "last" in pages and "next" in pages:
+ pages = {
+ rel[6:-1]: url[url.index("<") + 1 : -1]
+ for url, rel in (
+ link.split(";")
+ for link in response.headers["link"].split(",")
+ )
+ }
+ response = requests.get(pages["next"], auth=auth)
write_issues(response, csv_out)
- if pages['next'] == pages['last']:
+ if pages["next"] == pages["last"]:
break
-parser = argparse.ArgumentParser(description="Write GitHub repository issues "
- "to CSV file.")
+parser = argparse.ArgumentParser(
+ description="Write GitHub repository issues to CSV file."
+)
-parser.add_argument('username', nargs='?', help="GitHub user name, "
- "formatted as 'username'")
+parser.add_argument(
+ "username", nargs="?", help="GitHub user name, formatted as 'username'"
+)
-parser.add_argument('repositories', nargs='+', help="Repository names, "
- "formatted as 'basereponame/repo'")
+parser.add_argument(
+ "repositories",
+ nargs="+",
+ help="Repository names, formatted as 'basereponame/repo'",
+)
-parser.add_argument('--all', action='store_true', help="Returns both open "
- "and closed issues.")
+parser.add_argument(
+ "--all", action="store_true", help="Returns both open and closed issues."
+)
args = parser.parse_args()
if args.all:
- state = 'all'
+ state = "all"
username = args.username
@@ -105,16 +128,26 @@
# To set the csv filename
csvfilename = ""
for repository in args.repositories:
- csvfilename_temp = '{}'.format(repository.replace('/', '-'))
+ csvfilename_temp = "{}".format(repository.replace("/", "-"))
csvfilename = csvfilename + csvfilename_temp
-csvfilename = csvfilename + '-issues.csv'
-with open(csvfilename, 'w') as csvfileout:
+csvfilename = csvfilename + "-issues.csv"
+with open(csvfilename, "w") as csvfileout:
csv_out = csv.writer(csvfileout)
- csv_out.writerow(['Labels', 'Title', 'State', 'Open Date',
- 'Close Date', 'URL', 'Author', 'Assignees',
- 'Milestone'])
+ csv_out.writerow(
+ [
+ "Labels",
+ "Title",
+ "State",
+ "Open Date",
+ "Close Date",
+ "URL",
+ "Author",
+ "Assignees",
+ "Milestone",
+ ]
+ )
for repository in args.repositories:
- l_url = 'https://api.github.com/repos/{}/issues?state={}'
+ l_url = "https://api.github.com/repos/{}/issues?state={}"
l_url = l_url.format(repository, states)
response = requests.get(l_url, auth=auth)
write_issues(response, csv_out)