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

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

Issue 257583005: Fix crashes in components/policy/resources/PRESUBMIT.py. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@policy-list-doc
Patch Set: Move try/catch as suggested. Created 6 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/resources/PRESUBMIT.py ('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 ''' 6 '''
7 Checks a policy_templates.json file for conformity to its syntax specification. 7 Checks a policy_templates.json file for conformity to its syntax specification.
8 ''' 8 '''
9 9
10 import json 10 import json
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
95 (if the key is not present): 95 (if the key is not present):
96 Error: |container_name| must have a |value_type| named |key|. 96 Error: |container_name| must have a |value_type| named |key|.
97 Offending snippet: |offending| (if specified; defaults to |container|) 97 Offending snippet: |offending| (if specified; defaults to |container|)
98 (if the value does not have the required type): 98 (if the value does not have the required type):
99 Error: Value of |key| must be a |value_type|. 99 Error: Value of |key| must be a |value_type|.
100 Offending snippet: |container[key]| 100 Offending snippet: |container[key]|
101 101
102 Returns: |container[key]| if the key is present, None otherwise. 102 Returns: |container[key]| if the key is present, None otherwise.
103 ''' 103 '''
104 if identifier is None: 104 if identifier is None:
105 identifier = container.get('name') 105 try:
106 identifier = container.get('name')
107 except:
108 self._Error('Cannot access container name of "%s".' % container_name)
109 return None
106 if container_name is None: 110 if container_name is None:
107 container_name = parent_element 111 container_name = parent_element
108 if offending == '__CONTAINER__': 112 if offending == '__CONTAINER__':
109 offending = container 113 offending = container
110 if key not in container: 114 if key not in container:
111 if optional: 115 if optional:
112 return 116 return
113 else: 117 else:
114 self._Error('%s must have a %s "%s".' % 118 self._Error('%s must have a %s "%s".' %
115 (container_name.title(), value_type.__name__, key), 119 (container_name.title(), value_type.__name__, key),
(...skipping 313 matching lines...) Expand 10 before | Expand all | Expand 10 after
429 with open(filename, 'w') as f: 433 with open(filename, 'w') as f:
430 f.writelines(fixed_lines) 434 f.writelines(fixed_lines)
431 435
432 def Main(self, filename, options): 436 def Main(self, filename, options):
433 try: 437 try:
434 with open(filename) as f: 438 with open(filename) as f:
435 data = eval(f.read()) 439 data = eval(f.read())
436 except: 440 except:
437 import traceback 441 import traceback
438 traceback.print_exc(file=sys.stdout) 442 traceback.print_exc(file=sys.stdout)
439 self._Error('Invalid JSON syntax.') 443 self._Error('Invalid Python/JSON syntax.')
440 return 444 return 1
441 if data == None: 445 if data == None:
442 self._Error('Invalid JSON syntax.') 446 self._Error('Invalid Python/JSON syntax.')
443 return 447 return 1
444 self.options = options 448 self.options = options
445 449
446 # First part: check JSON structure. 450 # First part: check JSON structure.
447 451
448 # Check (non-policy-specific) message definitions. 452 # Check (non-policy-specific) message definitions.
449 messages = self._CheckContains(data, 'messages', dict, 453 messages = self._CheckContains(data, 'messages', dict,
450 parent_element=None, 454 parent_element=None,
451 container_name='The root element', 455 container_name='The root element',
452 offending=None) 456 offending=None)
453 if messages is not None: 457 if messages is not None:
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
499 if filename is None: 503 if filename is None:
500 if len(args) != 2: 504 if len(args) != 2:
501 parser.print_help() 505 parser.print_help()
502 sys.exit(1) 506 sys.exit(1)
503 filename = args[1] 507 filename = args[1]
504 return self.Main(filename, options) 508 return self.Main(filename, options)
505 509
506 510
507 if __name__ == '__main__': 511 if __name__ == '__main__':
508 sys.exit(PolicyTemplateChecker().Run(sys.argv)) 512 sys.exit(PolicyTemplateChecker().Run(sys.argv))
OLDNEW
« no previous file with comments | « components/policy/resources/PRESUBMIT.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698