From 981445d594fb897e4254833143d33b83e2e4f31e Mon Sep 17 00:00:00 2001 From: Houkime <> Date: Wed, 7 Jun 2023 15:55:38 +0000 Subject: [PATCH] refactor(backups): expect one more error of restic json output parsing --- selfprivacy_api/backup/restic_backuper.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/selfprivacy_api/backup/restic_backuper.py b/selfprivacy_api/backup/restic_backuper.py index 2c98b46..69bdea9 100644 --- a/selfprivacy_api/backup/restic_backuper.py +++ b/selfprivacy_api/backup/restic_backuper.py @@ -4,6 +4,7 @@ import datetime from typing import List from collections.abc import Iterable +from json.decoder import JSONDecodeError from selfprivacy_api.backup.backuper import AbstractBackuper from selfprivacy_api.models.backup.snapshot import Snapshot @@ -208,6 +209,7 @@ class ResticBackuper(AbstractBackuper): restore_command, stdout=subprocess.PIPE, shell=False ) as handle: + # for some reason restore does not support nice reporting of progress via json output = handle.communicate()[0].decode("utf-8") if "restoring" not in output: raise ValueError("cannot restore a snapshot: " + output) @@ -259,7 +261,12 @@ class ResticBackuper(AbstractBackuper): truncated_output = output[starting_index:] json_messages = truncated_output.splitlines() if len(json_messages) == 1: - return json.loads(truncated_output) + try: + return json.loads(truncated_output) + except JSONDecodeError as e: + raise ValueError( + "There is no json in the restic output : " + output + ) from e result_array = [] for message in json_messages: