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 os 0008 import pathlib 0009 from datetime import datetime 0010 from jinja2 import Environment, FileSystemLoader, select_autoescape 0011 0012 from schema_types import Object 0013 0014 0015 class Generator: 0016 """ 0017 Generates C++ code for given schema. 0018 """ 0019 0020 def __init__(self, api, outdir): 0021 self._env = Environment( 0022 loader=FileSystemLoader( 0023 f"{pathlib.Path(__file__).parent.resolve()}/templates/" 0024 ), 0025 autoescape=select_autoescape(), 0026 ) 0027 self._api = api 0028 self._outdir = outdir 0029 os.makedirs(outdir, exist_ok=True) 0030 0031 self._api["date"] = datetime.now().strftime("%Y-%m-%d %H:%M:%S %z") 0032 0033 def generate_schema(self, schema: Object): 0034 template_base = "object" 0035 if schema.name in self._api["kgapiobjects"]: 0036 template_base = "kgapiobject" 0037 0038 filename = schema.name.lower() 0039 for ext in ["h", "cpp"]: 0040 with open( 0041 os.path.join(self._outdir, f"{filename}.{ext}"), "w" 0042 ) as output_file: 0043 template = self._env.get_template(f"{template_base}.{ext}") 0044 output_file.write(template.render(api=self._api, schema=schema))