43 lines
1.4 KiB
Python
43 lines
1.4 KiB
Python
|
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)
|