File indexing completed on 2024-06-23 05:16:56
0001 # SPDX-FileCopyrightText: 2021 Daniel Vrátil <dvratil@kde.org> 0002 # 0003 # SPDX-License-Identifier: LGPL-2.1-only 0004 # SPDX-License-Identifier: LGPL-3.0-only 0005 # SPDX-License-Identifier: LicenseRef-KDE-Accepted-LGPL 0006 0007 import argparse 0008 import requests 0009 import yaml 0010 0011 from schema_parser import Parser 0012 from cpp_generator import Generator 0013 0014 0015 def _skip_schema(name: str, api: dict) -> bool: 0016 for excl in api.get("excludeObjects", []): 0017 if excl.startswith("*") and name.endswith(excl[1:]): 0018 return True 0019 if excl.endswith("*") and name.startswith(excl[:-1]): 0020 return True 0021 if excl == name: 0022 return True 0023 return False 0024 0025 0026 def main(): 0027 argparser = argparse.ArgumentParser(add_help=True) 0028 argparser.add_argument( 0029 "--apidef", metavar="FILE", help="KGAPI API Definition file", required=True 0030 ) 0031 argparser.add_argument( 0032 "--outdir", metavar="DIR", help="Output directory", default="." 0033 ) 0034 argparser.add_argument( 0035 "--print-schemas", 0036 action="store_true", 0037 help='Discover and list schemas to be generated. Doesn"t generate any code', 0038 ) 0039 args = argparser.parse_args() 0040 0041 with open(args.apidef) as apidef_file: 0042 api = yaml.load(apidef_file, Loader=yaml.FullLoader) 0043 0044 disc_req = requests.get(api["discovery_uri"]) 0045 schema = disc_req.json() 0046 0047 parser = Parser(api, schema) 0048 schemas = parser.parse_schema() 0049 filtered_schemas = filter(lambda s: not _skip_schema(s.name, api), schemas) 0050 0051 if args.print_schemas: 0052 for schema in filtered_schemas: 0053 print(schema.name) 0054 else: 0055 generator = Generator(api, args.outdir) 0056 for schema in filtered_schemas: 0057 generator.generate_schema(schema) 0058 0059 0060 if __name__ == "__main__": 0061 main()