Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 7 additions & 3 deletions rclone_python/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@


class RcloneException(ChildProcessError):
def __init__(self, description, error_msg):
def __init__(self, description: str, error_msg: str):
self.description = description
self.error_msg = error_msg
super().__init__(f"{description}. Error message: \n{error_msg}")
Expand Down Expand Up @@ -189,11 +189,15 @@ def extract_rclone_progress(line: str) -> Tuple[bool, Union[Dict[str, Any], None
Returns:
Tuple[bool, Union[Dict[str, Any], None]]: The retrieved update Dictionary or error message.
"""
stats = None

try:
log_item: Dict = json.loads(line)
if log_item.get("level", None) == "error":
return False, log_item
level = log_item.get("level", None)
if level != "info":
if level in ("error", "critical"):
# return error message
return False, log_item
else:
# stats updates use the "info" level
stats = log_item.get("stats", None)
Expand Down
12 changes: 12 additions & 0 deletions tests/test_copy.py
Original file line number Diff line number Diff line change
Expand Up @@ -198,3 +198,15 @@ def test_progress_listener(tmp_remote_folder, tmp_local_folder, show_progress, m
assert len(file_2_progress) > 0
assert file_2_progress[0] == pytest.approx(0, abs=0.1)
assert file_2_progress[-1] == pytest.approx(1)


def test_rclone_transfer_operation_error_message(default_test_setup, tmp_local_folder):
faulty_remote_name = default_test_setup.remote_name + "s:"

try:
rclone.copy(faulty_remote_name, tmp_local_folder)
assert False
except RcloneException as exception:
# check that a rclone exception message is set
assert len(exception.description) > 0
assert len(exception.error_msg) > 0
4 changes: 3 additions & 1 deletion tests/test_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,9 @@ def test_extract_rclone_progress_normal_update(valid_rclone_stats_update):
# valid input where the total file size is already known
input = valid_rclone_stats_update

valid, output = extract_rclone_progress(json.dumps({"stats": input}))
valid, output = extract_rclone_progress(
json.dumps({"stats": input, "level": "info"})
)
assert valid
# validate task summary
assert output["total"] == pytest.approx(input["totalBytes"])
Expand Down
Loading