MultiPLE-Evaluator / src /eval_scala.py
dongsheng's picture
Upload 48 files
41e79e2 verified
from pathlib import Path
import tempfile
from src.safe_subprocess import run
LANG_NAME = "Scala"
LANG_EXT = ".scala"
def eval_script(path: Path):
with tempfile.TemporaryDirectory() as outdir:
# Each Scala file contains the class with same name `JAVA_CLASS_NAME`
# Hence, scalac will same JAVA_CLASS_NAME.class file for each problem
# Write class for each problem to a different temp dir
build = run(["scalac", "-d", outdir, path], timeout_seconds=45)
if build.exit_code != 0:
# Well, it's a compile error. May be a type error or
# something. But, why break the set convention
return {
"status": "SyntaxError",
"exit_code": build.exit_code,
"stdout": build.stdout,
"stderr": build.stderr,
}
# "Problem" is the name of the class we emit.
r = run(["scala", "-cp", f"{outdir}", "Problem"])
if r.timeout:
status = "Timeout"
elif r.exit_code == 0 and r.stderr == "":
status = "OK"
else:
# Well, it's a panic
status = "Exception"
return {
"status": status,
"exit_code": r.exit_code,
"stdout": r.stdout,
"stderr": r.stderr,
}