From 1c6ad019a3e9fd35999edc838b1296701ae358dc Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 27 Oct 2021 13:16:39 +0200 Subject: [PATCH] Response data is contained in sub-field 'data' The entire response is contained in a lone 'data' field in the response. Why this is necessary I don't know, because indeed everything the server can tell us is data so everything would be in a 'data' field. But that's how the API reacts so that's how we'll have to parse it. Contributes to issue CURA-8609. --- cura/PrinterOutput/UploadMaterialsJob.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/cura/PrinterOutput/UploadMaterialsJob.py b/cura/PrinterOutput/UploadMaterialsJob.py index 99484a4430..73352258d4 100644 --- a/cura/PrinterOutput/UploadMaterialsJob.py +++ b/cura/PrinterOutput/UploadMaterialsJob.py @@ -133,17 +133,21 @@ class UploadMaterialsJob(Job): Logger.error(f"Invalid response to material upload request. Could not parse JSON data.") self.failed(UploadMaterialsError(catalog.i18nc("@text:error", "The response from Digital Factory appears to be corrupted."))) return - if "upload_url" not in response_data: + if "data" not in response_data: + Logger.error(f"Invalid response to material upload request: Missing 'data' field that contains the entire response.") + self.failed(UploadMaterialsError(catalog.i18nc("@text:error", "The response from Digital Factory is missing important information."))) + return + if "upload_url" not in response_data["data"]: Logger.error(f"Invalid response to material upload request: Missing 'upload_url' field to upload archive to.") self.failed(UploadMaterialsError(catalog.i18nc("@text:error", "The response from Digital Factory is missing important information."))) return - if "material_profile_id" not in response_data: + if "material_profile_id" not in response_data["data"]: Logger.error(f"Invalid response to material upload request: Missing 'material_profile_id' to communicate about the materials with the server.") self.failed(UploadMaterialsError(catalog.i18nc("@text:error", "The response from Digital Factory is missing important information."))) return - upload_url = response_data["upload_url"] - self._archive_remote_id = response_data["material_profile_id"] + upload_url = response_data["data"]["upload_url"] + self._archive_remote_id = response_data["data"]["material_profile_id"] try: with open(cast(str, self._archive_filename), "rb") as f: file_data = f.read()