Skip to content

Commit cb0a064

Browse files
committed
tests: make jobstats and process-stats-dir python3 compatible
This makes the two utilities Python 2 and Python 3 compatible. This repairs the NameLookup tests with Python 3.
1 parent 4f27eee commit cb0a064

File tree

2 files changed

+39
-26
lines changed

2 files changed

+39
-26
lines changed

utils/jobstats/jobstats.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ def merged_with(self, other, merge_by="sum"):
9090
else max(a, b)),
9191
"max": lambda a, b: max(a, b)}
9292
op = ops[merge_by]
93-
for k, v in self.stats.items() + other.stats.items():
93+
for k, v in list(self.stats.items()) + list(other.stats.items()):
9494
if k in merged_stats:
9595
merged_stats[k] = op(v, merged_stats[k])
9696
else:
@@ -317,8 +317,7 @@ def load_stats_dir(path, select_module=[], select_stat=[],
317317
jobargs = [mg["input"], mg["triple"], mg["out"], mg["opt"]]
318318

319319
if platform.system() == 'Windows':
320-
p = unicode(u"\\\\?\\%s" % os.path.abspath(os.path.join(root,
321-
f)))
320+
p = str(u"\\\\?\\%s" % os.path.abspath(os.path.join(root, f)))
322321
else:
323322
p = os.path.join(root, f)
324323

utils/process-stats-dir.py

Lines changed: 37 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
import argparse
1919
import csv
20+
import io
2021
import itertools
2122
import json
2223
import os
@@ -25,7 +26,14 @@
2526
import sys
2627
import time
2728
import urllib
28-
import urllib2
29+
if sys.version_info[0] < 3:
30+
import urllib2
31+
Request = urllib2.Request
32+
URLOpen = urllib2.urlopen
33+
else:
34+
import urllib.request, urllib.parse, urllib.error
35+
Request = urllib.request.Request
36+
URLOpen = urllib.request.urlopen
2937
from collections import namedtuple
3038
from operator import attrgetter
3139

@@ -49,7 +57,8 @@ def stat_name_minus_module(name):
4957
def vars_of_args(args):
5058
vargs = vars(args)
5159
if args.select_stats_from_csv_baseline is not None:
52-
b = read_stats_dict_from_csv(args.select_stats_from_csv_baseline)
60+
with io.open(args.select_stats_from_csv_baseline, 'r', encoding='utf-8') as f:
61+
b = read_stats_dict_from_csv(f)
5362
# Sniff baseline stat-names to figure out if they're module-qualified
5463
# even when the user isn't asking us to _output_ module-grouped data.
5564
all_triples = all(len(k.split('.')) == 3 for k in b.keys())
@@ -105,18 +114,18 @@ def write_lnt_values(args):
105114
json.dump(j, args.output, indent=4)
106115
else:
107116
url = args.lnt_submit
108-
print "\nsubmitting to LNT server: " + url
117+
print("\nsubmitting to LNT server: " + url)
109118
json_report = {'input_data': json.dumps(j), 'commit': '1'}
110119
data = urllib.urlencode(json_report)
111-
response_str = urllib2.urlopen(urllib2.Request(url, data))
120+
response_str = URLOpen(Request(url, data))
112121
response = json.loads(response_str.read())
113-
print "### response:"
114-
print response
122+
print("### response:")
123+
print(response)
115124
if 'success' in response:
116-
print "server response:\tSuccess"
125+
print("server response:\tSuccess")
117126
else:
118-
print "server response:\tError"
119-
print "error:\t", response['error']
127+
print("server response:\tError")
128+
print("error:\t", response['error'])
120129
sys.exit(1)
121130

122131

@@ -187,8 +196,8 @@ def update_epoch_value(d, name, epoch, value):
187196
epoch = existing_epoch
188197
else:
189198
(_, delta_pct) = diff_and_pct(existing_value, value)
190-
print ("note: changing value %d -> %d (%.2f%%) for %s" %
191-
(existing_value, value, delta_pct, name))
199+
print("note: changing value %d -> %d (%.2f%%) for %s" %
200+
(existing_value, value, delta_pct, name))
192201
changed = 1
193202
d[name] = (epoch, value)
194203
return (epoch, value, changed)
@@ -233,22 +242,28 @@ def set_csv_baseline(args):
233242
existing = None
234243
vargs = vars_of_args(args)
235244
if os.path.exists(args.set_csv_baseline):
236-
with open(args.set_csv_baseline, "r") as f:
245+
with io.open(args.set_csv_baseline, "r", encoding='utf-8', newline='\n') as f:
237246
ss = vargs['select_stat']
238247
existing = read_stats_dict_from_csv(f, select_stat=ss)
239-
print ("updating %d baseline entries in %s" %
240-
(len(existing), args.set_csv_baseline))
248+
print("updating %d baseline entries in %s" %
249+
(len(existing), args.set_csv_baseline))
241250
else:
242-
print "making new baseline " + args.set_csv_baseline
251+
print("making new baseline " + args.set_csv_baseline)
243252
fieldnames = ["epoch", "name", "value"]
244-
with open(args.set_csv_baseline, "wb") as f:
253+
254+
def _open(path):
255+
if sys.version_info[0] < 3:
256+
return open(path, 'wb')
257+
return io.open(path, "w", encoding='utf-8', newline='\n')
258+
259+
with _open(args.set_csv_baseline) as f:
245260
out = csv.DictWriter(f, fieldnames, dialect='excel-tab',
246261
quoting=csv.QUOTE_NONNUMERIC)
247262
m = merge_all_jobstats((s for d in args.remainder
248263
for s in load_stats_dir(d, **vargs)),
249264
**vargs)
250265
if m is None:
251-
print "no stats found"
266+
print("no stats found")
252267
return 1
253268
changed = 0
254269
newepoch = int(time.time())
@@ -265,7 +280,7 @@ def set_csv_baseline(args):
265280
name=name,
266281
value=int(value)))
267282
if existing is not None:
268-
print "changed %d entries in baseline" % changed
283+
print("changed %d entries in baseline" % changed)
269284
return 0
270285

