def __init__(self, targets_path=None, template_root=None, targets_dict=None): """Constructor. Loads targets file. Args: targets_path: (str) Path to targets file. Defaults to './targets.json' template_root: (str) Path to template root. Defaults to '.' targets_dict: (dict) Initial data, if not supplied from a file. Raises: ValueError: if the targets file does not contain the required sections. """ self.template_root = template_root or Targets._default_template_root self.targets_path = targets_path or os.path.join(self.template_root, 'targets.json') if targets_dict: self._targets_dict = targets_dict else: self._targets_dict = json_with_comments.Loads( files.GetFileContents(self.targets_path)) # Do some basic validation that this has the required fields if 'languages' not in self._targets_dict: raise ValueError('languages not in targets.json')
def LoadJsonFile(self, path, expand=False): """Loads a file but ignores the broken ones. Fails a test assertion if the file is not loadable. Args: path: (str) path to file. expand: (bool, default False) whether to expand as a Json template. Returns: (dict) or None if the file is in a white list of known broken files. """ json_file = open(path) content = json_file.read() self.assertLess(1, len(content)) json_file.close() try: json_data = json_with_comments.Loads(content) except ValueError as err: # Ignore the known broken files. if not path.endswith('testdata/broken.json'): self.fail('%s: %s' % (path, err)) return None if expand: json_data = json_expander.ExpandJsonTemplate(json_data) return json_data
def GetFeatures(self, variation): """Returns the features dictionary for a specific variation. This is the basic dictionary informaion plus any specific overrides in the per-template-tree features.json file. Args: variation: (str) A target variation name. Returns: (Features) features dictionary """ if not variation: return None template_dir = self.AbsoluteTemplateDir(variation) features = Features(template_dir, self.get(variation), variation) json_path = os.path.join(template_dir, 'features.json') try: features_json = files.GetFileContents(json_path) except files.FileDoesNotExist: # for backwards compatibility, we forgive this. # TODO(user): be stricter about this and # fix/remove any tests that fail as a result. return features features.update(json_expander.ExpandJsonTemplate( json_with_comments.Loads(features_json))) # If not specified, the releaseVersion matches the variation if not features.get('releaseVersion'): features['releaseVersion'] = variation return features
def testLoads(self): data = json_with_comments.Loads(self.SOME_JSON_WITH_COMMENTS) self.assertEquals(self.JSON_CONTENT, data)