diff options
| author | Jaime Resano <Jaime.Resano-Aisa@qt.io> | 2025-02-26 14:55:09 +0100 |
|---|---|---|
| committer | Jaime Resano <Jaime.RESANO-AISA@qt.io> | 2025-03-12 08:18:31 +0000 |
| commit | 69ecc3c71155548f43176e7fcf948f09eaf62416 (patch) | |
| tree | 98b706a482b74acbd9ffc29cc344ea22bd429e04 /sources/pyside-tools/project_lib/pyproject_json.py | |
| parent | d9ce0e405f969d96cad221450b853b411eb96ad3 (diff) | |
pyproject.toml: 1. Refactor pyside6-project
This patch refactors the code of the pyside6-project tool to simplify
the upcoming change of the project file format, pyproject.toml.
The CLI tool documentation is also improved.
Task-number: PYSIDE-2714
Change-Id: I010bbb58f3ed8be5ad5f38687f36b4641a4a021d
Reviewed-by: Shyamnath Premnadh <Shyamnath.Premnadh@qt.io>
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
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 |