271286

@@ -402,8 +417,8 @@ def keyfunc(e):
402417

403418
def compare_to_csv_baseline(args):
404419
vargs = vars_of_args(args)
405-
old_stats = read_stats_dict_from_csv(args.compare_to_csv_baseline,
406-
select_stat=vargs['select_stat'])
420+
with io.open(args.compare_to_csv_baseline, 'r', encoding='utf-8') as f:
421+
old_stats = read_stats_dict_from_csv(f, select_stat=vargs['select_stat'])
407422
m = merge_all_jobstats((s for d in args.remainder
408423
for s in load_stats_dir(d, **vargs)),
409424
**vargs)
@@ -585,7 +600,7 @@ def main():
585600
action="append",
586601
help="Select specific statistics")
587602
parser.add_argument("--select-stats-from-csv-baseline",
588-
type=argparse.FileType('rb', 0), default=None,
603+
type=str, default=None,
589604
help="Select statistics present in a CSV baseline")
590605
parser.add_argument("--exclude-timers",
591606
default=False,
@@ -635,8 +650,7 @@ def main():
635650
help="summarize the 'incrementality' of a build")
636651
modes.add_argument("--set-csv-baseline", type=str, default=None,
637652
help="Merge stats from a stats-dir into a CSV baseline")
638-
modes.add_argument("--compare-to-csv-baseline",
639-
type=argparse.FileType('rb', 0), default=None,
653+
modes.add_argument("--compare-to-csv-baseline", type=str, default=None,
640654
metavar="BASELINE.csv",
641655
help="Compare stats dir to named CSV baseline")
642656
modes.add_argument("--compare-stats-dirs",

0 commit comments

Comments
 (0)