def generalSubmissionList(request, page_id='1'): """ @view: list general submission """ try: page_id = int(page_id) u = User.getSessionUser(request.session) if not u: raise Err( request, err='not login') # fake if u.priv == 'university': has_priv = True else: has_priv = False user = u if not has_priv else None lang_list = [('gcc','GNU C'), ('g++','GNU C++'), ('java','java')] form = generalListForm( lang_list, request.GET) if form.is_valid(): if form.cleaned_data['problem_id']: try: p = Problem.getById( form.cleaned_data['problem_id']) except: raise Err( request, err='request err', log_format=( 'form invalid', 'problem_id error'), user_format=( u'输入的内容不合法', u'没有这道题!') ) else: p = None else: raise Err( request, err='example err', log_format=( 'form invalid', ''), user_format=( u'输入的内容不合法', '') ) g_subs = GeneralSubmission.generalSubmissionList( u=user, p=p, uname=form.cleaned_data['username'], language=form.cleaned_data['language'], status_selected=form.cleaned_data['status'], university=u.university) if 'rejudge' in request.GET: if has_priv: map( lambda x: GeneralSubmission.rejudgeGeneralSubmission( x), g_subs) else: raise Err( request, err = 'no priv') paginator = Paginator( g_subs, Const.STATUS_PER_PAGE) page_id = min(max(int(page_id), 1), paginator.num_pages) g_s = paginator.page(page_id) for g_s_index in g_s: g_s_index.status_color = Const.STATUS_COLOR[g_s_index.status] if g_s_index.status in Const.STATUS_COLOR else '' g_s_index.status_cn = Const.STATUS_CN[ g_s_index.status] return render(request, 'newtpl/submission/general/status.html', {'general_list': g_s, 'form':form, 'tpl':{'can_manage': True if has_priv else False}}) except Exception as e: return render(request, Err.ERROR_PAGE, { 'errmsg': unicode(e) } )
def showProblemStatistics(request, pid=None): logger.info(str(request).replace("\n", "\t")) """ view used to show statistics of a problem """ try: u = User.getSessionUser(request.session) if not u: raise Err(request, err='not login') pid = int(pid) if pid else '' try: problem = Problem.getById(pid) except: raise Err( request, err='no problem', log_format=('{0}'.format(pid), ''), user_format=(u'{0}'.format(pid), u'搞错了什么吧!'), ) # if not problem.contest.course_class.canBeManaged( u): # raise Err( request, err = 'no priv') all_submissions = GeneralSubmission.generalSubmissionList(p=problem) submissions = all_submissions.filter( status='Accepted').order_by('run_time')[:20] status_list = [] for i in Const.STATUS_CN.iterkeys(): status_list.append({ 'name': Const.STATUS_CN[i], 'number': all_submissions.filter(status=i).count() }) for sub_s in submissions: sub_s.status_color = Const.STATUS_COLOR[ sub_s.status] if sub_s.status in Const.STATUS_COLOR else '' sub_s.status_cn = Const.STATUS_CN[sub_s.status] # need modification return render( request, 'newtpl/statistic/problem.html', { 'submissions': submissions, 'problem': problem, 'status_list': status_list, 'tpl': { 'sp': True } }) except Exception as e: logger.error(str(e).replace("\n", "\t")) return render(request, Err.ERROR_PAGE, {'errmsg': unicode(e)})
def showProblemStatistics( request, pid=None ): logger.info(str(request).replace("\n","\t")) """ view used to show statistics of a problem """ try: u = User.getSessionUser(request.session) if not u: raise Err( request, err='not login') pid = int( pid) if pid else '' try: problem = Problem.getById( pid) except: raise Err( request, err='no problem', log_format=( '{0}'.format( pid), ''), user_format=( u'{0}'.format( pid), u'搞错了什么吧!'), ) # if not problem.contest.course_class.canBeManaged( u): # raise Err( request, err = 'no priv') all_submissions = GeneralSubmission.generalSubmissionList( p=problem ) submissions = all_submissions.filter( status='Accepted').order_by('run_time')[:20] status_list = [] for i in Const.STATUS_CN.iterkeys(): status_list.append( { 'name': Const.STATUS_CN[i], 'number': all_submissions.filter( status=i).count()} ) for sub_s in submissions: sub_s.status_color = Const.STATUS_COLOR[sub_s.status] if sub_s.status in Const.STATUS_COLOR else '' sub_s.status_cn = Const.STATUS_CN[ sub_s.status] # need modification return render( request, 'newtpl/statistic/problem.html', { 'submissions': submissions, 'problem': problem, 'status_list': status_list, 'tpl': { 'sp': True } }) except Exception as e: logger.error(str(e).replace("\n","\t")) return render(request, Err.ERROR_PAGE, { 'errmsg': unicode(e) } )
def generalSubmissionList(request, page_id='1'): """ @view: list general submission """ try: page_id = int(page_id) u = User.getSessionUser(request.session) if not u: raise Err(request, err='not login') # fake if u.priv == 'university': has_priv = True else: has_priv = False user = u if not has_priv else None lang_list = [('gcc', 'GNU C'), ('g++', 'GNU C++'), ('java', 'java')] form = generalListForm(lang_list, request.GET) if form.is_valid(): if form.cleaned_data['problem_id']: try: p = Problem.getById(form.cleaned_data['problem_id']) except: raise Err(request, err='request err', log_format=('form invalid', 'problem_id error'), user_format=(u'输入的内容不合法', u'没有这道题!')) else: p = None else: raise Err(request, err='example err', log_format=('form invalid', ''), user_format=(u'输入的内容不合法', '')) g_subs = GeneralSubmission.generalSubmissionList( u=user, p=p, uname=form.cleaned_data['username'], language=form.cleaned_data['language'], status_selected=form.cleaned_data['status'], university=u.university) if 'rejudge' in request.GET: if has_priv: map(lambda x: GeneralSubmission.rejudgeGeneralSubmission(x), g_subs) else: raise Err(request, err='no priv') paginator = Paginator(g_subs, Const.STATUS_PER_PAGE) page_id = min(max(int(page_id), 1), paginator.num_pages) g_s = paginator.page(page_id) for g_s_index in g_s: g_s_index.status_color = Const.STATUS_COLOR[ g_s_index. status] if g_s_index.status in Const.STATUS_COLOR else '' g_s_index.status_cn = Const.STATUS_CN[g_s_index.status] return render( request, 'newtpl/submission/general/status.html', { 'general_list': g_s, 'form': form, 'tpl': { 'can_manage': True if has_priv else False } }) except Exception as e: return render(request, Err.ERROR_PAGE, {'errmsg': unicode(e)})