from __future__ import absolute_import
import csv
import operator
import py
class CSVResults(object):
def __init__(self, columns, sort, logger):
self.columns = columns
self.sort = sort
self.logger = logger
def render(self, output_file, groups):
output_file = py.path.local(output_file)
if not output_file.ext:
output_file = output_file.new(ext='csv')
with output_file.open('w', ensure=True) as stream:
writer = csv.writer(stream)
params = sorted(set(
param
for group, benchmarks in groups
for benchmark in benchmarks
for param in benchmark.get("params", {}) or ()
))
writer.writerow([
"name",
] + [
"param:{0}".format(p)
for p in params
] + self.columns)
for group, benchmarks in groups:
benchmarks = sorted(benchmarks, key=operator.itemgetter(self.sort))
for bench in benchmarks:
row = [bench.get("fullfunc", bench["fullname"])]
row.extend(bench.get('params', {}).get(param, "") for param in params)
row.extend(bench[prop] for prop in self.columns)
writer.writerow(row)
self.logger.info("Generated csv: {0}".format(output_file), bold=True)