From de8cc9330145f76be7a769d75a333d61cd72b899 Mon Sep 17 00:00:00 2001 From: Mateusz Masiarz Date: Mon, 23 Sep 2024 10:37:21 +0200 Subject: [PATCH] Change default checker to oicompare (#31) * Change default checker to oicompare * Ability to change oicompare's language * Allow changing oicompare format --- setup.py | 2 +- sio/executors/checker.py | 26 ++++++++++++++++++++------ 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/setup.py b/setup.py index bee6a64..dffbf93 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ setup( name = "sioworkers", - version = '1.5.2', + version = '1.5.3', author = "SIO2 Project Team", author_email = 'sio2@sio2project.mimuw.edu.pl', description = "Programming contest judging infrastructure", diff --git a/sio/executors/checker.py b/sio/executors/checker.py index 98512ef..8a898ab 100644 --- a/sio/executors/checker.py +++ b/sio/executors/checker.py @@ -87,12 +87,12 @@ def execute_checker(with_stderr=False, stderr=None): return renv['stdout'] -def _run_compare(env): - e = SandboxExecutor('exec-sandbox') +def _run_compare(env, format): + e = SandboxExecutor('oicompare-sandbox-v1.0.2') renv = _run_in_executor( - env, [os.path.join('bin', 'compare'), 'hint', 'out'], e, ignore_errors=True + env, [os.path.join('bin', 'oicompare'), 'hint', 'out', format], e, ignore_errors=True ) - return renv['stdout'] + return renv def _limit_length(s): @@ -116,7 +116,21 @@ def run(environ, use_sandboxes=True): output = _run_checker(environ, use_sandboxes) elif use_sandboxes: - output = _run_compare(environ) + renv = _run_compare(environ, environ.get('checker_format', 'english_abbreviated')) + if renv['return_code'] == 0: + environ['result_code'] = 'OK' + environ['result_percentage'] = (100, 1) + elif renv['return_code'] == 1: + environ['result_code'] = 'WA' + environ['result_percentage'] = (0, 1) + # Should be redundant because we are using oicompare with abbreviated output, + # but just in case. + environ['result_string'] = _limit_length(renv['stdout'][0]) + else: + raise CheckerError( + 'oicompare returned code(%d). Checker renv: %s' % (renv['return_code'], renv) + ) + return environ else: output = _run_diff(environ) except (CheckerError, ExecError) as e: @@ -155,4 +169,4 @@ def output_to_fraction(output_str): except ZeroDivisionError: raise CheckerError('Zero division in checker output "%s"' % output_str) except TypeError: - raise CheckerError('Invalid checker output "%s"' % output_str) \ No newline at end of file + raise CheckerError('Invalid checker output "%s"' % output_str)