Skip to content

Commit

Permalink
Merge pull request #59 from MichaelAquilina/graceful_sync_errors
Browse files Browse the repository at this point in the history
Gracefully display error messages that occur during the sync command
  • Loading branch information
MichaelAquilina committed Jul 30, 2017
2 parents 0e8ffed + 5614bd5 commit ad95b32
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 3 deletions.
9 changes: 6 additions & 3 deletions s4/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -169,10 +169,13 @@ def sync_command(args, config, logger):
entry = config['targets'][name]
client_1, client_2 = get_clients(entry)

worker = sync.SyncWorker(client_1, client_2)
try:
worker = sync.SyncWorker(client_1, client_2)

logger.info('Syncing %s [%s <=> %s]', name, client_1.get_uri(), client_2.get_uri())
worker.sync(conflict_choice=args.conflicts)
logger.info('Syncing %s [%s <=> %s]', name, client_1.get_uri(), client_2.get_uri())
worker.sync(conflict_choice=args.conflicts)
except Exception as e:
logger.error("There was an error syncing '%s': %s", name, e)
except KeyboardInterrupt:
logger.warning('Quitting due to Keyboard Interrupt...')

Expand Down
29 changes: 29 additions & 0 deletions tests/test_cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,35 @@ def test_wrong_target(self, SyncWorker, logger):
)
assert SyncWorker.call_count == 0

def test_sync_error(self, SyncWorker, logger):
args = argparse.Namespace(targets=None, conflicts=None)
config = {
'targets': {
'foo': {
'local_folder': '/home/mike/docs',
's3_uri': 's3://foobar/docs',
'aws_access_key_id': '3223323',
'aws_secret_access_key': '23#@423#@',
'region_name': 'us-east-1',
},
'bar': {
'local_folder': '/home/mike/barmil',
's3_uri': 's3://foobar/barrel',
'aws_access_key_id': '3223',
'aws_secret_access_key': '23#eWEa@423#@',
'region_name': 'us-west-2',
}
}
}
SyncWorker.side_effect = ValueError('something bad happened')

cli.sync_command(args, config, logger)
assert SyncWorker.call_count == 2
assert get_stream_value(logger) == (
"There was an error syncing 'bar': something bad happened\n"
"There was an error syncing 'foo': something bad happened\n"
)

def test_keyboard_interrupt(self, SyncWorker, logger):
args = argparse.Namespace(targets=None, conflicts=None)
config = {
Expand Down

0 comments on commit ad95b32

Please sign in to comment.