From 8b4d70e2c64d9973e4ddf0ddff1f9eb71d5aba73 Mon Sep 17 00:00:00 2001 From: Christian Clauss Date: Thu, 5 Sep 2019 15:56:12 +0200 Subject: [PATCH] build: explain how to test Python 3.6 or 3.7 This helps contributors understand how they can test Python 3.6 or 3.7 on Travis CI. Helps with issues like: - https://github.com/nodejs/node/issues/29246#issuecomment-528075665 --- .travis.yml | 4 ++-- deps/v8/third_party/inspector_protocol/code_generator.py | 5 ++++- tools/inspector_protocol/code_generator.py | 5 ++++- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index e3cf371831765a..2739628df5c62a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,9 +10,9 @@ language: cpp # To experiment with Python 3, comment out Python 2.7 and uncomment one of the Python 3 versions. env: global: - - PYTHON_VERSION="2.7.15" + # - PYTHON_VERSION="2.7.15" # - PYTHON_VERSION="3.6.7" - # - PYTHON_VERSION="3.7.1" + - PYTHON_VERSION="3.7.1" jobs: include: - stage: "Compile" diff --git a/deps/v8/third_party/inspector_protocol/code_generator.py b/deps/v8/third_party/inspector_protocol/code_generator.py index 7c72cc70e4fbeb..c234578aafdb03 100755 --- a/deps/v8/third_party/inspector_protocol/code_generator.py +++ b/deps/v8/third_party/inspector_protocol/code_generator.py @@ -43,6 +43,9 @@ def json_object_hook(object_dict): items = [(k, os.path.join(output_base, v) if k == "output" else v) for (k, v) in items] keys, values = list(zip(*items)) + # 'async' is a Python 3.7+ keyword. Don't use namedtuple(rename=True) + # because that would only rename async on Python 3 but not on Python 2. + keys = ['async_' if k == 'async' else k for k in keys] return collections.namedtuple('X', keys)(*values) return json.loads(data, object_hook=json_object_hook) @@ -555,7 +558,7 @@ def is_async_command(self, domain, command): if not self.config.protocol.options: return False return self.check_options(self.config.protocol.options, domain, command, - "async", None, False) + "async_", None, False) def is_exported(self, domain, name): if not self.config.protocol.options: diff --git a/tools/inspector_protocol/code_generator.py b/tools/inspector_protocol/code_generator.py index 7b555d7478a0c7..6a91b96376df51 100755 --- a/tools/inspector_protocol/code_generator.py +++ b/tools/inspector_protocol/code_generator.py @@ -41,6 +41,9 @@ def json_object_hook(object_dict): items = [(k, os.path.join(output_base, v) if k == "path" else v) for (k, v) in object_dict.items()] items = [(k, os.path.join(output_base, v) if k == "output" else v) for (k, v) in items] keys, values = list(zip(*items)) + # 'async' is a python 3 keyword. Don't use namedtuple(rename=True) + # because that only renames it in python 3 but not python 2. + keys = tuple('async_' if k == 'async' else k for k in keys) return collections.namedtuple('X', keys)(*values) return json.loads(data, object_hook=json_object_hook) @@ -521,7 +524,7 @@ def generate_type(self, domain, typename): def is_async_command(self, domain, command): if not self.config.protocol.options: return False - return self.check_options(self.config.protocol.options, domain, command, "async", None, False) + return self.check_options(self.config.protocol.options, domain, command, "async_", None, False) def is_exported(self, domain, name):