Example #1
0
    def __init__(self, prob: Problem, user: User):
        probpath = f"/problems/{prob.id}"

        btn = f"rejudgeAll('{prob.id}')" if user.isAdmin() else None

        title = prob.title
        if not user.isAdmin():
            # Compute problem status
            icon = ''
            result = ''
            for sub in Submission.all():
                if sub.problem != prob or sub.user != user or sub.status == Submission.STATUS_REVIEW:
                    continue

                if sub.user == user and "ok" == sub.result:
                    icon = "check"
                    break
                else:
                    icon = "times"

            if icon != '':
                result = f'<i class="fa fa-{icon}"></i> '

            title = result + title

        self.html = Card(title, prob.description, probpath, rejudge=btn)
Example #2
0
def get_user_subs_map(contest: Contest) -> dict:
    contest_prob_ids = [prob.id for prob in contest.problems]
    subs = {}
    for sub in Submission.all():
        if contest.start <= sub.timestamp <= contest.end and not sub.user.isAdmin() and sub.problem.id in contest_prob_ids:
            subs[sub.user.id] = subs.get(sub.user.id, [])
            subs[sub.user.id].append(sub)

    return subs
def generateLogReport(request):
    user = User.getCurrent(request)
    contest = Contest.getCurrent() or Contest.getPast()
    if not contest:
        return HttpResponse(
            Page(h1("&nbsp;"), h1("No Contest Available", cls="center")))
    elif contest.isScoreboardOff(user):
        return HttpResponse(
            Page(h1("&nbsp;"), h1("Scoreboard is off.", cls="center")))

    start = contest.start
    end = contest.end

    users = {}

    for sub in Submission.all():
        if start <= sub.timestamp <= end and not sub.user.isAdmin(
        ) and sub.result == "ok":
            username = User.get(sub.user.id).username
            problemName = Problem.get(sub.problem.id).title

            if username not in users.keys():
                users[username] = {}
            if problemName not in users[username].keys():
                users[username][problemName] = sub
            if sub.timestamp < users[username][problemName].timestamp:
                users[username][problemName] = sub

    correctSubmissions = []
    for user in users.keys():
        for problem in users[user].keys():
            correctSubmissions.append(
                (user, problem, users[user][problem].timestamp))

    correctSubmissions.sort(key=lambda entry: entry[2])

    tableRows = constructTableRows(correctSubmissions)

    return HttpResponse(
        Page(
            h2("Correct Submissions Log", cls="page-title"),
            h.table(
                h.thead(
                    h.tr(
                        h.th("Contestant Name"),
                        h.th("Problem title"),
                        h.th("Time"),
                    )), h.tbody(*tableRows))))
Example #4
0
    def __init__(self, contest):
        logger.warn(f"Submissions: {Submission.all()}")
        subs = sorted(filter(
            lambda sub: sub.user.type != "admin" and contest.start <= sub.
            timestamp <= contest.end, Submission.all()),
                      key=lambda s: s.timestamp)

        self.html = h.table(
            h.thead(
                h.tr(
                    h.th("Contestant"),
                    h.th("Problem"),
                    h.th("Id"),
                    h.th("Language"),
                    h.th("Result"),
                    h.th("Status"),
                    h.th("Checkout"),
                )),
            h.tbody(*map(lambda sub: SubmissionRow(sub), subs)),
            id="submissions")
Example #5
0
def rejudgeAll(request):
    """Ajax method: Rejudge all submissions for problem `id`"""

    user = User.getCurrent(request)
    ctime = time.time() * 1000
    id = request.POST["id"]

    subsToRejudge = [
        sub for sub in Submission.all() if sub.problem.id == id
        and sub.timestamp < ctime and sub.result != 'reject'
    ]
    if not Status.instance().startRejudge(id, subsToRejudge):
        return JsonResponse(
            "Another rejudge all is still progress. See System Status below to monitor progress.",
            safe=False)

    RejudgeThread(user, subsToRejudge).start()

    return JsonResponse(
        "Rejudge started. Click System Status below to monitor progress.",
        safe=False)
Example #6
0
 def __init__(self, x, cont):
     num, prob = x
     subs = filter(
         lambda sub: sub.problem == prob and cont.start <= sub.timestamp <=
         cont.end, Submission.all())
     self.html = div(*map(SubmissionCard, subs), id=f"tabs-{num}")