def Submit(problemid,req,contest_id=0): if not modules.Is_Loggedin(): flash('请先登录','error') return modules.Page_Back() code = req['code'] if len(code) < 10: flash('这么短真的没问题?','error') return modules.Page_Back() username = request.cookies['username'] last_submit_time = modules.Get_Session('last_submit_time',username) now_time = datetime.datetime.now() if last_submit_time != None: seconds = (now_time-last_submit_time).seconds if seconds < submit_delay_time: flash('请在 %ss 后提交'%(submit_delay_time-seconds),'error') return modules.Page_Back() modules.Set_Session('last_submit_time',username,now_time) maxid_result = db.Fetchone("SELECT MAX(id) FROM records;")[0] runid = 1 if maxid_result == None else int(maxid_result) + 1 nowtime = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') db.Execute("INSERT INTO records VALUES(%s,%s,%s,%s,0,0,'','{\"subtasks\":[]}',0,0,'',%s,%s,%s);",(runid,problemid,code,'cpp',username,contest_id,nowtime)) r=redis.Redis(host='localhost',port=6379,decode_responses=True) r.rpush('intoj-waiting',str(runid)) return redirect('/record/%d'%runid)
def Submissions_My(contest_id): try: page = int(request.args['page']) except: page = 1 if not modules.Is_Loggedin(): flash(r'请先登录', 'error') return modules.Page_Back() contest = db.Read_Contest(contest_id) if contest == None: flash(r'不存在的比赛', 'error') return modules.Page_Back() limitations = request.args.to_dict() limitations['contest_id'] = contest_id limitations['username'] = modules.Current_User() submissions = db.Read_Submissions(limitations) status_show, total_page = modules.Page_Split(submissions, page, status_per_page, lambda status: True) return render_template('status.html', statuslist=status_show, total_page=total_page, current_page=page, contest=contest, contest_id=contest_id, my=True)
def Get(id): record = db.Read_Record(id) if record == None: flash(r'### 提交记录R%d没找着! \n 可能是因为编号不对.' % id, 'error') return redirect('/status') if record[12]: end_time = datetime.datetime.strptime( db.Read_Contest(record[12])[4], '%Y-%m-%d %H:%M:%S') now_time = datetime.datetime.now() if now_time < end_time: if request.cookies['username'] != record[ 11] and not modules.Current_User_Privilege(3): flash(r'这是比赛时的提交, 您无权查看', 'error') return modules.Page_Back() elif not db.Read_Problem( record[1])[9] and not modules.Current_User_Privilege( 2) and record[11] != modules.Current_User(): flash(r'该题目尚未公开, 您无权查看', 'error') return modules.Page_Back() result = json.loads(record[7]) subtasks = result['subtasks'] contest = db.Read_Contest(record[12]) if record[12] else None return render_template('record.html', record=record, subtasks=subtasks, contest=contest)
def Contestadd(req): id = 1 count = int(db.Fetchone('SELECT COUNT(*) FROM contests')[0]) if count > 0: id = int(db.Fetchone('SELECT MAX(id) FROM contests')[0]) + 1 req_problems = req['problems'].split(',') problems = [] for problem in req_problems: if db.Read_Problem(problem) == None: flash(r'题目#%s不存在' % problem, 'error') return modules.Page_Back() problems.append({'id': int(problem)}) try: begin_time = datetime.datetime.strptime(req['begin_time'], date_format) end_time = datetime.datetime.strptime(req['end_time'], date_format) except: flash(r'日期格式不对. 应为 yyyy-mm-dd HH:MM:SS', 'error') return modules.Page_Back() db.Execute('INSERT INTO contests VALUES(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)', (id, req['title'], req['subtitle'], req['begin_time'], req['end_time'], req['description'], '{"type":"oi-intoj"}', request.cookies['username'], json.dumps(problems), '')) flash('添加成功', 'ok') return redirect('/contest/%d' % id)
def Run(origin_id): if not modules.Current_User_Privilege(2): flash(r'无此权限', 'error') return modules.Page_Back() problem = db.Read_Problem(origin_id) if problem == None: flash(r'### 题目 P%d 没找着! \n 可能是因为编号不对.' % origin_id, 'error') return modules.Page_Back() if request.method == 'GET': return render_template("problemedit.html", problem=problem) else: return Change(origin_id, request.form)
def Run(problem_id): problem = db.Read_Problem(problem_id) if problem == None: flash(r'### 题目 P%d 没找着! \n 可能是因为编号不对.' % problem_id, 'error') return modules.Page_Back() if not problem[9] and not modules.Current_User_Privilege(2): flash(r'无此权限', 'error') return modules.Page_Back() if request.method == 'GET': return render_template('problem.html', problem=problem) else: return newsubmit.Submit(problem_id, request.form)
def Is_Exist(contest_id, problem_id): contest = db.Read_Contest(contest_id) if contest == None: flash('不存在的比赛', 'error') return 0, modules.Page_Back() begin_time = datetime.datetime.strptime(contest[3], '%Y-%m-%d %H:%M:%S') if begin_time > datetime.datetime.now(): flash('比赛还未开始', 'error') return 0, modules.Page_Back() problem = db.Read_Problem(problem_id) if problem == None: flash('题目 P%d 没找着!' % problem_id, 'error') return 0, modules.Page_Back() return 1, (problem, contest)
def Submissions_All(contest_id): try: page = int(request.args['page']) except: page = 1 contest = db.Read_Contest(contest_id) if contest == None: flash(r'不存在的比赛', 'error') return modules.Page_Back() limitations = request.args.to_dict() limitations['contest_id'] = contest_id submissions = db.Read_Submissions(limitations) status_show, total_page = modules.Page_Split(submissions, page, status_per_page, lambda status: True) return render_template('status.html', statuslist=status_show, total_page=total_page, current_page=page, contest=contest, contest_id=contest_id, my=False)
def Run(username): user = db.Read_User_Byname(username) if user == None: flash('用户 %s 不存在' % username, 'error') return modules.Page_Back() status_cnt = User_Statistic(username) return render_template('userhome.html', user=user, status_cnt=status_cnt)
def Run(record_id): if request.method == 'GET': return Get(record_id) else: if not modules.Current_User_Privilege(2): flash(r'无此权限', 'error') return modules.Page_Back() return newsubmit.Rejudge(record_id)
def Run(username): if username != request.cookies.get( 'username') and not modules.Current_User_Privilege( 'is_user_manager'): flash(r'没有权限', 'error') return modules.Page_Back() userdata = db.Read_User_Byname(username) if userdata == None: flash(r'用户 %s 不存在' % username, 'error') return modules.Page_Back() if request.method == 'GET': return render_template('useredit.html', user=userdata) else: Useredit(username, request.form) flash('修改成功', 'ok') return redirect('/user/%s' % username)
def Run(): if not modules.Current_User_Privilege(2): flash(r'无此权限', 'error') return modules.Page_Back() if request.method == 'GET': return render_template("problemadd.html") else: return Submit(request.form)
def Run(username): user = db.Read_User_Byname(username) if user == None: flash('用户 %s 不存在'%username,'error') return modules.Page_Back() status_cnt = User_Statistic(username) zishengs = db.Read_Zisheng({'username':username}) return render_template('userhome.html',user=user,status_cnt=status_cnt,zishengs=zishengs,top=1000)
def Run(): if not modules.Current_User_Privilege(3): flash(r'无此权限', 'error') return modules.Page_Back() if request.method == 'GET': current_date = datetime.datetime.now().strftime(date_format) return render_template("contestadd.html", current_date=current_date) else: return Contestadd(request.form)
def Submit(contest_id, problem_id, req): is_exist, ret = Is_Exist(contest_id, problem_id) if not is_exist: return ret contest = ret[1] end_time = datetime.datetime.strptime(contest[4], '%Y-%m-%d %H:%M:%S') if end_time < datetime.datetime.now(): flash('比赛已经结束', 'error') return modules.Page_Back() return newsubmit.Submit(problem_id, req, contest_id)
def Run(id): contest = db.Read_Contest(id) if contest == None: flash('不存在的比赛', 'error') return modules.Page_Back() problem_list = json.loads(contest[8]) problems = [db.Read_Problem(problem['id']) for problem in problem_list] rule_name = json.loads(contest[6])['type'] return render_template('contest.html', contest=contest, problems=problems, rule_name=rule_name)
def Run(contest_id,problem_id): if not modules.Is_Loggedin(): flash('请先登录','error') return modules.Page_Back() is_exist,ret = Is_Exist(contest_id,problem_id) if not is_exist: return ret if request.method == 'GET': return render_template('contest_problem.html',problem=ret[0],contest=ret[1]) else: return Submit(contest_id,problem_id,request.form)
def Run(contest_id): contest = db.Read_Contest(contest_id) if contest == None: flash('不存在的比赛', 'error') return modules.Page_Back() problems = json.loads(contest[8]) problems = list(map(lambda x: db.Read_Problem(x['id']), problems)) # print(problems) problems.sort(key=lambda x: x[0]) ranklist = db.Read_Contest_Ranklist(contest_id) if ranklist == None: return render_template('contest_ranklist.html', contest=contest, ranklist=None) def Loadjson(x): x = list(x) if x[3] == '': x[3] = {'score': 0, 'submit_cnt': 0} return x x[3] = json.loads(x[3]) score = submit_cnt = 0 for problem_id_str, results in x[3].items(): problem_id = int(problem_id_str) score += results['score'] submit_cnt += results['submit_cnt'] x[3]['score'] = score x[3]['submit_cnt'] = submit_cnt return x ranklist = list(map(Loadjson, ranklist)) ranklist.sort(key=lambda x: (-x[3]['score'], x[3]['submit_cnt'])) length = len(ranklist) for i in range(length): if i != 0 and ranklist[i][3]['score'] == ranklist[ i - 1][3]['score'] and ranklist[i][3]['submit_cnt'] == ranklist[ i - 1][3]['submit_cnt']: ranklist[i][3]['rank'] = ranklist[i - 1][3]['rank'] else: ranklist[i][3]['rank'] = i + 1 return render_template('contest_ranklist.html', contest=contest, ranklist=ranklist, problems=problems, full_score=len(problems) * 100)
def Change(origin_id, req): id = req['id'] if req['id'] == '': id = origin_id else: if int(req['id']) < 0: flash(r'编号不可以为负', 'error') return modules.Page_Back() count = int( db.Fetchone('SELECT COUNT(*) FROM problems WHERE id=%s', req['id'])[0]) if count > 0: flash(r'题目编号 %s 已经有过了.' % req['id'], 'error') modules.Page_Back() is_public = 1 if req.get('is_public') == 'on' else 0 db.Execute( "UPDATE problems SET `id`=%s,`title`=%s,`description`=%s,`input_format`=%s,`output_format`=%s,\ `example`=%s,`limit_and_hint`=%s,`time_limit`=%s,`memory_limit`=%s,`is_public`=%s\ WHERE id=%s;", (id, req['title'], req['description'], req['input_format'], req['output_format'], req['example'], req['limit_and_hint'], req['time_limit'], req['memory_limit'], is_public, origin_id)) return redirect('/problem/%s' % id)
def Run(problem_id): if not modules.Current_User_Privilege(2): flash(r'无此权限','error') return modules.Page_Back() db.Execute("DELETE FROM problems WHERE id=%s",problem_id) return redirect('/problemlist')