def main(diff=False, verbatim=True, ci=False, ip=None, strip_lines=True, show_inp=True, **kwargs): options = type("", (), {'verbatim': verbatim, 'ignore_pattern': ip, 'case_insensitive': ci, 'strip_lines': strip_lines}) try: res = corrector.Result() res.html_header = "<h4>Output comparer</h4>" orig_expected = corrector.expected() orig_obtained = corrector.obtained() expected, obtained = "", "" if options.strip_lines: orig_expected = '\n'.join(map(lambda l: l.strip(), orig_expected.splitlines())) orig_obtained = '\n'.join(map(lambda l: l.strip(), orig_obtained.splitlines())) if options.verbatim or options.ignore_pattern is None: expected = orig_expected obtained = orig_obtained else: ignore = re.compile(options.ignore_pattern) expected = re.sub(ignore, '', orig_expected) obtained = re.sub(ignore, '', orig_obtained) if options.case_insensitive: expected = expected.lower() obtained = obtained.lower() if expected.strip() == obtained.strip(): print "Correct answer" if kwargs['has_error']: res.corrector_result = corrector.CORR_OK res.classification = corrector.ACCEPTED_WITH_ERRORS else: res.corrector_result = corrector.CORR_OK res.classification = corrector.ACCEPTED else: res.corrector_result = corrector.CORR_ERROR res.classification = corrector.WRONG_ANSWER if (diff or show_inp) and show_diff(): res.html_body = '' if show_inp: res.html_body += '<h5>Input</h5>' with open(corrector.input()) as inp: res.html_body += '''<div style="white-space: pre;font-family: monospace; background: white; margin: 2mm; padding: 3mm; ont-size: 0.81em">%s</div>'''%cgi.escape(inp.read()) if diff: differ = difflib.HtmlDiff(tabsize=4) res.html_body += '''<div style="background: white; margin: 2mm; padding: 3mm"> <p style="font-family: monospace; font-size: 0.81em; color: red">Output was not correct</p> <h4>Difference between obtained and expected output</h4>''' res.html_body += differ.make_table( orig_obtained.splitlines()[:MAXLINES], orig_expected.splitlines()[:MAXLINES], 'Obtained output', 'Expected output') res.html_body += '</div>' if len(orig_expected.splitlines()) > MAXLINES or len(orig_obtained.splitlines()) > MAXLINES: res.html_body += "<p>Output truncated..</p>" corrector.touch(diff_file) else: print "Output was not correct" return res except Exception, ex: print(ex) res.corrector_result = corrector.CORR_OK res.classification = corrector.REQUIRES_REEVALUATION
def main(diff=False, checker="checker.py", show_inp=True, **kwargs): try: res = corrector.Result() # res.html_header = "<h4>Output checker</h4>" expected = corrector.expected() obtained = corrector.obtained() problem_dir = os.path.abspath(os.path.join(corrector.context(), "..", "..", "..")) checker_file = os.path.join(problem_dir, checker) chk = imp.load_source("chk", checker_file) if chk.check(expected=expected, obtained=obtained): print "Correct answer" if kwargs["has_error"]: res.corrector_result = corrector.CORR_OK res.classification = corrector.ACCEPTED_WITH_ERRORS else: res.corrector_result = corrector.CORR_OK res.classification = corrector.ACCEPTED else: res.corrector_result = corrector.CORR_ERROR res.classification = corrector.WRONG_ANSWER if (diff or show_inp) and show_diff(): res.html_body = "" if show_inp: res.html_body += "<h5>Input</h5>" with open(corrector.input()) as inp: res.html_body += """<div style="white-space: pre;font-family: monospace; background: white; margin: 2mm; padding: 3mm; ont-size: 0.81em">%s</div>""" % cgi.escape( inp.read() ) if diff: differ = difflib.HtmlDiff(tabsize=4) res.html_body += """<div style="background: white; margin: 2mm; padding: 3mm"> <p style="font-family: monospace; font-size: 0.81em; color: red">Output was not correct</p> <h4>Difference between obtained and expected output</h4>""" res.html_body += differ.make_table( obtained.splitlines()[:MAXLINES], expected.splitlines()[:MAXLINES], "Obtained output", "Expected output", ) res.html_body += "</div>" if len(expected.splitlines()) > MAXLINES or len(obtained.splitlines()) > MAXLINES: res.html_body += "<p>Output truncated..</p>" corrector.touch(diff_file) else: print "Output was not correct" return res except Exception, ex: # print(ex) import traceback res.html_body = traceback.format_exc() res.corrector_result = corrector.CORR_OK res.classification = corrector.REQUIRES_REEVALUATION return res