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.
This commit is contained in:
Marc Wrobel
2024-02-16 21:06:41 +01:00
committed by GitHub
parent 3abfab63b2
commit 1175756d11

View File

@@ -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)