| #!/usr/bin/env fuchsia-vendored-python |
| # Copyright 2021 The Fuchsia Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| """Create a global documentation file with driver provided data.""" |
| |
| import argparse |
| import os |
| import json |
| import yaml |
| |
| |
| def main(): |
| parser = argparse.ArgumentParser(description=__doc__) |
| parser.add_argument( |
| "--doc_list", |
| type=argparse.FileType("r"), |
| required=True, |
| help="Path to the list of drivers documentation files.", |
| ) |
| parser.add_argument( |
| "--areas_list", |
| type=argparse.FileType("r"), |
| required=True, |
| help="Path to the list of areas allowed in the areas field.", |
| ) |
| parser.add_argument( |
| "--output", |
| type=argparse.FileType("w"), |
| required=True, |
| help="The path for the output YAML global documentation file.", |
| ) |
| parser.add_argument( |
| "--dep_file", type=argparse.FileType("w"), required=True |
| ) |
| |
| args = parser.parse_args() |
| |
| doc_list = args.doc_list.read().splitlines() |
| output_name = os.path.realpath(args.output.name) |
| |
| all_drivers_doc_dict = {} |
| |
| all_drivers_doc_dict["drivers_areas"] = [] |
| areas_list = args.areas_list.read().splitlines() |
| for area in areas_list: |
| all_drivers_doc_dict["drivers_areas"].append(area) |
| |
| all_drivers_doc_dict["drivers_documentation"] = [] |
| for doc_path in doc_list: |
| with open(doc_path, "r") as f: |
| json_text = f.read() |
| json_dict = json.loads(json_text) |
| all_drivers_doc_dict["drivers_documentation"].append(json_dict) |
| for area in json_dict["areas"]: |
| if not area in all_drivers_doc_dict["drivers_areas"]: |
| raise Exception( |
| "Driver info file associated with: {}, area: '{}', not in allowed areas: {}".format( |
| doc_path, |
| area, |
| all_drivers_doc_dict["drivers_areas"], |
| ) |
| ) |
| |
| yaml.dump(all_drivers_doc_dict, args.output) |
| args.dep_file.write("{}: {}\n".format(args.output.name, " ".join(doc_list))) |
| |
| |
| if __name__ == "__main__": |
| main() |