Home | History | Annotate | Download | only in common_lib
      1 # pylint: disable=missing-docstring
      2 
      3 import sys, re, traceback
      4 
      5 # these statuses are ordered such that a status earlier in the list will
      6 # override a status later in a list (e.g. ERROR during a test will override
      7 # prior GOOD results, but WARN will not override a FAIL)
      8 job_statuses = ["TEST_NA", "ABORT", "ERROR", "FAIL", "WARN", "GOOD", "ALERT",
      9                 "RUNNING", "NOSTATUS"]
     10 
     11 def is_valid_status(status):
     12     if not re.match(r'(START|INFO|(END )?(' + '|'.join(job_statuses) + '))$',
     13                     status):
     14         return False
     15     else:
     16         return True
     17 
     18 
     19 def log_and_ignore_errors(msg):
     20     """ A decorator for wrapping functions in a 'log exception and ignore'
     21     try-except block. """
     22     def decorator(fn):
     23         def decorated_func(*args, **dargs):
     24             try:
     25                 fn(*args, **dargs)
     26             except Exception:
     27                 print >> sys.stderr, msg
     28                 traceback.print_exc(file=sys.stderr)
     29         return decorated_func
     30     return decorator
     31