def rejudgeSubmission( request, sid): logger.info(str(request).replace("\n\r","\t")) """ rejudge the very submission with the specific sid """ try: sid = int( sid) u = User.getSessionUser( request.session) if not u: raise Err( request, err='not login') try: s = Submission.getById( sid) except: raise Err( request, err='no submission', log_format=( '{0}'.format( sid), ''), user_format=( u'{0}'.format( sid), u'不要搞笑!!'), ) if not s.problem_index.contest.course_class.canBeManaged( u): raise Err( request, err = 'no priv') Submission.rejudgeSubmission( s) return redirect( 'Submission:contest_status', contest_id=s.problem_index.contest.cid) except Exception as e: logger.error(str(e).replace("\n\r","\t")) return render( request, Const.NEW_ERROR_PAGE, { 'errmsg': unicode(e), }, )
def submissionList(request, contest_id=None, page_id='1'): logger.info(str(request).replace("\n\r", "\t")) """ @view: list submission of some contest """ try: page_id = int(page_id) u = User.getSessionUser(request.session) if not u: raise Err(request, err='not login') cid = int(contest_id) try: c = Contest.getById(cid) except: raise Err( request, err='no contest', log_format=('{0}'.format(cid), ''), user_format=(u'{0}'.format(cid), u'别做坏事!'), ) c.course_class_name = unicode(c.course_class.getFullName()) c.description = unicode(c.contest_description) c.title = unicode(c.contest_title) now = datetime.now() if c.start_time + timedelta(minutes=c.length) < now: c.status = 'ended' elif c.start_time > now: c.status = 'scheduled' else: c.status = 'running' c.time_passed = min( max(int((now - c.start_time).total_seconds()) / 60, 0), c.length) c.time_passed_percent = 100 * c.time_passed / c.length c.time_left = c.length - c.time_passed isManager = c.course_class.canBeManaged(u) user = u if not isManager else None # privilege for showing all submissions idxList = [(cp.problem_index, cp.problem_index) for cp in c.getContestProblem()] langList = [('gcc', 'GNU C'), ('g++', 'GNU C++'), ('java', 'java')] form = submissionListForm(idxList, langList, request.GET) if form.is_valid(): if form.cleaned_data['problem_index']: try: contestProb = ContestProblem.getBy( c, form.cleaned_data['problem_index']) except: contestProb = None # raise Exception(u'contest problem not found') else: contestProb = None else: raise Err(request, err='example err', log_format=('form invalid', ''), user_format=(u'输入的内容不合法', '')) #sub_all_c = getSUB() #submissions = bigfilter( u=user, c=c, cp=contestProb, uname=form.cleaned_data['username'], lang=form.cleaned_data['language'], sta=form.cleaned_data['status']) submissions = Submission.submissionList( u=user, c=c, cp=contestProb, uname=form.cleaned_data['username'], lang=form.cleaned_data['language'], sta=form.cleaned_data['status']) submissions = Submission.submissionList( u=user, c=c, cp=contestProb, uname=form.cleaned_data['username'], lang=form.cleaned_data['language'], sta=form.cleaned_data['status']) if isManager and 'rejudge' in request.GET and c.board_type != 2: map(lambda x: Submission.rejudgeSubmission(x), submissions) paginator = Paginator(submissions, Const.STATUS_PER_PAGE) page_id = min(max(int(page_id), 1), paginator.num_pages) s = paginator.page(page_id) for sub_s in s: 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] return render( request, 'newtpl/submission/status.html', { 'sList': s, 'form': form, 'c': c, 'tpl': { 'can_manage': True if isManager else False } }) #return render(request, 'newtpl/submission/status.html', {'sList':s, 'form':form, 'c':c}) except Exception as e: logger.error(str(e).replace("\n\r", "\t")) return render(request, Err.ERROR_PAGE, {'errmsg': unicode(e)})
def submissionList(request, contest_id=None, page_id='1'): logger.info(str(request).replace("\n\r","\t")) """ @view: list submission of some contest """ try: page_id = int(page_id) u = User.getSessionUser(request.session) if not u: raise Err( request, err='not login') cid = int(contest_id) try: c = Contest.getById(cid) except: raise Err( request, err='no contest', log_format=( '{0}'.format(cid), ''), user_format=( u'{0}'.format( cid), u'别做坏事!'), ) c.course_class_name = unicode(c.course_class.getFullName()) c.description = unicode(c.contest_description) c.title = unicode(c.contest_title) now = datetime.now() if c.start_time+timedelta(minutes=c.length) < now: c.status = 'ended' elif c.start_time > now: c.status = 'scheduled' else: c.status = 'running' c.time_passed = min(max(int((now-c.start_time).total_seconds())/60, 0), c.length) c.time_passed_percent = 100*c.time_passed/c.length c.time_left = c.length-c.time_passed isManager = c.course_class.canBeManaged(u) user = u if not isManager else None # privilege for showing all submissions idxList = [(cp.problem_index, cp.problem_index) for cp in c.getContestProblem()] langList = [('gcc','GNU C'), ('g++','GNU C++'), ('java','java')] form = submissionListForm(idxList, langList, request.GET) if form.is_valid(): if form.cleaned_data['problem_index']: try: contestProb = ContestProblem.getBy( c, form.cleaned_data['problem_index']) except: contestProb=None # raise Exception(u'contest problem not found') else: contestProb=None else: raise Err( request, err='example err', log_format=( 'form invalid', ''), user_format=( u'输入的内容不合法', '') ) submissions = Submission.submissionList( u=user, c=c, cp=contestProb, uname=form.cleaned_data['username'], lang=form.cleaned_data['language'], sta=form.cleaned_data['status']) if isManager and 'rejudge' in request.GET: map( lambda x: Submission.rejudgeSubmission( x), submissions) paginator = Paginator(submissions, Const.STATUS_PER_PAGE) page_id = min(max(int(page_id), 1), paginator.num_pages) s = paginator.page(page_id) for sub_s in s: 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] return render(request, 'newtpl/submission/status.html', {'sList':s, 'form':form, 'c':c, 'tpl':{'can_manage': True if isManager else False}}) except Exception as e: logger.error(str(e).replace("\n\r","\t")) return render(request, Err.ERROR_PAGE, { 'errmsg': unicode(e) } )