Change context manager to normal function

This commit is contained in:
Markus Unterwaditzer 2014-10-18 17:43:25 +02:00
parent 6ac71e0e7c
commit 214756f28c

View file

@ -7,7 +7,6 @@
:license: MIT, see LICENSE for more details. :license: MIT, see LICENSE for more details.
''' '''
import contextlib
import functools import functools
import json import json
import os import os
@ -234,9 +233,9 @@ def _create_app():
def inner(*a, **kw): def inner(*a, **kw):
try: try:
f(*a, **kw) f(*a, **kw)
except CliError as e: except:
cli_logger.critical(str(e)) if not handle_cli_error():
sys.exit(1) sys.exit(1)
return inner return inner
@ -310,11 +309,9 @@ def _create_app():
try: try:
func(queue=queue, spawn_worker=spawn_worker, func(queue=queue, spawn_worker=spawn_worker,
handled_collections=handled_collections) handled_collections=handled_collections)
except JobFailed as e: except:
exceptions.append(e) if not handle_cli_error():
except CliError as e: exceptions.append(sys.exc_info()[1])
cli_logger.critical(str(e))
exceptions.append(e)
finally: finally:
queue.task_done() queue.task_done()
@ -421,10 +418,11 @@ def prepare_sync(queue, spawn_worker, handled_collections, pair_name,
force_delete=force_delete)) force_delete=force_delete))
@contextlib.contextmanager def handle_cli_error(status_name='sync'):
def catch_sync_errors(status_name):
try: try:
yield raise
except CliError as e:
cli_logger.critical(str(e))
except StorageEmpty as e: except StorageEmpty as e:
cli_logger.error( cli_logger.error(
'{status_name}: Storage "{name}" was completely emptied. Use ' '{status_name}: Storage "{name}" was completely emptied. Use '
@ -435,7 +433,6 @@ def catch_sync_errors(status_name):
status_name=status_name status_name=status_name
) )
) )
raise JobFailed()
except SyncConflict as e: except SyncConflict as e:
cli_logger.error( cli_logger.error(
'{status_name}: One item changed on both sides. Resolve this ' '{status_name}: One item changed on both sides. Resolve this '
@ -447,13 +444,13 @@ def catch_sync_errors(status_name):
'Item href on side B: {e.href_b}\n' 'Item href on side B: {e.href_b}\n'
.format(status_name=status_name, e=e, docs=DOCS_HOME) .format(status_name=status_name, e=e, docs=DOCS_HOME)
) )
raise JobFailed() except (click.Abort, KeyboardInterrupt, JobFailed):
except (click.Abort, KeyboardInterrupt): pass
raise JobFailed()
except Exception as e: except Exception as e:
cli_logger.exception('Unhandled exception occured while syncing {}.' cli_logger.exception('Unhandled exception occured while syncing {}.'
.format(status_name)) .format(status_name))
raise JobFailed() else:
return True
def sync_collection(queue, spawn_worker, handled_collections, pair_name, def sync_collection(queue, spawn_worker, handled_collections, pair_name,
@ -466,7 +463,7 @@ def sync_collection(queue, spawn_worker, handled_collections, pair_name,
return return
handled_collections.add(key) handled_collections.add(key)
with catch_sync_errors(status_name): try:
cli_logger.info('Syncing {}'.format(status_name)) cli_logger.info('Syncing {}'.format(status_name))
status = load_status(general['status_path'], status_name) status = load_status(general['status_path'], status_name)
@ -476,5 +473,8 @@ def sync_collection(queue, spawn_worker, handled_collections, pair_name,
conflict_resolution=pair_options.get('conflict_resolution', None), conflict_resolution=pair_options.get('conflict_resolution', None),
force_delete=status_name in force_delete force_delete=status_name in force_delete
) )
except:
if not handle_cli_error(status_name):
raise JobFailed()
save_status(general['status_path'], status_name, status) save_status(general['status_path'], status_name, status)