コード例 #1
0
ファイル: admin.py プロジェクト: andsild/IDIOpen
def balloon_home(request, contest_pk=None):
    form = None
    contest = get_most_plausible_contest(contest_pk)
    if not contest:
        return HttpResponse("<h1>There are no contests in the database </h1>")

    if request.method == 'POST':
        form = BalloonSubmissionForm(request.POST)

        if form.is_valid():
            form.save()

    given_balloon, not_given_balloon, last_solved_submission \
            = _get_table_lists(contest)

    if last_solved_submission:
        last_solved_submission = last_solved_submission.pk

    context = {
        'contest': contest,
        'contests': Contest.objects.all(),
        'given_balloon': given_balloon,
        'not_given_balloon': not_given_balloon,
        'last_solved_submission': last_solved_submission,
    }

    return render(
        request,
        'balloon_home.html',
        context,
    )
コード例 #2
0
def judge_home(request, contest_pk=None):
    contest = get_most_plausible_contest(contest_pk)

    if not contest:  # if there are no contests
        return HttpResponse('<h1> There are no contests in the database </h1>')

    try:
        team_list = Team.objects.filter(contest=contest)
    except ObjectDoesNotExist:
        team_list = []

    prob_attempt_counts = get_attempt_count(contest)

    team_tr_row_info_onsite, team_tr_row_info_offsite = \
                                                get_team_assignments(team_list)

    statistics = Submission.objects.get_highscore(contest)
    judge_exclusive_highscore = []
    for score in statistics:
        # .......... lazy
        ts = score.total_score
        tt = score.total_time
        tosol = score.total_solved
        prostat = score.pro
        probList = score.problemList

        judge_view_score = TeamJudgeTrRow(score.team, len(score.problemList))

        judge_view_score.total_score = ts
        judge_view_score.total_time = tt
        judge_view_score.total_solved = tosol
        judge_view_score.pro = prostat
        judge_view_score.problemList = probList

        judge_exclusive_highscore.append(judge_view_score)

    problems = Problem.objects.filter(contest=contest)

    context = {
        'contests': Contest.objects.all(),
        'contest': contest,
        'team_list': team_list,
        'team_tr_row_info_onsite': team_tr_row_info_onsite,
        'team_tr_row_info_offsite': team_tr_row_info_offsite,
        'prob_attempt_counts': prob_attempt_counts,
        'highscore': judge_exclusive_highscore,
        'problems': problems,
    }

    return render(
        request,
        'judge_home.html',
        context,
    )
コード例 #3
0
ファイル: views.py プロジェクト: andsild/IDIOpen
def latex_view(request, contest_pk=None):
    contest = get_most_plausible_contest(contest_pk)
    if not contest:
        return HttpResponse("<h1> No contest </h1>")
    teams = Team.objects.filter(contest=contest, onsite='True')
    context = {
        'teams': teams,
        'contests': Contest.objects.all(),
        'contest': contest,
    }

    return render(request, 'latex_home.html', context)
コード例 #4
0
    def get_queryset(self, request):
        """
        Returns a QuerySet of all model instances that can be edited by the
        admin site. This is used by changelist_view.
        """
        contest = re.search(r'\d{1,3}$', request.path)
        if contest:
            contest = Contest.objects.get(pk=str(contest.group()))
        else:
            contest = get_most_plausible_contest(contest)
            if not contest:
                return HttpResponse("<h1> No contests in system </h1>")

        # qs = self.model._default_manager.get_queryset()
        qs = self.model._default_manager.filter(contest=contest)
        ordering = self.get_ordering(request)
        if ordering:
            qs = qs.order_by(*ordering)
        return qs
