mirror of
https://github.com/revng/revng
synced 2026-06-21 14:07:57 +00:00
1d91ed9beb
The `tuple_tree_generator` component was still heavily treating C++ as a special citizen. This commit normalizes the situation.
56 lines
1.6 KiB
Python
Executable File
56 lines
1.6 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
#
|
|
# This file is distributed under the MIT License. See LICENSE.md for details.
|
|
#
|
|
|
|
import argparse
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
import yaml
|
|
|
|
from tuple_tree_generator import Schema, generate_python
|
|
|
|
argparser = argparse.ArgumentParser()
|
|
argparser.add_argument("schema", help="YAML schema")
|
|
argparser.add_argument("--output", "-o", help="Output to this file (defaults to stdout)")
|
|
argparser.add_argument("--namespace", required=True, help="Base namespace for generated types")
|
|
argparser.add_argument(
|
|
"--string-type", action="append", default=[], help="Treat this type as a string"
|
|
)
|
|
argparser.add_argument("--root-type", required=True, help="Schema root type")
|
|
argparser.add_argument(
|
|
"--external-type",
|
|
action="append",
|
|
default=[],
|
|
help="Assume these types are externally defined. "
|
|
"They will be imported using `from .external import <name>",
|
|
)
|
|
argparser.add_argument("--scalar-type", action="append", default=[], help="Scalar type")
|
|
|
|
|
|
def main(args):
|
|
with open(args.schema, encoding="utf-8") as f:
|
|
raw_schema = yaml.safe_load(f)
|
|
|
|
schema = Schema(raw_schema, args.namespace, args.scalar_type)
|
|
source = generate_python(
|
|
schema,
|
|
args.root_type,
|
|
string_types=args.string_type,
|
|
external_types=args.external_type,
|
|
)
|
|
|
|
if args.output:
|
|
output_path = Path(args.output)
|
|
# Ensure the containing directory is created
|
|
output_path.parent.mkdir(exist_ok=True)
|
|
output_path.write_text(source, encoding="utf-8")
|
|
else:
|
|
sys.stdout.write(source)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
parsed_args = argparser.parse_args()
|
|
main(parsed_args)
|