From 1175756d118fe47bc751642a201264a6e30eb45f Mon Sep 17 00:00:00 2001 From: Marc Wrobel Date: Fri, 16 Feb 2024 21:06:41 +0100 Subject: [PATCH] Fix releasedata.py (#308) Release data were not loaded in the `ProductData#__enter__` method. Data would be lost for auto configuration declaring an auto method updating releases followed by an auto method updating versions. Also raise an error when product data are completely empty after the update, preventing the product data to be updated at all. This does not catch all types of errors (what if the second script silently fails completely ?), but that's a start. --- src/common/releasedata.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/common/releasedata.py b/src/common/releasedata.py index a512697c..41caab3a 100644 --- a/src/common/releasedata.py +++ b/src/common/releasedata.py @@ -89,12 +89,16 @@ class ProductData: def __enter__(self) -> "ProductData": if self.versions_path.is_file(): with self.versions_path.open() as f: - for json_version in json.load(f)["versions"].values(): + json_data = json.load(f) + for json_version in json_data.get("versions", {}).values(): version = ProductVersion(self.name, json_version) self.versions[version.name()] = version - logging.info(f"loaded versions data for {self} from {self.versions_path}") + for json_release in json_data.get("releases", {}).values(): + release = ProductRelease(self.name, json_release) + self.releases[release.name()] = release + logging.info(f"loaded data for {self} from {self.versions_path}") else: - logging.info(f"no versions data found for {self} at {self.versions_path}") + logging.info(f"no data found for {self} at {self.versions_path}") return self @@ -105,6 +109,11 @@ class ProductData: logging.error(message, exc_info=exc_value) raise ProductUpdateError(message) from exc_value + if not self.versions and not self.releases: + message = f"product data are empty after updating {self}" + logging.error(message) + raise ProductUpdateError(message) + logging.info("updating %s data",self.versions_path) ordered_releases = sorted(self.releases.values(), key=lambda v: v.name(), reverse=True) ordered_versions = sorted(self.versions.values(), key=lambda v: (v.date(), v.name()), reverse=True)