From e78bb78bfd30563fe2d5e20410e6b9cbb5f81307 Mon Sep 17 00:00:00 2001 From: Oliver Date: Mon, 1 Aug 2022 13:18:26 +1000 Subject: [PATCH] Check status code before throwing JSON error (#198) * Check status code before throwing JSON error * Update release notes --- assets/release_notes.md | 8 ++++++++ lib/api.dart | 40 ++++++++++++++++++++++++---------------- 2 files changed, 32 insertions(+), 16 deletions(-) diff --git a/assets/release_notes.md b/assets/release_notes.md index d21ebc09..b461844c 100644 --- a/assets/release_notes.md +++ b/assets/release_notes.md @@ -1,6 +1,14 @@ ## InvenTree App Release Notes --- +### 0.8.1 - August 2022 +--- + +- Added extra filtering options for PartCategory list +- Added extra filtering options for StockLocation list +- Fixed bug related to null widget context +- Improved error handling and reporting + ### 0.8.0 - July 2022 --- diff --git a/lib/api.dart b/lib/api.dart index 5c024895..c2e9ce54 100644 --- a/lib/api.dart +++ b/lib/api.dart @@ -810,6 +810,7 @@ class InvenTreeAPI { sentryReportMessage( "Error decoding JSON response from server", context: { + "method": "uploadFile", "url": url, "statusCode": response.statusCode.toString(), "data": jsondata, @@ -1039,18 +1040,14 @@ class InvenTreeAPI { } } else { - if (ignoreResponse) { + // First check that the returned status code is what we expected + if (statusCode != null && statusCode != _response.statusCode) { + showStatusCodeError(url, _response.statusCode); + } else if (ignoreResponse) { response.data = {}; } else { response.data = await responseToJson(url, _response) ?? {}; } - - if (statusCode != null) { - // Expected status code not returned - if (statusCode != _response.statusCode) { - showStatusCodeError(url, _response.statusCode); - } - } } } on HttpException catch (error) { showServerError(url, L10().serverError, error.toString()); @@ -1091,14 +1088,25 @@ class InvenTreeAPI { return data ?? {}; } on FormatException { - sentryReportMessage( - "Error decoding JSON response from server", - context: { - "headers": response.headers.toString(), - "statusCode": response.statusCode.toString(), - "data": body.toString(), - } - ); + switch (response.statusCode) { + case 400: + case 401: + case 403: + case 404: + // Ignore for unauthorized pages + break; + default: + sentryReportMessage( + "Error decoding JSON response from server", + context: { + "headers": response.headers.toString(), + "statusCode": response.statusCode.toString(), + "data": body.toString(), + "endpoint": url, + } + ); + break; + } showServerError( url,