diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2022-09-02 09:43:41 +0200 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2022-09-02 12:16:45 +0200 |
commit | 065766883f5e34d20ca88084cd747813a84ed2d3 (patch) | |
tree | 2bca2c34d113f0198564155ac21789466d4b8b96 /sources/pyside-tools/qtpy2cpp.py | |
parent | 4cfa700d5965922b5156517a64790369deac354f (diff) |
Move qtpy2cpp to sources/pyside-tools
Preparing the entry point.
Task-number: PYSIDE-1945
Change-Id: I4a2fbe6d35b4f97bf0ab7cfc2085b86a40bc2558
Reviewed-by: Christian Tismer <tismer@stackless.com>
Diffstat (limited to 'sources/pyside-tools/qtpy2cpp.py')
-rw-r--r-- | sources/pyside-tools/qtpy2cpp.py | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/sources/pyside-tools/qtpy2cpp.py b/sources/pyside-tools/qtpy2cpp.py new file mode 100644 index 000000000..857b12b67 --- /dev/null +++ b/sources/pyside-tools/qtpy2cpp.py @@ -0,0 +1,62 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only + +import logging +import os +import sys +from argparse import ArgumentParser, RawTextHelpFormatter +from pathlib import Path + +from qtpy2cpp_lib.visitor import ConvertVisitor + +DESCRIPTION = "Tool to convert Python to C++" + + +def create_arg_parser(desc): + parser = ArgumentParser(description=desc, + formatter_class=RawTextHelpFormatter) + parser.add_argument("--debug", "-d", action="store_true", + help="Debug") + parser.add_argument("--stdout", "-s", action="store_true", + help="Write to stdout") + parser.add_argument("--force", "-f", action="store_true", + help="Force overwrite of existing files") + parser.add_argument("files", type=str, nargs="+", help="Python source file(s)") + return parser + + +if __name__ == "__main__": + logging.basicConfig(level=logging.INFO) + logger = logging.getLogger(__name__) + arg_parser = create_arg_parser(DESCRIPTION) + args = arg_parser.parse_args() + ConvertVisitor.debug = args.debug + + for input_file_str in args.files: + input_file = Path(input_file_str) + if not input_file.is_file(): + logger.error(f"{input_file_str} does not exist or is not a file.") + sys.exit(-1) + file_root, ext = os.path.splitext(input_file) + if input_file.suffix != ".py": + logger.error(f"{input_file_str} does not appear to be a Python file.") + sys.exit(-1) + + ast_tree = ConvertVisitor.create_ast(input_file_str) + if args.stdout: + sys.stdout.write(f"// Converted from {input_file.name}\n") + ConvertVisitor(input_file, sys.stdout).visit(ast_tree) + else: + target_file = input_file.parent / (input_file.stem + ".cpp") + if target_file.exists(): + if not target_file.is_file(): + logger.error(f"{target_file} exists and is not a file.") + sys.exit(-1) + if not args.force: + logger.error(f"{target_file} exists. Use -f to overwrite.") + sys.exit(-1) + + with target_file.open("w") as file: + file.write(f"// Converted from {input_file.name}\n") + ConvertVisitor(input_file, file).visit(ast_tree) + logger.info(f"Wrote {target_file}.") |