aboutsummaryrefslogtreecommitdiff
path: root/rumba/utils.py
diff options
context:
space:
mode:
authorMarco Capitani <m.capitani@nextworks.it>2017-11-13 12:18:55 +0100
committerSander Vrijders <sander.vrijders@ugent.be>2017-11-13 15:48:27 +0000
commit510bb2116ea3e6c0d2559fe1b0c465f010d74bfb (patch)
tree4f1d56841da5e01398557b33e209b58317ab5227 /rumba/utils.py
parent9d15d1117c80ee9313d0dc391488efb9bb060a4a (diff)
downloadrumba-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.py27
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.