This is taken from Qt Project (Pyside6)
Created
January 1, 2026 09:42
-
-
Save tansautn/1d0cabe9e68e7f593f60dbef6215615a to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # 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}.") |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment