def problem_in_lesson(request, lesson_name, problem_name): course = Course.objects.get(urlname=DEFAULT_COURSE) lesson_db = Lesson.objects.get(urlname=lesson_name) lessons = course.lessonincourse_set.all() lesson = load_lesson(lesson_db) lesson_in_course = lesson_db.lessonincourse_set.get(course=course) problems = get_sorted_problems(lesson=lesson_db) for problem in problems: if request.user.is_authenticated(): statuses = [submission.get_status_display() for submission in Submission.objects.filter(user=request.user, problem=problem['db_object'])] else: statuses = [] if 'ok' in statuses: problem['status'] = 'solved' elif 'accepted' in statuses: problem['status'] = 'accepted' elif 'error' in statuses: problem['status'] = 'unsolved' else: problem['status'] = '' problem_db = Problem.objects.get(urlname=problem_name) problem = load_problem(problem_db) saved_code = get_best_saved_code(request.user, problem_name) tests_examples = [] for test_input, test_output in zip(problem['tests'], problem['answers']): tests_examples.append({'input': test_input, 'output': test_output}) return render(request, 'problem.html', locals())
def render(self, context): problem_urlname = context[self.problem_ref]['urlname'] problem = load_problem(Problem.objects.get(urlname=problem_urlname)) user = context['request'].user if not user.is_authenticated(): return '' user_solution = Submission.objects.filter( user=user, problem=problem['db_object'], status=1).order_by('time').first() if user_solution is None: return '' ideal_solution = Submission.objects.filter( user=ideal_user, problem=problem['db_object'], status=1).order_by('-time').first() if user_solution is not None: return ''' <table class="table problem_user_and_ideal_solutions hidden-xs hidden-md"> <thead> <tr> <th>Ваше решение</td> <th>Эталонное решение</td> </tr> </thead> <tbody> <tr> <td> {user_solution} </td> <td> {ideal_solution} </td> </tr> </tfoot> </table>'''.format( **{ 'user_solution': _render_code_to_html(code=user_solution.code, context=context, executable=False), 'ideal_solution': _render_code_to_html(code=ideal_solution.code, context=context, executable=False), }) else: return ''
def render(self, context): problem_urlname = context[self.problem_ref]['urlname'] problem = load_problem(Problem.objects.get(urlname=problem_urlname)) user = context['request'].user if user.is_authenticated(): statuses = [submission.get_status_display() for submission in Submission.objects.filter(user=user, problem=problem['db_object'])] else: statuses = [] if 'ok' in statuses: css_class = 'okProblemLink' elif 'error' in statuses: css_class = 'errorProblemLink' else: css_class = 'unsubmittedProblemLink' return '<span class="{0}">{1}</span>'.format(css_class, problem['name'])
def tester_submit(request): post = request.POST if 'user_code' not in post or 'problem' not in post: return HttpResponseBadRequest() problem_db = Problem.objects.get(urlname=post['problem']) if problem_db is None: return HttpResponseNotFound() problem = load_problem(problem_db) result = { 'status': 'ok', 'tests': [], } test_id = 0 for test_input, test_answer in zip(problem['tests'], problem['answers']): test_result = run_test(post['user_code'], test_input, test_answer) test_status = test_result.verdict_status() if test_status != 'ok' and result['status'] == 'ok': result['status'] = 'error' result['fail_test'] = test_id result['tests'].append(test_status) test_id += 1 if request.user.get_profile().course and request.user.get_profile( ).course.get_ok_ac_policy_display() == 'use_accepted_instead_of_ok': if result['status'] == 'ok': status = 'accepted' submission = Submission( problem=problem_db, code=post['user_code'], user=request.user, status={v: k for k, v in Submission.STATUS_CHOICES}[result['status']]) submission.save() return HttpResponse(dumps(result), content_type='application/json')
def render(self, context): problem_urlname = context[self.problem_ref]['urlname'] problem = load_problem(Problem.objects.get(urlname=problem_urlname)) user = context['request'].user if not user.is_authenticated(): return '' user_solution = Submission.objects.filter(user=user, problem=problem['db_object'], status=1).order_by('time').first() if user_solution is None: return '' ideal_solution = Submission.objects.filter(user=ideal_user, problem=problem['db_object'], status=1).order_by('-time').first() if user_solution is not None: return ''' <table class="table problem_user_and_ideal_solutions hidden-xs hidden-md"> <thead> <tr> <th>Ваше решение</td> <th>Эталонное решение</td> </tr> </thead> <tbody> <tr> <td> {user_solution} </td> <td> {ideal_solution} </td> </tr> </tfoot> </table>'''.format(**{ 'user_solution': _render_code_to_html(code = user_solution.code, context = context, executable = False), 'ideal_solution': _render_code_to_html(code = ideal_solution.code, context=context, executable=False), }) else: return ''
def tester_submit(request): post = request.POST if 'user_code' not in post or 'problem' not in post: return HttpResponseBadRequest() problem_db = Problem.objects.get(urlname=post['problem']) if problem_db is None: return HttpResponseNotFound() problem = load_problem(problem_db) result = { 'status': 'ok', 'tests': [], } test_id = 0 for test_input, test_answer in zip(problem['tests'], problem['answers']): test_result = run_test(post['user_code'], test_input, test_answer) test_status = test_result.verdict_status() if test_status != 'ok' and result['status'] == 'ok': result['status'] = 'error' result['fail_test'] = test_id result['tests'].append(test_status) test_id += 1 if request.user.get_profile().course and request.user.get_profile().course.get_ok_ac_policy_display() == 'use_accepted_instead_of_ok': if result['status'] == 'ok': status = 'accepted' submission = Submission( problem = problem_db, code = post['user_code'], user = request.user, status = {v: k for k, v in Submission.STATUS_CHOICES}[result['status']] ) submission.save() return HttpResponse(dumps(result), content_type='application/json')
def render(self, context): problem_urlname = context[self.problem_ref]['urlname'] problem = load_problem(Problem.objects.get(urlname=problem_urlname)) user = context['request'].user if user.is_authenticated(): statuses = [ submission.get_status_display() for submission in Submission.objects.filter( user=user, problem=problem['db_object']) ] else: statuses = [] if 'ok' in statuses: css_class = 'okProblemLink' elif 'error' in statuses: css_class = 'errorProblemLink' else: css_class = 'unsubmittedProblemLink' return '<span class="{0}">{1}</span>'.format(css_class, problem['name'])
def problem_in_lesson(request, lesson_name, problem_name): course = Course.objects.get(urlname=DEFAULT_COURSE) lesson_db = Lesson.objects.get(urlname=lesson_name) lessons = course.lessonincourse_set.all() lesson = load_lesson(lesson_db) lesson_in_course = lesson_db.lessonincourse_set.get(course=course) problems = get_sorted_problems(lesson=lesson_db) for problem in problems: if request.user.is_authenticated(): statuses = [ submission.get_status_display() for submission in Submission.objects.filter( user=request.user, problem=problem['db_object']) ] else: statuses = [] if 'ok' in statuses: problem['status'] = 'solved' elif 'accepted' in statuses: problem['status'] = 'accepted' elif 'error' in statuses: problem['status'] = 'unsolved' else: problem['status'] = '' problem_db = Problem.objects.get(urlname=problem_name) problem = load_problem(problem_db) saved_code = get_best_saved_code(request.user, problem_name) tests_examples = [] for test_input, test_output in zip(problem['tests'], problem['answers']): tests_examples.append({'input': test_input, 'output': test_output}) return render(request, 'problem.html', locals())