def get_language_hints_view(request): pi_ids = request.GET.getlist(u'pi_ids[]') filename = request.GET.get(u'filename', u'') pis = ProblemInstance.objects.filter(id__in=pi_ids) extension = get_extension(filename) lang_dict = {pi: get_language_by_extension(pi, extension) for pi in pis} if contest_exists(request): submittable_pis = submittable_problem_instances(request) lang_dict = { pi: lang for (pi, lang) in lang_dict.items() if pi in submittable_pis } else: problemsite_key = request.GET.get(u'problemsite_key', u'') lang_dict = { pi: lang for (pi, lang) in lang_dict.items() if pi.problem.problemsite.url_key == problemsite_key } langs = getattr(settings, 'SUBMITTABLE_LANGUAGES', {}) lang_display_dict = { pi.id: langs.get(lang, {'display_name': ''})['display_name'] for (pi, lang) in lang_dict.items() } return lang_display_dict
def __init__(self, request, *args, **kwargs): self.kind = kwargs.pop('kind', self.get_default_kind(request)) problem_filter = kwargs.pop('problem_filter', None) self.request = request # taking the available problems pis = submittable_problem_instances(request) if problem_filter: pis = problem_filter(pis) pi_choices = [(pi.id, unicode(pi)) for pi in pis] # init form with previously sent data forms.Form.__init__(self, *args, **kwargs) # set available problems in form pi_field = self.fields['problem_instance_id'] pi_field.widget.attrs['class'] = 'input-xlarge' if len(pi_choices) > 1: pi_field.choices = [('', '')] + pi_choices else: pi_field.choices = pi_choices # adding additional fields, etc request.contest.controller.adjust_submission_form(request, self)
def __init__(self, request, *args, **kwargs): self.kind = kwargs.pop('kind', self.get_default_kind(request)) problem_filter = kwargs.pop('problem_filter', None) forms.Form.__init__(self, *args, **kwargs) self.request = request pis = submittable_problem_instances(request) if problem_filter: pis = problem_filter(pis) pi_choices = [(pi.id, unicode(pi)) for pi in pis] pi_field = self.fields['problem_instance_id'] pi_field.choices = pi_choices pi_field.widget.attrs['class'] = 'input-xlarge' request.contest.controller.adjust_submission_form(request, self)
def get_problem_instances(self): return submittable_problem_instances(self.request)
def testrun_problem_instances(request): """Returns submittable problem_instances with test run enabled.""" return filter_testrun_problem_instances( submittable_problem_instances(request))