def list_submissions(): team = get_team() cur_time = datetime.datetime.now() submissions = Submission.query.filter_by(team=team.name).filter(Submission.submitted <= cur_time).order_by(Submission.submitted).all() def format_verdict_classes(points): if points >= 0: return 'success' else: return 'danger' return '' return render_template('submissions.html', submissions=reversed(submissions), format_verdict_classes=format_verdict_classes, )
def view_scoreboard(opts): phase = app.contest.get_current_phase() if not phase.scoreboard_problems: abort(404) opts = {s.split('=', 1)[0]: (s.split('=', 1)[1] if '=' in s else True) for s in opts.split(',')} opts['groups'] = set(opts.get('groups', '+'.join(app.contest.groups.keys())).split('+')) cur_time = datetime.datetime.now() subs = Submission.query.filter(Submission.submitted <= cur_time).filter(Submission.problem.in_(phase.scoreboard_problems)).order_by(Submission.submitted).all() sb = {team: {problem: ScoreboardTeamProblem() for problem in phase.scoreboard_problems} for team, v in app.contest.teams.items() if len(v.groups & opts['groups']) > 0} for sub in subs: if sub.problem not in phase.scoreboard_problems: continue if sub.team not in sb: continue cur = sb[sub.team][sub.problem] if (phase.frozen is not None and \ sub.submitted >= app.contest.second_format(60.0 * phase.frozen) and \ (not is_logged_in() or get_team().name != sub.team)): cur.submit_new() else: cur.submit((sub.submitted - app.contest.start).total_seconds(), sub.score, sub.points) ssb = sorted((-sum(sb[team][problem].points() for problem in phase.scoreboard_problems), sum(sb[team][problem].time_penalty() for problem in phase.scoreboard_problems), team) for team in sb.keys()) sb = [(s[2], -s[0], s[1], sb[s[2]]) for s in ssb] if opts.get('full', False): return render_template('scoreboard_full.html', scoreboard=sb) else: return render_template('scoreboard.html', scoreboard=sb)
def home(): team = util.get_team() venue = util.get_venue() return render_template("home.html", team=team, venue=venue)
def view_problem(problem_id, sub_id): problem = app.contest.problems.get(problem_id) phase = app.contest.get_current_phase() team = get_team() sub = None if not problem: abort(404) if request.method == 'POST': if problem_id not in phase.submit_problems: abort(404) if not is_logged_in(): return redirect(url_for('default.login', next=request.path)) if ('answer_file' in request.files or 'answer' in request.form): if 'answer_file' in request.files: answer = request.files['answer_file'].read() try: answer = answer.decode('utf-8') except UnicodeDecodeError: answer = text.bytes2unicode(answer) if 'answer_file' not in request.files or not answer: answer = request.form['answer'] score, response = problem.score(answer) sub = Submission( team=team.name, problem=problem_id, answer=answer, submitted=datetime.datetime.now(), score=score, points=int(round((score/100) * problem.points)), judge_response=response ) app.db.session.add(sub) app.db.session.flush() app.db.session.commit() else: abort(400) # return redirect(url_for('default.list_submissions')) if problem_id not in phase.visible_problems: abort(404) if sub_id is not None: team = get_team() sub = Submission.query.filter_by(id=sub_id).first() if not sub or sub.team != team.name: abort(404) if team: max_sub = Submission.query.filter_by(problem=problem_id, team=team.name).order_by(Submission.points.desc(), Submission.submitted.desc()).first() else: max_sub = None if max_sub is not None and sub is not None and max_sub.id == sub.id: sub = None return render_template('problem.html', problem=problem, sub=sub, max_sub=max_sub)
def view_submission(sub_id): team = get_team() sub = Submission.query.filter_by(id=sub_id).first() if not sub or sub.team != team.name: abort(404) return render_template('submission.html', submission=sub)