diff options
author | Marco Capitani <m.capitani@nextworks.it> | 2017-11-13 12:18:55 +0100 |
---|---|---|
committer | Sander Vrijders <sander.vrijders@ugent.be> | 2017-11-13 15:48:27 +0000 |
commit | 510bb2116ea3e6c0d2559fe1b0c465f010d74bfb (patch) | |
tree | 4f1d56841da5e01398557b33e209b58317ab5227 /rumba/utils.py | |
parent | 9d15d1117c80ee9313d0dc391488efb9bb060a4a (diff) | |
download | rumba-510bb2116ea3e6c0d2559fe1b0c465f010d74bfb.tar.gz rumba-510bb2116ea3e6c0d2559fe1b0c465f010d74bfb.zip |
utils, examples: Add ExperimentManager CM
Adds an ExperimentManager context manager for scripts:
- No more ugly stack traces after execution if something goes wrong
- No more ugly and easy to forget try-finally blocks
Diffstat (limited to 'rumba/utils.py')
-rw-r--r-- | rumba/utils.py | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/rumba/utils.py b/rumba/utils.py new file mode 100644 index 0000000..5348b0a --- /dev/null +++ b/rumba/utils.py @@ -0,0 +1,27 @@ +import time + +import rumba.log as log +import rumba.model as model + +logger = log.get_logger(__name__) + + +class ExperimentManager(object): + + def __init__(self, experiment, do_swap_out=True): + assert isinstance(experiment, model.Experiment), \ + 'An experiment instance is required.' + self.experiment = experiment + self.do_swap_out = do_swap_out + + def __enter__(self): + pass + + def __exit__(self, exc_type, exc_val, exc_tb): + if self.do_swap_out: + self.experiment.swap_out() + if exc_val is not None: + logger.error('Something went wrong. Got %s: %s', + type(exc_val).__name__, str(exc_val)) + time.sleep(0.1) # Give the queue logger enough time to flush. + return True # Suppress the exception we logged: no traceback. |