Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(470)

Side by Side Diff: components/policy/tools/generate_policy_source.py

Issue 929353002: Fix generate_policy_source.py to honour supported_on ranges. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Parse chrome/VERSION in generate_policy_source.py. Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « components/policy/BUILD.gn ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 '''python %prog [options] platform chromium_os_flag template 6 '''python %prog [options] platform chromium_os_flag template
7 7
8 platform specifies which platform source is being generated for 8 platform specifies which platform source is being generated for
9 and can be one of (win, mac, linux) 9 and can be one of (win, mac, linux)
10 chromium_os_flag should be 1 if this is a Chromium OS build 10 chromium_os_flag should be 1 if this is a Chromium OS build
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
55 'choice'), 55 'choice'),
56 'string-enum-list': ('TYPE_LIST', 'StringList', 'StringList', 56 'string-enum-list': ('TYPE_LIST', 'StringList', 'StringList',
57 'multi-select'), 57 'multi-select'),
58 } 58 }
59 59
60 class EnumItem: 60 class EnumItem:
61 def __init__(self, item): 61 def __init__(self, item):
62 self.caption = PolicyDetails._RemovePlaceholders(item['caption']) 62 self.caption = PolicyDetails._RemovePlaceholders(item['caption'])
63 self.value = item['value'] 63 self.value = item['value']
64 64
65 def __init__(self, policy, os, is_chromium_os): 65 def __init__(self, policy, version, os, is_chromium_os):
66 self.id = policy['id'] 66 self.id = policy['id']
67 self.name = policy['name'] 67 self.name = policy['name']
68 features = policy.get('features', {}) 68 features = policy.get('features', {})
69 self.can_be_recommended = features.get('can_be_recommended', False) 69 self.can_be_recommended = features.get('can_be_recommended', False)
70 self.can_be_mandatory = features.get('can_be_mandatory', True) 70 self.can_be_mandatory = features.get('can_be_mandatory', True)
71 self.is_deprecated = policy.get('deprecated', False) 71 self.is_deprecated = policy.get('deprecated', False)
72 self.is_device_only = policy.get('device_only', False) 72 self.is_device_only = policy.get('device_only', False)
73 self.schema = policy.get('schema', {}) 73 self.schema = policy.get('schema', {})
74 self.has_enterprise_default = 'default_for_enterprise_users' in policy 74 self.has_enterprise_default = 'default_for_enterprise_users' in policy
75 if self.has_enterprise_default: 75 if self.has_enterprise_default:
76 self.enterprise_default = policy['default_for_enterprise_users'] 76 self.enterprise_default = policy['default_for_enterprise_users']
77 77
78 major_version = int(version.split('.')[0])
78 expected_platform = 'chrome_os' if is_chromium_os else os.lower() 79 expected_platform = 'chrome_os' if is_chromium_os else os.lower()
79 self.platforms = [] 80 self.platforms = []
80 for platform, version in [ p.split(':') for p in policy['supported_on'] ]: 81 for platform, version_range in [ p.split(':')
81 if not version.endswith('-'): 82 for p in policy['supported_on'] ]:
83 split_result = version_range.split('-')
84 if len(split_result) != 2:
85 raise RuntimeError('supported_on must have exactly one dash: "%s"' % p)
86 (version_min, version_max) = split_result
87 if version_min == '':
88 raise RuntimeError('supported_on must define a start version: "%s"' % p)
89
90 # Skip if the current Chromium version does not support the policy.
91 if (int(version_min) > major_version or
92 version_max != '' and int(version_max) < major_version):
82 continue 93 continue
83 94
84 if platform.startswith('chrome.'): 95 if platform.startswith('chrome.'):
85 platform_sub = platform[7:] 96 platform_sub = platform[7:]
86 if platform_sub == '*': 97 if platform_sub == '*':
87 self.platforms.extend(['win', 'mac', 'linux']) 98 self.platforms.extend(['win', 'mac', 'linux'])
88 else: 99 else:
89 self.platforms.append(platform_sub) 100 self.platforms.append(platform_sub)
90 else: 101 else:
91 self.platforms.append(platform) 102 self.platforms.append(platform)
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
148 help='generate C++ code decoding the cloud policy protobuf', 159 help='generate C++ code decoding the cloud policy protobuf',
149 metavar='FILE') 160 metavar='FILE')
150 parser.add_option('--ard', '--app-restrictions-definition', 161 parser.add_option('--ard', '--app-restrictions-definition',
151 dest='app_restrictions_path', 162 dest='app_restrictions_path',
152 help='generate an XML file as specified by ' 163 help='generate an XML file as specified by '
153 'Android\'s App Restriction Schema', 164 'Android\'s App Restriction Schema',
154 metavar='FILE') 165 metavar='FILE')
155 166
156 (opts, args) = parser.parse_args() 167 (opts, args) = parser.parse_args()
157 168
158 if len(args) != 3: 169 if len(args) != 4:
159 print 'exactly platform, chromium_os flag and input file must be specified.' 170 print('Exactly VERSION path, platform, chromium_os flag and '
Mattias Nissler (ping if slow) 2015/04/23 09:01:29 what is a VERSION path?
Thiemo Nagel 2015/04/23 09:58:00 Maybe a VERSION file?
Mattias Nissler (ping if slow) 2015/04/23 10:14:52 How about "src/chrome/VERSION file path" ?
Thiemo Nagel 2015/04/23 10:56:26 How about "path to src/chrome/VERSION"?
171 'input file must be specified as free parameters.')
Mattias Nissler (ping if slow) 2015/04/23 09:01:29 free parameters? as opposed to bound parameters? I
Thiemo Nagel 2015/04/23 09:58:00 The correct term seems to be "positional parameter
160 parser.print_help() 172 parser.print_help()
161 return 2 173 return 2
162 174
163 os = args[0] 175 version_path = args[0]
164 is_chromium_os = args[1] == '1' 176 os = args[1]
165 template_file_name = args[2] 177 is_chromium_os = args[2] == '1'
178 template_file_name = args[3]
179
180 version = None
Mattias Nissler (ping if slow) 2015/04/23 09:01:29 It looks like this stuff should be broken out into
Thiemo Nagel 2015/04/23 09:58:00 Done.
181 for line in open(version_path, 'r').readlines():
182 key, val = line.rstrip('\r\n').split('=', 1)
183 if key == 'MAJOR':
184 version = val
185 break
186 if version == None:
Mattias Nissler (ping if slow) 2015/04/23 09:01:29 nit: if version is None
Thiemo Nagel 2015/04/23 09:58:00 Done.
187 raise RuntimeError('VERSION file does not contain major version.')
166 188
167 template_file_contents = _LoadJSONFile(template_file_name) 189 template_file_contents = _LoadJSONFile(template_file_name)
168 policy_details = [ PolicyDetails(policy, os, is_chromium_os) 190 policy_details = [ PolicyDetails(policy, version, os, is_chromium_os)
169 for policy in _Flatten(template_file_contents) ] 191 for policy in _Flatten(template_file_contents) ]
170 sorted_policy_details = sorted(policy_details, key=lambda policy: policy.name) 192 sorted_policy_details = sorted(policy_details, key=lambda policy: policy.name)
171 193
172 def GenerateFile(path, writer, sorted=False, xml=False): 194 def GenerateFile(path, writer, sorted=False, xml=False):
173 if path: 195 if path:
174 with open(path, 'w') as f: 196 with open(path, 'w') as f:
175 _OutputGeneratedWarningHeader(f, template_file_name, xml) 197 _OutputGeneratedWarningHeader(f, template_file_name, xml)
176 writer(sorted and sorted_policy_details or policy_details, os, f) 198 writer(sorted and sorted_policy_details or policy_details, os, f)
177 199
178 GenerateFile(opts.header_path, _WritePolicyConstantHeader, sorted=True) 200 GenerateFile(opts.header_path, _WritePolicyConstantHeader, sorted=True)
(...skipping 844 matching lines...) Expand 10 before | Expand all | Expand 10 after
1023 # _WriteAppRestrictions body 1045 # _WriteAppRestrictions body
1024 f.write('<restrictions xmlns:android="' 1046 f.write('<restrictions xmlns:android="'
1025 'http://schemas.android.com/apk/res/android">\n\n') 1047 'http://schemas.android.com/apk/res/android">\n\n')
1026 for policy in policies: 1048 for policy in policies:
1027 if policy.is_supported and policy.restriction_type != 'invalid': 1049 if policy.is_supported and policy.restriction_type != 'invalid':
1028 WriteAppRestriction(policy) 1050 WriteAppRestriction(policy)
1029 f.write('</restrictions>') 1051 f.write('</restrictions>')
1030 1052
1031 if __name__ == '__main__': 1053 if __name__ == '__main__':
1032 sys.exit(main()) 1054 sys.exit(main())
OLDNEW
« no previous file with comments | « components/policy/BUILD.gn ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698