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()