diff options
Diffstat (limited to 'sources/pyside-tools/project_lib/pyproject_json.py')
| -rw-r--r-- | sources/pyside-tools/project_lib/pyproject_json.py | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/sources/pyside-tools/project_lib/pyproject_json.py b/sources/pyside-tools/project_lib/pyproject_json.py new file mode 100644 index 000000000..abef7e2f4 --- /dev/null +++ b/sources/pyside-tools/project_lib/pyproject_json.py @@ -0,0 +1,43 @@ +# Copyright (C) 2025 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 json +from pathlib import Path + +from .pyproject_parse_result import PyProjectParseResult + + +def parse_pyproject_json(pyproject_json_file: Path) -> PyProjectParseResult: + """ + Parse a pyproject.json file and return a PyProjectParseResult object. + """ + result = PyProjectParseResult() + try: + with pyproject_json_file.open("r") as pyf: + project_file_data = json.load(pyf) + except json.JSONDecodeError as e: + result.errors.append(str(e)) + return result + except Exception as e: + result.errors.append(str(e)) + return result + + if not isinstance(project_file_data, dict): + result.errors.append("The root element of pyproject.json must be a JSON object") + return result + + found_files = project_file_data.get("files") + if found_files and not isinstance(found_files, list): + result.errors.append("The files element must be a list") + return result + + for file in project_file_data.get("files", []): + if not isinstance(file, str): + result.errors.append(f"Invalid file: {file}") + return result + + file_path = Path(file) + if not file_path.is_absolute(): + file_path = (pyproject_json_file.parent / file).resolve() + result.files.append(file_path) + + return result |