コード例 #5
0
    def changelist_view(self, request, extra_context=None, contest_pk=None):
        """
        The 'change list' admin view for this model.
        """
        contest = re.search(r'\d{1,3}$', request.path)
        if contest:
            contest = Contest.objects.get(pk=int(contest.group()))
        else:
            contest = get_most_plausible_contest(contest_pk)
            if not contest:
                return HttpResponse("<h1> No contests in system </h1>")

        semicolon_list = None
        latex_compile_stdout = None
        if request.method == "POST":
            selected = request.POST['teams'].split(',')

            if not selected or len(selected) < 1 or selected[0] == '':
                messages.error(request, "No team selected")
            else:
                if "buttonId" in request.POST:
                    if request.POST["buttonId"] == "emailCSV":
                        try:
                            # Response = email_view(selected)
                            semicolon_list = render_semicolonlist(selected)
                        except ValueError as ve:
                            messages.error(request, str(ve))
                        except KeyError as ke:
                            messages.error(request, str(ke))

                    elif request.POST["buttonId"] == "teamCSV_onePDF" \
                    or request.POST["buttonId"] == "teamCSV_manyPDF":
                        try:
                            response = process_team_contestants(
                                    request.POST['text'], selected,
                                    request.POST['buttonId'], contest)
                            return response
                        except ValueError as ve:
                            messages.error(request, "Invalid formatting," +
                                "ensure all given variables are on the form " +
                                "///VARIABLE")
                            messages.error(request,
                                           "(Error message: " + str(ve) + " )")
                        except KeyError as ke:
                            messages.error(request, "No match for %s" % str(ke))
                        except OSError:
                            messages.error(request,
                            "Please verify that you have %s and %s installed" \
                                    % ("xelatex", "pdfunite"))
                        except IOError as ioe:
                            logfile = glob('/tmp/teams/*.log')
                            messages.error(request,
                                    "xelatex failed to compile")
                            for log in logfile:
                                latex_compile_stdout = ""
                                with open(log, 'r') as f:
                                    for line in f:
                                        latex_compile_stdout += line + '\n'
                                        # if line.startswith('!'):
                                        #     messages.error(request, line)

        self.model = Team
        opts = self.model._meta
        #app_label = opts.app_label

        list_display = ('name', 'onsite', 'contest', 'leader', 'offsite',)
        list_display_links = self.get_list_display_links(request, list_display)
        list_filter = ('onsite', 'contest',)
        actions = self.get_actions(request)
        search_fields = ['id', 'name']

        if actions:
            # Add the action checkboxes if there are any actions available.
            list_display = ['action_checkbox'] + list(list_display)

        self.search_fields = search_fields
        ChangeList = self.get_changelist(request)
        cl = ChangeList
        try:
            cl = ChangeList(request, self.model, list_display,
                list_display_links, list_filter, self.date_hierarchy,
                self.search_fields, self.list_select_related,
                self.list_per_page, self.list_max_show_all, self.list_editable,
                self)
        except IncorrectLookupParameters:
            if ERROR_FLAG in request.GET.keys():
                return SimpleTemplateResponse('admin/invalid_setup.html', {
                    'title': _('Database error'),
                })
            return HttpResponseRedirect(request.path + '?' + ERROR_FLAG + '=1')

        selected = request.POST.getlist(helpers.ACTION_CHECKBOX_NAME)

        formset = cl.formset = None

        # Handle GET -- construct a formset for display.
        if cl.list_editable:
            FormSet = self.get_changelist_formset(request)
            formset = cl.formset = FormSet(queryset=cl.result_list)


        # Build the list of media to be used by the formset.
        if formset:
            media = self.media + formset.media
        else:
            media = self.media

        # Build the action form and populate it with available actions.
        if actions:
            action_form = self.action_form(auto_id=None)
            action_form.fields['action'].choices = \
                                    self.get_action_choices(request)
        else:
            action_form = None

        selection_note_all = ungettext('%(total_count)s selected',
            'All %(total_count)s selected', cl.result_count)


        context = {
            'module_name': force_text(opts.verbose_name_plural),
            'selection_note': _('0 of %(cnt)s selected')
                                % {'cnt': len(cl.result_list)},
            'selection_note_all': selection_note_all
                                    % {'total_count': cl.result_count},
            'selection_counter': selection_note_all
                                    % {'total_count': cl.result_count},
            'title': 'Select teams to render email-line or latex-rendition',
            'is_popup': cl.is_popup,
            'cl': cl,
            'media': media,
            'has_add_permission': self.has_add_permission(request),
            'opts': cl.opts,
            # 'app_label': app_label,
            'app_label': 'Render your information here',
            'action_form': action_form,
            # 'actions_on_top': self.actions_on_top,
            'actions_on_top': None,
            # 'actions_on_bottom': self.actions_on_bottom,
            'actions_on_bottom': None,
            'actions_selection_counter': self.actions_selection_counter,
            'preserved_filters': self.get_preserved_filters(request),
            'semicolon_list' : semicolon_list,
            'contests': Contest.objects.all(),
            'contest': contest,
            'latex_compile_stdout' : latex_compile_stdout,
            }
        context.update(extra_context or {})

        return render(request, 'latex_home.html', context)