コード例 #1
0
ファイル: problem.py プロジェクト: Alleks/pythontutor-ru
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())
コード例 #2
0
    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 ''
コード例 #3
0
ファイル: lesson.py プロジェクト: Alleks/pythontutor-ru
 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'])
コード例 #4
0
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')
コード例 #5
0
ファイル: lesson.py プロジェクト: Alleks/pythontutor-ru
    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 ''
コード例 #6
0
ファイル: tester.py プロジェクト: Alleks/pythontutor-ru
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')
コード例 #7
0
 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'])
コード例 #8
0
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())