From 0a3ee8395574beed38488248aa56ee93ec998681 Mon Sep 17 00:00:00 2001
From: Karl-Hermann Wieners <karl-hermann.wieners@mpimet.mpg.de>
Date: Fri, 8 Mar 2013 10:01:29 +0000
Subject: [PATCH] Updated new script generation

* Added error handling for interpolation of configuration values
* Changed command line error to use logging interface
* Reduced verbosity of template defaulting
---
 mkexp | 18 +++++++++++++-----
 1 file changed, 13 insertions(+), 5 deletions(-)

diff --git a/mkexp b/mkexp
index 57b1af1..1bca4a3 100755
--- a/mkexp
+++ b/mkexp
@@ -10,7 +10,7 @@ import stat
 import StringIO
 import sys
 
-from configobj import ConfigObj
+from configobj import ConfigObj, InterpolationError
 from jinja2 import Environment, FileSystemLoader
 
 #
@@ -22,6 +22,7 @@ que_lib_dir = 'standard_queue_settings'
 default_name = 'DEFAULT'
 
 logging.basicConfig(format='%(levelname)s: %(message)s')
+logging.addLevelName(logging.INFO, 'Note')
 logging.addLevelName(logging.WARNING, 'Hey')
 logging.addLevelName(logging.ERROR, 'Oops')
 logging.addLevelName(logging.CRITICAL, 'Sorry')
@@ -58,7 +59,7 @@ def get_template_name(experiment_kind, job_id):
     '''Determine script template, taking system default if type is unsupported.'''
     run_template_name = os.path.join(exp_lib_dir, experiment_kind+'.'+job_id+'.tmpl')
     if not os.path.exists(run_template_name):
-        logging.warning("no %s template for '%s', using default", job_id, experiment_kind)
+        logging.info("no %s template for '%s', using default", job_id, experiment_kind)
         run_template_name = os.path.join(exp_lib_dir, default_name+'.'+job_id+'.tmpl')
     return run_template_name
 
@@ -139,11 +140,14 @@ def split_jobs(config):
 # Check command line
 
 if len(sys.argv) < 2:
-    sys.stderr.write('Oops: invalid number of parameters!\n' +
-                     'Usage: '+sys.argv[0]+' experiment_config_name\n')
+    logging.error('invalid number of parameters\n' +
+                  'Usage: '+sys.argv[0]+' experiment_config_name')
     sys.exit(1)
 
 experiment_config_name = sys.argv[1]
+if not os.path.exists(experiment_config_name):
+    logging.error("config file '{0}' does not exist".format(experiment_config_name))
+    sys.exit(1)
 
 # Read and store configuration info from input and experiments' library
 # Store environment as default for control settings, then add config from files
@@ -196,7 +200,11 @@ config_lines.seek(0)
 config = ConfigObj(config_lines, interpolation='template')
 
 def eval_key(section, key):
-    section[key] = section[key]
+    try:
+        section[key] = section[key]
+    except InterpolationError as error:
+        logging.error("{0} while reading key '{1}'".format(error.message[:-1], key))
+        sys.exit(2)
 
 config.walk(eval_key)
 
-- 
GitLab