def raw_evaluate(self, request, answers, test=False): """Evaluate the exercise with the given answers according to the current context. Parameters: request - (django.http.request) Current Django request object. answers - (dict) Answers of the student. test - (bool) Whether this exercise is in a testing session or not. """ evaluator = SandboxEval(self.envid, answers) if not evaluator.check(): self.build(request, test=test) evaluator = SandboxEval(self.envid, answers) response = evaluator.call() answer = { "answers": answers, "user": request.user, "pl": self.pl, "grade": response['grade'], } if response['status'] < 0: # Sandbox Error feedback = response['feedback'] if request.user.profile.can_load() and response['sandboxerr']: feedback += "<br><hr>Sandbox error:<br>" + htmlprint.code( response['sandboxerr']) feedback += "<br><hr>Received on stderr:<br>" + htmlprint.code( response['stderr']) elif response['status'] > 0: # Grader Error feedback = ( "Une erreur s'est produite lors de l'exécution du grader " + ("(exit code: %d, env: %s). Merci de prévenir votre professeur" % (response['status'], response['id']))) if request.user.profile.can_load(): feedback += "<br><hr>Received on stderr:<br>" + htmlprint.code( response['stderr']) else: # Success feedback = response['feedback'] if request.user.profile.can_load() and response['stderr']: feedback += "<br><br>Received on stderr:<br>" + htmlprint.code( response['stderr']) self.context.update(response['context']) self.context['answers__'] = answers self.save() return answer, feedback, response['status']
def test_sandboxeval_call_no_sandbox(self): with self.assertRaises(SandboxUnavailable): SandboxEval(uuid.uuid4(), {}).call()
def test_sandboxeval_call(self): resp = SandboxEval(SandboxBuild(self.pl.json).call()['id'], {}).call()
def test_sandboxeval_check(self): seval = SandboxEval(SandboxBuild(self.pl.json).call()['id'], {}) self.assertTrue(seval.check()) seval = SandboxEval(uuid.uuid4(), {}) self.assertFalse(seval.check())