def chk2(obj, fix=True): # Can return different codes for different errors in same check ret = Report(obj) try: ok = obj['testkey'] == 0 except KeyError: ret.problem_msg = 'no "testkey"' ret.error = KeyError if fix: obj['testkey'] = 1 ret.fix_msg = 'added "testkey"' else: ret.problem_level = 20 return ret if ok: return ret ret.problem_msg = '"testkey" != 0' ret.error = ValueError if fix: ret.fix_msg = 'set "testkey" to 0' obj['testkey'] = 0 else: ret.problem_level = 10 return ret
def test_report_strings(): rep = Report() yield assert_not_equal, rep.__str__(), '' yield assert_equal, rep.message, '' str_io = StringIO() rep.write_raise(str_io) yield assert_equal, str_io.getvalue(), '' rep = Report('', ValueError, 20, 'msg', 'fix') rep.write_raise(str_io) yield assert_equal, str_io.getvalue(), '' rep.problem_level = 30 rep.write_raise(str_io) yield assert_equal, str_io.getvalue(), 'Level 30: msg; fix\n' str_io.truncate(0) # No fix string, no fix message rep.fix_msg = '' rep.write_raise(str_io) yield assert_equal, str_io.getvalue(), 'Level 30: msg\n' rep.fix_msg = 'fix' str_io.truncate(0) # If we drop the level, nothing goes to the log rep.problem_level = 20 rep.write_raise(str_io) yield assert_equal, str_io.getvalue(), '' # Unless we set the default log level in the call rep.write_raise(str_io, log_level=20) yield assert_equal, str_io.getvalue(), 'Level 20: msg; fix\n' str_io.truncate(0) # If we set the error level down this low, we raise an error yield assert_raises, ValueError, rep.write_raise, str_io, 20 # But the log level wasn't low enough to do a log entry yield assert_equal, str_io.getvalue(), '' # Error still raised with lower log threshold, but now we do get a # log entry yield assert_raises, ValueError, rep.write_raise, str_io, 20, 20 yield assert_equal, str_io.getvalue(), 'Level 20: msg; fix\n' # If there's no error, we can't raise str_io.truncate(0) rep.error = None rep.write_raise(str_io, 20) yield assert_equal, str_io.getvalue(), ''