| # Copyright 2022 The Chromium Authors | 
 | # Use of this source code is governed by a BSD-style license that can be | 
 | # found in the LICENSE file. | 
 | """For interfacing with --json-config file.""" | 
 |  | 
 | import json | 
 |  | 
 |  | 
 | class JsonConfig: | 
 |   def __init__(self, json_obj): | 
 |     self._json_obj = json_obj | 
 |  | 
 |   def _ApkSplit(self, split_name): | 
 |     return self._json_obj.get('apk_splits', {}).get(split_name, {}) | 
 |  | 
 |   def _NativeFile(self, basename): | 
 |     return self._json_obj.get('native_files', {}).get(basename, {}) | 
 |  | 
 |   def DefaultComponentForSplit(self, split_name): | 
 |     return self._ApkSplit(split_name).get('default_component', '') | 
 |  | 
 |   def ApkPathDefaults(self): | 
 |     return { | 
 |         k: v['source_path'] | 
 |         for k, v in self._json_obj.get('apk_files', {}).items() | 
 |     } | 
 |  | 
 |   def ComponentForNativeFile(self, basename): | 
 |     return self._NativeFile(basename).get('component') | 
 |  | 
 |   def GenDirRegexForNativeFile(self, basename): | 
 |     return self._NativeFile(basename).get('gen_dir_regex') | 
 |  | 
 |   def SourcePathPrefixForNativeFile(self, basename): | 
 |     return self._NativeFile(basename).get('source_path_prefix') | 
 |  | 
 |   def ComponentOverrides(self): | 
 |     """Tuple of (path_prefix, component) tuples.""" | 
 |     return tuple(self._json_obj.get('component_overrides', {}).items()) | 
 |  | 
 |  | 
 | def Parse(path, on_config_error): | 
 |   try: | 
 |     with open(path) as f: | 
 |       return JsonConfig(json.load(f)) | 
 |   except Exception as e: | 
 |     on_config_error(f'Error while parsing {path}: {e}') |