Exemple #1
0
    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']
Exemple #2
0
 def test_sandboxeval_call_no_sandbox(self):
     with self.assertRaises(SandboxUnavailable):
         SandboxEval(uuid.uuid4(), {}).call()
Exemple #3
0
 def test_sandboxeval_call(self):
     resp = SandboxEval(SandboxBuild(self.pl.json).call()['id'], {}).call()
Exemple #4
0
 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())