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, )
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, )
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)
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
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)