From 7f908f2d761ba287f7af10927de4d9478d396257 Mon Sep 17 00:00:00 2001 From: cclauss Date: Sun, 2 Sep 2018 17:57:38 +0200 Subject: [PATCH 01/14] Some basic Python 3 compatibility in grumpy_tools --- grumpy-tools-src/grumpy_tools/pydeps.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/grumpy-tools-src/grumpy_tools/pydeps.py b/grumpy-tools-src/grumpy_tools/pydeps.py index 5bd6f56c..a26d9de4 100755 --- a/grumpy-tools-src/grumpy_tools/pydeps.py +++ b/grumpy-tools-src/grumpy_tools/pydeps.py @@ -23,6 +23,11 @@ from .compiler import imputil from .compiler import util +try: + xrange # Python 2 +except NameError: + xrange = range # Python 3 + def main(script=None, modname=None, package_dir='', with_imports=False): gopath = os.environ['GOPATH'] From 6b26ed4534b9aaed7ccde8f4e6a00c946ce95433 Mon Sep 17 00:00:00 2001 From: cclauss Date: Sun, 2 Sep 2018 18:02:53 +0200 Subject: [PATCH 02/14] Defined xrange() in Python 3 --- grumpy-tools-src/grumpy_tools/compiler/imputil.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/grumpy-tools-src/grumpy_tools/compiler/imputil.py b/grumpy-tools-src/grumpy_tools/compiler/imputil.py index b7a9fb89..cebb5298 100644 --- a/grumpy-tools-src/grumpy_tools/compiler/imputil.py +++ b/grumpy-tools-src/grumpy_tools/compiler/imputil.py @@ -30,6 +30,11 @@ from grumpy_tools.vendor.pythonparser import algorithm from grumpy_tools.vendor.pythonparser import ast +try: + xrange # Python 2 +except NameError: + xrange = range # Python 3 + _NATIVE_MODULE_PREFIX = '__go__/' From d2d6ee889320fe15d61f7b6e6abe89ced08257aa Mon Sep 17 00:00:00 2001 From: cclauss Date: Sun, 2 Sep 2018 18:24:53 +0200 Subject: [PATCH 03/14] Define long in Python 3 --- .../grumpy_tools/vendor/pythonparser/lexer.py | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/grumpy-tools-src/grumpy_tools/vendor/pythonparser/lexer.py b/grumpy-tools-src/grumpy_tools/vendor/pythonparser/lexer.py index 13c28155..f7fd1b32 100644 --- a/grumpy-tools-src/grumpy_tools/vendor/pythonparser/lexer.py +++ b/grumpy-tools-src/grumpy_tools/vendor/pythonparser/lexer.py @@ -6,13 +6,14 @@ from . import source, diagnostic import re import unicodedata -import sys -if sys.version_info[0] == 3: - unichr = chr - byte = lambda x: bytes([x]) -else: +try: + long # Python 2 byte = chr + except NameError: # Python 3 + byte = lambda x: bytes([x]) + long = int + unichr = chr class Token: """ @@ -325,10 +326,7 @@ def _refill(self, eof_token): # Lexing non-whitespace now. self.new_line = False - if sys.version_info > (3,) or not match.group(13): - int_type = int - else: - int_type = long + int_type = long if match.group(13) else int if match.group(5) is not None: # floating point or complex literal if match.group(6) is None: From 0e2289e92e331916fa227dc2f5b61814bc161964 Mon Sep 17 00:00:00 2001 From: cclauss Date: Sun, 2 Sep 2018 18:27:15 +0200 Subject: [PATCH 04/14] print() is a function in Python 3 --- grumpy-tools-src/tests/import_havingpkgmain.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/grumpy-tools-src/tests/import_havingpkgmain.py b/grumpy-tools-src/tests/import_havingpkgmain.py index 8348d4fa..24fb1a14 100644 --- a/grumpy-tools-src/tests/import_havingpkgmain.py +++ b/grumpy-tools-src/tests/import_havingpkgmain.py @@ -1,6 +1,6 @@ -print 'STARTING' +print('STARTING') from havingmainpkg.__main__ import main -print 'IMPORTED' +print('IMPORTED') main() -print 'CALLED main()' +print('CALLED main()') From 790ed623620c7de731809668b7f66204a4879777 Mon Sep 17 00:00:00 2001 From: cclauss Date: Sun, 2 Sep 2018 18:29:53 +0200 Subject: [PATCH 05/14] print() is a function in Python 3 --- grumpy-tools-src/tests/havingmainpkg/__main__.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/grumpy-tools-src/tests/havingmainpkg/__main__.py b/grumpy-tools-src/tests/havingmainpkg/__main__.py index 5e396af8..fae4cabc 100644 --- a/grumpy-tools-src/tests/havingmainpkg/__main__.py +++ b/grumpy-tools-src/tests/havingmainpkg/__main__.py @@ -1,13 +1,14 @@ -import sys +from __future__ import print_function + def main(): - print '__name__ is', __name__ - print '__package__ is', __package__ + print('__name__ is', __name__) + print('__package__ is', __package__) from . import SPAM print(SPAM) if __name__ == '__main__': - print '__name__ IS __main__' - print '__package__ is', __package__ + print('__name__ IS __main__') + print('__package__ is', __package__) main() From 7327e54b8503890c754d98316d126776942505a3 Mon Sep 17 00:00:00 2001 From: cclauss Date: Sun, 2 Sep 2018 19:09:39 +0200 Subject: [PATCH 06/14] Fix IndentationError --- grumpy-tools-src/grumpy_tools/vendor/pythonparser/lexer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/grumpy-tools-src/grumpy_tools/vendor/pythonparser/lexer.py b/grumpy-tools-src/grumpy_tools/vendor/pythonparser/lexer.py index f7fd1b32..108f1fde 100644 --- a/grumpy-tools-src/grumpy_tools/vendor/pythonparser/lexer.py +++ b/grumpy-tools-src/grumpy_tools/vendor/pythonparser/lexer.py @@ -10,7 +10,7 @@ try: long # Python 2 byte = chr - except NameError: # Python 3 +except NameError: # Python 3 byte = lambda x: bytes([x]) long = int unichr = chr From d5e156b8eabed2bcde0267b3d8717cd2fa476a20 Mon Sep 17 00:00:00 2001 From: cclauss Date: Sun, 2 Sep 2018 19:19:59 +0200 Subject: [PATCH 07/14] long = int (The solution taken in upstream) --- .../grumpy_tools/vendor/pythonparser/lexer.py | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/grumpy-tools-src/grumpy_tools/vendor/pythonparser/lexer.py b/grumpy-tools-src/grumpy_tools/vendor/pythonparser/lexer.py index 108f1fde..d578b885 100644 --- a/grumpy-tools-src/grumpy_tools/vendor/pythonparser/lexer.py +++ b/grumpy-tools-src/grumpy_tools/vendor/pythonparser/lexer.py @@ -6,14 +6,14 @@ from . import source, diagnostic import re import unicodedata +import sys -try: - long # Python 2 - byte = chr -except NameError: # Python 3 +if sys.version_info[0] == 3: + unichr = chr byte = lambda x: bytes([x]) long = int - unichr = chr +else: + byte = chr class Token: """ @@ -326,7 +326,10 @@ def _refill(self, eof_token): # Lexing non-whitespace now. self.new_line = False - int_type = long if match.group(13) else int + if sys.version_info > (3,) or not match.group(13): + int_type = int + else: + int_type = long if match.group(5) is not None: # floating point or complex literal if match.group(6) is None: From 3204eeb4fda2019b56dccbebdc37b63df6f02aa9 Mon Sep 17 00:00:00 2001 From: cclauss Date: Mon, 3 Sep 2018 13:36:33 +0200 Subject: [PATCH 08/14] print() is a function in Python 3 in genmake.py --- grumpy-tools-src/grumpy_tools/genmake.py | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/grumpy-tools-src/grumpy_tools/genmake.py b/grumpy-tools-src/grumpy_tools/genmake.py index c13465a5..4e6438c7 100755 --- a/grumpy-tools-src/grumpy_tools/genmake.py +++ b/grumpy-tools-src/grumpy_tools/genmake.py @@ -15,6 +15,7 @@ # limitations under the License. """Generate a Makefile for Python targets in a GOPATH directory.""" +from __future__ import print_function import argparse import os @@ -29,12 +30,12 @@ def _PrintRule(target, prereqs, rules): - print '{}: {}'.format(target, ' '.join(prereqs)) + print('{}: {}'.format(target, ' '.join(prereqs))) if rules: - print '\t@mkdir -p $(@D)' + print('\t@mkdir -p $(@D)') for rule in rules: - print '\t@{}'.format(rule) - print + print('\t@{}'.format(rule)) + print() def main(args): @@ -42,16 +43,16 @@ def main(args): proc = subprocess.Popen('go env GOOS GOARCH', shell=True, stdout=subprocess.PIPE) except OSError as e: - print >> sys.stderr, str(e) + print(str(e), file=sys.stderr) return 1 out, _ = proc.communicate() if proc.returncode: - print >> sys.stderr, 'go exited with status: {}'.format(proc.returncode) + print('go exited with status: {}'.format(proc.returncode), file=sys.stderr) return 1 goos, goarch = out.split() if args.all_target: - print '{}:\n'.format(args.all_target) + print('{}:\n'.format(args.all_target)) gopath = os.path.normpath(args.dir) pkg_dir = os.path.join(gopath, 'pkg', '{}_{}'.format(goos, goarch)) @@ -80,7 +81,7 @@ def main(args): _PrintRule(ar_name, [go_file], [recipe.format(go_package, pkg_dir)]) if args.all_target: _PrintRule(args.all_target, [ar_name], []) - print '-include {}\n'.format(dep_file) + print('-include {}\n'.format(dep_file)) if __name__ == '__main__': From 1f74b29da2b6cf8e9bf8b01d5b7222ea144cd0bc Mon Sep 17 00:00:00 2001 From: cclauss Date: Mon, 3 Sep 2018 13:42:07 +0200 Subject: [PATCH 09/14] print() is a function in Python 3 --- grumpy-tools-src/grumpy_tools/diffrange.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/grumpy-tools-src/grumpy_tools/diffrange.py b/grumpy-tools-src/grumpy_tools/diffrange.py index ea60fb0f..c56f4291 100755 --- a/grumpy-tools-src/grumpy_tools/diffrange.py +++ b/grumpy-tools-src/grumpy_tools/diffrange.py @@ -16,6 +16,8 @@ """Convert a unified diff into a list of modified files and line numbers.""" +from __future__ import print_function + import sys @@ -76,7 +78,7 @@ def main(): if line.startswith('+++'): filename = line.split()[1] for n in _ReadHunks(buf): - print '{}:{}'.format(filename, n) + print('{}:{}'.format(filename, n)) if __name__ == '__main__': From d9c9ce4227c4b2499c5aae9a8c47057a3d306613 Mon Sep 17 00:00:00 2001 From: cclauss Date: Mon, 3 Sep 2018 13:44:03 +0200 Subject: [PATCH 10/14] print() is a function in Python 3 --- grumpy-tools-src/grumpy_tools/coverparse.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/grumpy-tools-src/grumpy_tools/coverparse.py b/grumpy-tools-src/grumpy_tools/coverparse.py index d8b72aba..a216fa80 100755 --- a/grumpy-tools-src/grumpy_tools/coverparse.py +++ b/grumpy-tools-src/grumpy_tools/coverparse.py @@ -16,6 +16,8 @@ """Parse a Go coverage file and prints a message for lines missing coverage.""" +from __future__ import print_function + import collections import re import sys @@ -44,7 +46,7 @@ def main(): uncovered = _ParseCover(f) for filename in sorted(uncovered.keys()): for lineno in sorted(uncovered[filename]): - print '{}:{}'.format(filename, lineno) + print('{}:{}'.format(filename, lineno)) if __name__ == '__main__': From a9ff6c392c9d78db2edfcbf9be7fad367c3291c4 Mon Sep 17 00:00:00 2001 From: cclauss Date: Mon, 3 Sep 2018 13:53:34 +0200 Subject: [PATCH 11/14] print() is a function in Python 3 * Define __xrange()_ in Python 3 * Simplify with tuple unpacking in try / except block --- grumpy-tools-src/grumpy_tools/benchcmp.py | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/grumpy-tools-src/grumpy_tools/benchcmp.py b/grumpy-tools-src/grumpy_tools/benchcmp.py index be4dafc2..eced9512 100755 --- a/grumpy-tools-src/grumpy_tools/benchcmp.py +++ b/grumpy-tools-src/grumpy_tools/benchcmp.py @@ -16,10 +16,16 @@ """Runs two benchmark programs and compares their results.""" +from __future__ import print_function + import argparse import subprocess import sys +try: + xrange # Python 2 +except NameError: + xrange = range # Python 3 parser = argparse.ArgumentParser() parser.add_argument('prog1') @@ -37,7 +43,7 @@ def main(args): _MergeResults(results2, _RunBenchmark(args.prog2), benchmarks) _MergeResults(results2, _RunBenchmark(args.prog2), benchmarks) for b in sorted(benchmarks): - print b, '{:+.1%}'.format(results2[b] / results1[b] - 1) + print(b, '{:+.1%}'.format(results2[b] / results1[b] - 1)) def _MergeResults(merged, results, benchmarks): @@ -65,10 +71,10 @@ def _RunBenchmark(prog): line = line.strip() if not line: continue - parts = line.split() - if len(parts) != 3: + try: + name, status, result = line.split() + except ValueError: _Die('invalid benchmark output: {}', line) - name, status, result = parts if status != 'PASSED': _Die('benchmark failed: {}', line) try: @@ -82,7 +88,7 @@ def _RunBenchmark(prog): def _Die(msg, *args): if args: msg = msg.format(*args) - print >> sys.stderr, msg + print(msg, file=sys.stderr) sys.exit(1) From d7dbdffe6409c9197944c8fd48c0fbf7d5b130c6 Mon Sep 17 00:00:00 2001 From: cclauss Date: Mon, 3 Sep 2018 14:54:21 +0200 Subject: [PATCH 12/14] Force a retest --- grumpy-tools-src/tests/import_havingpkgmain.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/grumpy-tools-src/tests/import_havingpkgmain.py b/grumpy-tools-src/tests/import_havingpkgmain.py index 24fb1a14..c0dcfbb9 100644 --- a/grumpy-tools-src/tests/import_havingpkgmain.py +++ b/grumpy-tools-src/tests/import_havingpkgmain.py @@ -1,3 +1,5 @@ +from __future__ import print_function + print('STARTING') from havingmainpkg.__main__ import main print('IMPORTED') From 6c4e02c58aa7c8b4c13ee264f36140b1d8124185 Mon Sep 17 00:00:00 2001 From: cclauss Date: Mon, 3 Sep 2018 15:32:01 +0200 Subject: [PATCH 13/14] Force a retest under the new Travis tests --- grumpy-tools-src/grumpy_tools/genmake.py | 1 + 1 file changed, 1 insertion(+) diff --git a/grumpy-tools-src/grumpy_tools/genmake.py b/grumpy-tools-src/grumpy_tools/genmake.py index 4e6438c7..774617f6 100755 --- a/grumpy-tools-src/grumpy_tools/genmake.py +++ b/grumpy-tools-src/grumpy_tools/genmake.py @@ -15,6 +15,7 @@ # limitations under the License. """Generate a Makefile for Python targets in a GOPATH directory.""" + from __future__ import print_function import argparse From 597787c674788d4462e147ca6bd389f5ffd31624 Mon Sep 17 00:00:00 2001 From: cclauss Date: Mon, 3 Sep 2018 15:48:17 +0200 Subject: [PATCH 14/14] Define xrange() in Python 3 in coverparse.py --- grumpy-tools-src/grumpy_tools/coverparse.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/grumpy-tools-src/grumpy_tools/coverparse.py b/grumpy-tools-src/grumpy_tools/coverparse.py index a216fa80..a63e6fce 100755 --- a/grumpy-tools-src/grumpy_tools/coverparse.py +++ b/grumpy-tools-src/grumpy_tools/coverparse.py @@ -22,6 +22,10 @@ import re import sys +try: + xrange # Python 2 +except NameError: + xrange = range # Python 3 cover_re = re.compile(r'([^:]+):(\d+)\.\d+,(\d+).\d+ \d+ (\d+)$')