示例#1
0
 def mutate(self, info, *args, **kwargs):
     form = SubmitSubmissionForm(kwargs)
     if form.is_valid():
         values = form.cleaned_data
         problem = get_object_or_None(Problem, slug=values['problem_slug'])
         attach_info = SubmissionAttachInfo(
             cases_count=DataService.get_cases_count(problem.pk))
         result = JudgeResultModel(_result=JudgeResult.PD.full)
         sub = Submission(code=values.get('code'),
                          _language=values.get('language'),
                          user=info.context.user,
                          problem=problem)
         attach_info.save()
         result.save()
         sub.attach_info = attach_info
         sub.result = result
         sub.save()
         apply_submission.apply_async(
             args=(sub.get_judge_field(), ),
             queue=settings.JUDGE.get('task_queue'))
         problem.ins_submit_times()
         return SubmitSubmission(pk=sub.pk)
     else:
         raise RuntimeError(form.errors.as_json())
示例#2
0
文件: views.py 项目: modanhan/cpsc471
def submission(request, challenge_id):
    if request.user.id == None:
        return HttpResponse('Please log in.')
    if request.method == 'POST':
        try:
            requestpost = request.POST['choice']
        except:
            return HttpResponse('Please select a language.')
        c = Challenge.objects.get(pk=challenge_id)
        input = request.POST.get('your_solution', None)
        user = User.objects.get(pk=request.user.id)
        s = Submission()
        s.challenge = c
        l = Language.objects.get(pk=request.POST['choice'])
        s.language = l
        s.user = user
        s.timestamp = datetime.datetime.now()
        if c.ans == input:
            # check if never solved
            solve = Submission.objects.filter(user__id=request.user.id).filter(
                challenge__id=challenge_id).filter(result='AC')

            if not solve.exists():
                challengeTopics = ChallengeTopic.objects.all().filter(
                    challenge_id=c.id)
                for ct in challengeTopics:
                    t = Topic.objects.get(pk=ct.topic_id)
                    tr, created = TopicRating.objects.get_or_create(
                        topic=t,
                        user=user,
                        defaults={
                            'rating': 0,
                            'timestamp': datetime.datetime.now(),
                        })
                    if created:
                        tr.rating = 0
                    tr.rating += c.difficulty * ct.weight
                    tr.save()

            if not solve.filter(language__id=l.id).exists():
                lr, created = LanguageRating.objects.get_or_create(
                    language=l,
                    user=user,
                    defaults={
                        'rating': 0,
                        'timestamp': datetime.datetime.now()
                    })
                if created:
                    lr.rating = 0
                lr.rating += c.difficulty
                lr.save()

            s.result = 'AC'
            s.save()
            return redirect('correct/')
        else:
            s.result = 'WA'
            s.save()
            return HttpResponse('You are wrong!')
    else:
        return HttpResponse("Something's wrong.")