gclient_eval: Make compatible with Python 3.

Bug: 984182
Change-Id: I9485614658efa0ea9d50ea666210af63c3b97adc
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/tools/depot_tools/+/1716131
Reviewed-by: Andrii Shyshkalov <tandrii@chromium.org>
Commit-Queue: Edward Lesmes <ehmaldonado@chromium.org>
changes/31/1716131/2
Edward Lemur 6 years ago committed by Commit Bot
parent 602076dcf2
commit ba1b1f7ab6

@ -11,18 +11,13 @@ import tokenize
import gclient_utils
from third_party import schema
from third_party import six
if sys.version_info.major == 2:
if six.PY2:
# We use cStringIO.StringIO because it is equivalent to Py3's io.StringIO.
from cStringIO import StringIO
else:
from io import StringIO
# TODO(crbug.com/953884): Remove this when python3 migration is done.
try:
basestring
except NameError:
# pylint: disable=redefined-builtin
basestring = str
@ -57,7 +52,7 @@ class _NodeDict(collections.MutableMapping):
def MoveTokens(self, origin, delta):
if self.tokens:
new_tokens = {}
for pos, token in self.tokens.iteritems():
for pos, token in six.iteritems(self.tokens):
if pos[0] >= origin:
pos = (pos[0] + delta, pos[1])
token = token[:2] + (pos,) + token[3:]
@ -245,7 +240,7 @@ def _gclient_eval(node_or_string, filename='<unknown>', vars_dict=None):
raise KeyError(
'%s was used as a variable, but was not declared in the vars dict '
'(file %r, line %s)' % (
e.message, filename, getattr(node, 'lineno', '<unknown>')))
e.args[0], filename, getattr(node, 'lineno', '<unknown>')))
elif isinstance(node, ast.Num):
return node.n
elif isinstance(node, ast.Tuple):
@ -514,14 +509,14 @@ def Parse(content, validate_syntax, filename, vars_override=None,
if 'deps_os' in result:
deps = result.setdefault('deps', {})
for os_name, os_deps in result['deps_os'].iteritems():
for os_name, os_deps in six.iteritems(result['deps_os']):
os_deps = _StandardizeDeps(os_deps, vars_dict)
_MergeDepsOs(deps, os_deps, os_name)
del result['deps_os']
if 'hooks_os' in result:
hooks = result.setdefault('hooks', [])
for os_name, os_hooks in result['hooks_os'].iteritems():
for os_name, os_hooks in six.iteritems(result['hooks_os']):
for hook in os_hooks:
UpdateCondition(hook, 'and', 'checkout_' + os_name)
hooks.extend(os_hooks)
@ -569,6 +564,9 @@ def EvaluateCondition(condition, variables, referenced_variables=None):
# between arguments for GN to be passed verbatim, and ones to
# be evaluated.
return node.id
elif not sys.version_info[:2] < (3, 4) and isinstance(
node, ast.NameConstant): # Since Python 3.4
return node.value
elif isinstance(node, ast.BoolOp) and isinstance(node.op, ast.Or):
if len(node.values) != 2:
raise ValueError(

@ -86,7 +86,7 @@ class GClientEvalTest(unittest.TestCase):
input_data = ['{'] + ['"%s": "%s",' % (n, n) for n in test_case] + ['}']
expected = [(str(n), str(n)) for n in test_case]
result = gclient_eval._gclient_eval(''.join(input_data))
self.assertEqual(expected, result.items())
self.assertEqual(expected, list(result.items()))
class ExecTest(unittest.TestCase):

Loading…
Cancel
Save