aboutsummaryrefslogtreecommitdiffstats
path: root/sources/pyside-tools/project_lib/pyproject_json.py
diff options
context:
space:
mode:
authorJaime Resano <Jaime.Resano-Aisa@qt.io>2025-02-26 14:55:09 +0100
committerJaime Resano <Jaime.RESANO-AISA@qt.io>2025-03-12 08:18:31 +0000
commit69ecc3c71155548f43176e7fcf948f09eaf62416 (patch)
tree98b706a482b74acbd9ffc29cc344ea22bd429e04 /sources/pyside-tools/project_lib/pyproject_json.py
parentd9ce0e405f969d96cad221450b853b411eb96ad3 (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.py43
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