Skip to content

Commit

Permalink
build: explain how to test Python 3.6 or 3.7
Browse files Browse the repository at this point in the history
This helps contributors understand how they can test Python 3.6 or 3.7
on Travis CI.

Helps with issues like:
- #29246 (comment)
  • Loading branch information
cclauss committed Sep 9, 2019
1 parent 6723169 commit 3d1abce
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 20 deletions.
4 changes: 2 additions & 2 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
38 changes: 22 additions & 16 deletions configure
Original file line number Diff line number Diff line change
@@ -1,28 +1,34 @@
#!/bin/sh

# Locate python2 interpreter and re-execute the script. Note that the
# mix of single and double quotes is intentional, as is the fact that
# the ] goes on a new line.
# Locate an acceptable python interpreter and then re-execute the script.
# Note that the mix of single and double quotes is intentional,
# as is the fact that the ] goes on a new line.
# When a 'which' call is made for a specific version of Python on Travis CI,
# pyenv will alert which shims are available and then will fail the build.
_=[ 'exec' '/bin/sh' '-c' '''
test ${TRAVIS} && exec python "$0" "$@" # workaround for pyenv on Travis CI
which python2.7 >/dev/null && exec python2.7 "$0" "$@"
which python2 >/dev/null && exec python2 "$0" "$@"
which python3.7 >/dev/null && exec python3.7 "$0" "$@"
which python3.6 >/dev/null && exec python3.6 "$0" "$@"
which python3.5 >/dev/null && exec python3.5 "$0" "$@"
exec python "$0" "$@"
''' "$0" "$@"
]
del _

import sys
from distutils.spawn import find_executable as which
if sys.version_info[:2] != (2, 7):
sys.stderr.write('Please use Python 2.7')
from distutils.spawn import find_executable

python2 = which('python2') or which('python2.7')

if python2:
sys.stderr.write(':\n\n')
sys.stderr.write(' ' + python2 + ' ' + ' '.join(sys.argv))

sys.stderr.write('\n')
print('Node configure: Found Python {0}.{1}.{2}...'.format(*sys.version_info))
acceptable_pythons = ((2, 7), (3, 7), (3, 6), (3, 5))
if sys.version_info[:2] in acceptable_pythons:
import configure
else:
python_cmds = ['python{0}.{1}'.format(*vers) for vers in acceptable_pythons]
sys.stderr.write('Please use {0}.\n'.format(' or '.join(python_cmds)))
for python_cmd in python_cmds:
python_cmd_path = find_executable(python_cmd)
if python_cmd_path and 'pyenv/shims' not in python_cmd_path:
sys.stderr.write('\t{0} {1}\n'.format(python_cmd_path,
' '.join(sys.argv[:1])))
sys.exit(1)

import configure
5 changes: 4 additions & 1 deletion deps/v8/third_party/inspector_protocol/code_generator.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand Down Expand Up @@ -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:
Expand Down
5 changes: 4 additions & 1 deletion tools/inspector_protocol/code_generator.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand Down Expand Up @@ -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):
Expand Down

0 comments on commit 3d1abce

Please sign in to comment.