Commit 41db909a authored by Raul Tambre's avatar Raul Tambre Committed by Commit Bot

generate_policy_source.py: Python 3 compatibility

* map() returns an iterable instead of a list in Python 3. Convert it explicitly to a list.
* xrange() is replaced in Python 3 by the functionally equivalent range().
* Simplified checking whether an object is a string and introduced string_type that's set according to Python version.

Still works with Python 2.

Fixed errors:
Traceback (most recent call last):
  File "../../components/policy/tools/generate_policy_source.py", line 1648, in <module>
    sys.exit(main())
  File "../../components/policy/tools/generate_policy_source.py", line 361, in main
    policy_atomic_groups = [
  File "../../components/policy/tools/generate_policy_source.py", line 362, in <listcomp>
    PolicyAtomicGroup(group, policy_details_set, policies_already_in_group)
  File "../../components/policy/tools/generate_policy_source.py", line 181, in __init__
    self._CheckPoliciesValidity(available_policies, policies_already_in_group)
  File "../../components/policy/tools/generate_policy_source.py", line 196, in _CheckPoliciesValidity
    raise RuntimeError('Invalid policy: ' + policy + ' in atomic group ' +
RuntimeError: Invalid policy: RemoteAccessClientFirewallTraversal in atomic group RemoteAccess.

Traceback (most recent call last):
  File "../../components/policy/tools/generate_policy_source.py", line 1647, in <module>
    sys.exit(main())
  File "../../components/policy/tools/generate_policy_source.py", line 379, in main
    GenerateFile(opts.source_path, _WritePolicyConstantSource, sorted=True)
  File "../../components/policy/tools/generate_policy_source.py", line 372, in GenerateFile
    writer(sorted and sorted_policy_details or policy_details,
  File "../../components/policy/tools/generate_policy_source.py", line 1079, in _WritePolicyConstantSource
    schema_generator.GenerateAndCollectID(chrome_schema, 'root node')
  File "../../components/policy/tools/generate_policy_source.py", line 839, in GenerateAndCollectID
    index = self.Generate(schema, name)
  File "../../components/policy/tools/generate_policy_source.py", line 787, in Generate
    properties = [
  File "../../components/policy/tools/generate_policy_source.py", line 789, in <listcomp>
    self.GetString(key), self.GenerateAndCollectID(subschema, key))
  File "../../components/policy/tools/generate_policy_source.py", line 839, in GenerateAndCollectID
    index = self.Generate(schema, name)
  File "../../components/policy/tools/generate_policy_source.py", line 752, in Generate
    return self.GetEnumType(schema, is_sensitive_value, name)
  File "../../components/policy/tools/generate_policy_source.py", line 694, in GetEnumType
    return self.GetEnumIntegerType(schema, is_sensitive_value, name)
  File "../../components/policy/tools/generate_policy_source.py", line 667, in GetEnumIntegerType
    if self.IsConsecutiveInterval(possible_values):
  File "../../components/policy/tools/generate_policy_source.py", line 662, in IsConsecutiveInterval
    for i in xrange(len(sortedSeq) - 1))
NameError: name 'xrange' is not defined

Traceback (most recent call last):
  File "../../components/policy/tools/generate_policy_source.py", line 1648, in <module>
    sys.exit(main())
  File "../../components/policy/tools/generate_policy_source.py", line 379, in main
    GenerateFile(opts.source_path, _WritePolicyConstantSource, sorted=True)
  File "../../components/policy/tools/generate_policy_source.py", line 372, in GenerateFile
    writer(sorted and sorted_policy_details or policy_details,
  File "../../components/policy/tools/generate_policy_source.py", line 1080, in _WritePolicyConstantSource
    schema_generator.GenerateAndCollectID(chrome_schema, 'root node')
  File "../../components/policy/tools/generate_policy_source.py", line 840, in GenerateAndCollectID
    index = self.Generate(schema, name)
  File "../../components/policy/tools/generate_policy_source.py", line 788, in Generate
    properties = [
  File "../../components/policy/tools/generate_policy_source.py", line 790, in <listcomp>
    self.GetString(key), self.GenerateAndCollectID(subschema, key))
  File "../../components/policy/tools/generate_policy_source.py", line 840, in GenerateAndCollectID
    index = self.Generate(schema, name)
  File "../../components/policy/tools/generate_policy_source.py", line 788, in Generate
    properties = [
  File "../../components/policy/tools/generate_policy_source.py", line 790, in <listcomp>
    self.GetString(key), self.GenerateAndCollectID(subschema, key))
  File "../../components/policy/tools/generate_policy_source.py", line 840, in GenerateAndCollectID
    index = self.Generate(schema, name)
  File "../../components/policy/tools/generate_policy_source.py", line 788, in Generate
    properties = [
  File "../../components/policy/tools/generate_policy_source.py", line 790, in <listcomp>
    self.GetString(key), self.GenerateAndCollectID(subschema, key))
  File "../../components/policy/tools/generate_policy_source.py", line 840, in GenerateAndCollectID
    index = self.Generate(schema, name)
  File "../../components/policy/tools/generate_policy_source.py", line 741, in Generate
    if not isinstance(schema['$ref'], types.StringTypes):
AttributeError: module 'types' has no attribute 'StringTypes'

Traceback (most recent call last):
  File "../../components/policy/tools/generate_policy_source.py", line 1651, in <module>
    sys.exit(main())
  File "../../components/policy/tools/generate_policy_source.py", line 383, in main
    GenerateFile(opts.source_path, _WritePolicyConstantSource, sorted=True)
  File "../../components/policy/tools/generate_policy_source.py", line 376, in GenerateFile
    writer(sorted and sorted_policy_details or policy_details,
  File "../../components/policy/tools/generate_policy_source.py", line 1093, in _WritePolicyConstantSource
    schema_generator.FindSensitiveChildren()
  File "../../components/policy/tools/generate_policy_source.py", line 959, in FindSensitiveChildren
    self.FindSensitiveChildrenRecursive(0, set())
  File "../../components/policy/tools/generate_policy_source.py", line 967, in FindSensitiveChildrenRecursive
    node = self.schema_nodes[index]
TypeError: 'map' object is not subscriptable

Bug: 941669
Change-Id: I9737aa44b1f395f6efeefadc94c39a084f82ed98
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1857122
Auto-Submit: Raul Tambre <raul@tambre.ee>
Commit-Queue: Yann Dago <ydago@chromium.org>
Reviewed-by: default avatarYann Dago <ydago@chromium.org>
Cr-Commit-Position: refs/heads/master@{#705939}
parent a5eb9409
......@@ -20,9 +20,13 @@ from optparse import OptionParser
import re
import sys
import textwrap
import types
from xml.sax.saxutils import escape as xml_escape
if sys.version_info.major == 2:
string_type = basestring
else:
string_type = str
CHROME_POLICY_KEY = 'SOFTWARE\\\\Policies\\\\Google\\\\Chrome'
CHROMIUM_POLICY_KEY = 'SOFTWARE\\\\Policies\\\\Chromium'
......@@ -193,7 +197,7 @@ class PolicyAtomicGroup:
'in policy_templates.json)!')
policies_already_in_group.add(policy)
if not policy in available_policies:
raise RuntimeError('Invalid policy:' + policy + ' in atomic group ' +
raise RuntimeError('Invalid policy: ' + policy + ' in atomic group ' +
self.name + '.\n')
......@@ -355,7 +359,7 @@ def main():
risk_tags.ComputeMaxTags(policy_details)
sorted_policy_details = sorted(policy_details, key=lambda policy: policy.name)
policy_details_set = map((lambda x: x.name), policy_details)
policy_details_set = list(map((lambda x: x.name), policy_details))
policies_already_in_group = set()
policy_atomic_groups = [
PolicyAtomicGroup(group, policy_details_set, policies_already_in_group)
......@@ -658,8 +662,8 @@ class SchemaNodesGenerator:
def IsConsecutiveInterval(self, seq):
sortedSeq = sorted(seq)
return all(sortedSeq[i] + 1 == sortedSeq[i + 1]
for i in xrange(len(sortedSeq) - 1))
return all(
sortedSeq[i] + 1 == sortedSeq[i + 1] for i in range(len(sortedSeq) - 1))
def GetEnumIntegerType(self, schema, is_sensitive_value, name):
assert all(type(x) == int for x in schema['enum'])
......@@ -737,7 +741,7 @@ class SchemaNodesGenerator:
if '$ref' in schema:
if 'id' in schema:
raise RuntimeError("Schemas with a $ref can't have an id")
if not isinstance(schema['$ref'], types.StringTypes):
if not isinstance(schema['$ref'], string_type):
raise RuntimeError("$ref attribute must be a string")
return schema['$ref']
......@@ -921,7 +925,7 @@ class SchemaNodesGenerator:
f.write('};\n\n')
def GetByID(self, id_str):
if not isinstance(id_str, types.StringTypes):
if not isinstance(id_str, string_type):
return id_str
if id_str not in self.id_map:
raise RuntimeError('Invalid $ref: ' + id_str)
......@@ -941,12 +945,12 @@ class SchemaNodesGenerator:
simple as looking up for corresponding ID in self.id_map, and replace the
old index with the mapped index.
"""
self.schema_nodes = map(
partial(self.ResolveID, 1, SchemaNode), self.schema_nodes)
self.property_nodes = map(
partial(self.ResolveID, 1, PropertyNode), self.property_nodes)
self.properties_nodes = map(
partial(self.ResolveID, 3, PropertiesNode), self.properties_nodes)
self.schema_nodes = list(
map(partial(self.ResolveID, 1, SchemaNode), self.schema_nodes))
self.property_nodes = list(
map(partial(self.ResolveID, 1, PropertyNode), self.property_nodes))
self.properties_nodes = list(
map(partial(self.ResolveID, 3, PropertiesNode), self.properties_nodes))
def FindSensitiveChildren(self):
"""Wrapper function, which calls FindSensitiveChildrenRecursive().
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment