| #!/usr/bin/python2 -u |
| # Copyright 2016 The Chromium OS Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| """ |
| Check if a json file is valid. |
| |
| This wrapper is invoked through autotest's PRESUBMIT.cfg for every commit |
| that edits a json file. |
| """ |
| |
| import json |
| import os |
| |
| |
| class InvalidJsonFile(Exception): |
| """Exception to raise when a json file can't be parsed.""" |
| |
| |
| def main(): |
| """Check if all json files that are a part of this commit are valid.""" |
| file_list = os.environ.get('PRESUBMIT_FILES') |
| if file_list is None: |
| raise InvalidJsonFile('Expected a list of presubmit files in ' |
| 'the PRESUBMIT_FILES environment variable.') |
| |
| for f in file_list.split(): |
| if f.lower().endswith('.json'): |
| try: |
| with open(f) as json_file: |
| json.load(json_file) |
| except ValueError: |
| # Re-raise the error to include the file path. |
| print ('Presubmit check `check_json_file` failed. If the file ' |
| 'is meant to be malformated, please do not name it as a ' |
| 'json file, or you will have to upload the CL using ' |
| '--no-verify') |
| raise InvalidJsonFile('Invalid json file: %s' % f) |
| |
| |
| if __name__ == '__main__': |
| main() |