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