Esempio n. 1
0
    def post(self, request, pid):
        global lang
        problem = get_object_or_404(Problem, pk=pid)
        if 'lang_select' in request.POST:
            form2 = self.form_class2(request.POST)
            if form2.is_valid():
                lang = form2.cleaned_lang()
                form1 = self.form_class1(lang, None)
                form2 = self.form_class2(None)
                return render(
                    request, self.template_name, {
                        'problem': problem,
                        'form1': form1,
                        'form2': form2,
                        'lang': lang
                    })
            else:
                form1 = self.form_class1(lang, None)
                form2 = self.form_class2(None)
                return render(
                    request, self.template_name, {
                        'problem': problem,
                        'form1': form1,
                        'form2': form2,
                        'lang': lang
                    })
        else:
            form1 = self.form_class1(data=request.POST, lang=lang)
            if not form1.is_valid():
                form1 = self.form_class1(lang, None)
                form2 = self.form_class2(None)
                return render(request, self.template_name, {
                    'form1': form1,
                    'form2': form2,
                    'lang': lang
                })

            content = ContentFile(request.POST['code'])
            submission = Submission(user=request.user,
                                    lang=lang,
                                    problem=problem)
            submission.code.save('x' + self.lang_map[lang],
                                 content,
                                 save=False)
            r = submission.compile()

            # Compilation error
            if r != 200:
                submission.code.delete(save=False)
                form2 = self.form_class2(None)
                return render(request, self.template_name, {
                    'form1': form1,
                    'form2': form2,
                    'lang': lang,
                    'errors': r
                })
            submission.save()
            result = problem.test(submission)
            result.status = status[result.status]
            result.toe = '{:.2f}'.format(result.toe)
            form2 = self.form_class2(None)
            return render(
                request, self.template_name, {
                    'problem': problem,
                    'form1': form1,
                    'form2': form2,
                    'lang': lang,
                    'result': result
                })