1
0
Fork 0
mirror of https://github.com/borgbackup/borg.git synced 2025-02-20 21:27:32 +00:00

Merge pull request #6682 from ThomasWaldmann/fix-archive-progress-json-master

show_progress: add finished=true/false to archive_progress json
This commit is contained in:
TW 2022-05-08 19:45:39 +02:00 committed by GitHub
commit 0e3ff0ab70
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 35 additions and 2 deletions

View file

@ -143,11 +143,15 @@ def show_progress(self, item=None, final=False, stream=None, dt=None):
if dt is None or now - self.last_progress > dt:
self.last_progress = now
if self.output_json:
data = self.as_dict()
if not final:
data = self.as_dict()
data['path'] = remove_surrogates(item.path if item else '')
else:
data = {}
data.update({
'time': time.time(),
'type': 'archive_progress',
'path': remove_surrogates(item.path if item else ''),
'finished': final,
})
msg = json.dumps(data)
end = '\n'

View file

@ -1,3 +1,4 @@
import json
from collections import OrderedDict
from datetime import datetime, timezone
from io import StringIO
@ -61,6 +62,34 @@ def test_stats_format(stats):
assert repr(stats) == f'<Statistics object at {id(stats):#x} (20, 10, 10)>'
def test_stats_progress_json(stats):
stats.output_json = True
out = StringIO()
stats.show_progress(item=Item(path='foo'), stream=out)
result = json.loads(out.getvalue())
assert result['type'] == 'archive_progress'
assert isinstance(result['time'], float)
assert result['finished'] is False
assert result['path'] == 'foo'
assert result['original_size'] == 20
assert result['compressed_size'] == 10
assert result['deduplicated_size'] == 10
assert result['nfiles'] == 0 # this counter gets updated elsewhere
out = StringIO()
stats.show_progress(stream=out, final=True)
result = json.loads(out.getvalue())
assert result['type'] == 'archive_progress'
assert isinstance(result['time'], float)
assert result['finished'] is True # see #6570
assert 'path' not in result
assert 'original_size' not in result
assert 'compressed_size' not in result
assert 'deduplicated_size' not in result
assert 'nfiles' not in result
class MockCache:
class MockRepo: