| # Copyright 2019 The Chromium Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| from recipe_engine import recipe_api |
| |
| |
| class YamlApi(recipe_api.RecipeApi): |
| """Provides utilities to parse yaml files.""" |
| |
| def read(self, step_name, file_path, json_place_holder): |
| """Reads a yaml file. |
| |
| It currently shells out to a script which converts the yaml to json, |
| this way it can use vpython3 to import pyyaml. To achieve the same |
| from the recipe we need to specify pyyaml at the root file. Please |
| change this behavior to be inline if it becomes easier to specify |
| vpython3 packages dependencies in a recipe module. |
| |
| Args: |
| step_name: (str) the name of the step for reading the yaml. |
| file_path: (str) the path to the yaml file. |
| json_place_holder: (JsonOutputPlaceholder) for the parsed yaml content. |
| Returns: |
| StepData with the result from the step. |
| """ |
| with self.m.step.nest(step_name) as presentation: |
| content = self.m.file.read_text('read', file_path) |
| presentation.logs['yaml'] = content |
| return self.m.step( |
| 'parse', |
| [ |
| 'vpython3', self.resource('parse_yaml.py'), |
| '--yaml_file', file_path, |
| '--json_file', self.m.json.output() |
| ], |
| infra_step=True |
| ) |