def login(): if not testsys.valid_teamname(request.form['team']): return render_template("error.html", text="Invalid team name") if not request.form['password']: return render_template("error.html", text="Non-empty password expected") state, answer = util.communicate( 'MSG', { 'Team': request.form['team'], 'Password': request.form['password'], 'ContestId': request.form.get('contestid', ''), 'AllMessages': 'Yes', 'DisableUnrequested': 1 }) if state == 'error': return answer answer = answer[0] session['team'] = request.form['team'] session['password'] = request.form['password'] session['contestid'] = answer.get('ContestId', '') session['team_name'] = answer.get('TeamName', '').decode('cp866') return util.redirector(url_for('index'), text="Thank you for logging in, {0}!".format( session['team']))
def login(): if not testsys.valid_teamname(request.form["team"]): return render_template("error.html", text="Invalid team name") if not request.form["password"]: return render_template("error.html", text="Non-empty password expected") state, answer = util.communicate( "MSG", { "Team": request.form["team"], "Password": request.form["password"], "ContestId": request.form.get("contestid", ""), "AllMessages": "Yes", "DisableUnrequested": 1, }, ) if state == "error": return answer answer = answer[0] session["team"] = request.form["team"] session["password"] = request.form["password"] session["contestid"] = answer.get("ContestId", "") session["team_name"] = answer.get("TeamName", "").decode("cp866") return util.redirector(url_for("index"), text="Thank you for logging in, {0}!".format(session["team"]))
def submits(channel): state, answer = util.communicate( channel, { 'Team': session['team'], 'Password': session['password'], 'ContestId': session['contestid'], 'DisableUnrequested': '1', 'AllSubm': request.args.get('all', 0), 'Command': 'AllSubmits' }) if state == 'error': return answer answer, id = answer submissions = [] feed, score, team, tl, ml = False, False, False, False, False for i in xrange(int(answer['Submits'])): res = { 'Problem': answer.get('SubmProb_' + str(i), ''), 'ID': answer.get('SubmID_' + str(i), ''), 'Time': answer.get('SubmTime_' + str(i), ''), 'Result': answer.get('SubmRes_' + str(i), ''), 'Test': answer.get('SubmTest_' + str(i), ''), 'CE': answer.get('SubmCE_' + str(i), '').decode('cp866'), 'Attempt': answer.get('SubmAtt_' + str(i), ''), 'Feedback': answer.get('SubmFeed_' + str(i), ''), 'Compiler': answer.get('SubmCompiler_' + str(i), ''), 'TokenUsed': answer.get('SubmTokenUsed_' + str(i), ''), 'Score': answer.get('SubmScore_' + str(i), ''), 'Team': answer.get('SubmTeam_' + str(i), '').decode('cp866'), 'TL': answer.get('SubmTL_' + str(i), ''), 'ML': answer.get('SubmML_' + str(i), '') } if res['Feedback']: feed = True if res['Score']: score = True if res['Team']: team = True if res['TL']: tl = True if res['ML']: ml = True submissions.append(res) if team: submissions.sort(key=lambda x: int(x['ID']), reverse=1) else: submissions.sort(key=lambda x: int(x['ID'])) return render_template("allsubmits.html", feed=feed, score=score, team=team, tl=tl, ml=ml, submissions=submissions)
def submits(channel): state, answer = util.communicate( channel, { "Team": session["team"], "Password": session["password"], "ContestId": session["contestid"], "DisableUnrequested": "1", "AllSubm": request.args.get("all", 0), "Command": "AllSubmits", }, ) if state == "error": return answer answer, id = answer submissions = [] feed, score, team, tl, ml = False, False, False, False, False for i in xrange(int(answer["Submits"])): res = { "Problem": answer.get("SubmProb_" + str(i), ""), "ID": answer.get("SubmID_" + str(i), ""), "Time": answer.get("SubmTime_" + str(i), ""), "Result": answer.get("SubmRes_" + str(i), ""), "Test": answer.get("SubmTest_" + str(i), ""), "CE": answer.get("SubmCE_" + str(i), "").decode("cp866"), "Attempt": answer.get("SubmAtt_" + str(i), ""), "Feedback": answer.get("SubmFeed_" + str(i), ""), "Compiler": answer.get("SubmCompiler_" + str(i), ""), "TokenUsed": answer.get("SubmTokenUsed_" + str(i), ""), "Score": answer.get("SubmScore_" + str(i), ""), "Team": answer.get("SubmTeam_" + str(i), "").decode("cp866"), "TL": answer.get("SubmTL_" + str(i), ""), "ML": answer.get("SubmML_" + str(i), ""), } if res["Feedback"]: feed = True if res["Score"]: score = True if res["Team"]: team = True if res["TL"]: tl = True if res["ML"]: ml = True submissions.append(res) if team: submissions.sort(key=lambda x: int(x["ID"]), reverse=1) else: submissions.sort(key=lambda x: int(x["ID"])) return render_template("allsubmits.html", feed=feed, score=score, team=team, tl=tl, ml=ml, submissions=submissions)
def getnewmsg(channel): state, answer = util.communicate( channel, { 'Team': session['team'], 'Password': session['password'], 'ContestId': session['contestid'], 'Command': 'WaitingCount' }) if state == 'error': return answer answer, id = answer if answer['ID'] == id: wtc = int(answer['WaitingCount']) tswebapp.logger.debug('Got wtc: ' + str(wtc)) if wtc == 0: return render_template("getnewmsg.html") if 'confirm' in request.args: state, answer = util.communicate(channel, { 'ID': request.args['confirm'], 'Command': 'DisableUnrequested' }) if state == 'error': return answer return render_template("msg_confirm.html", wtc=wtc - 1) else: state, answer = util.communicate(channel) if state == 'error': return answer answer, id = answer id = answer['ID'] else: wtc = 0 id = answer['ID'] return render_template("getnewmsg.html", message=answer['Message'].decode('cp1251'), id=id)
def wrapper(channel, *args, **kwargs): req = copy(request) if auth: #Fill in authenthication data req['Team'] = session['team'] req['Password'] = session['password'] req.setdefault('ContestId', session['contestid']) state, result = util.communicate(channel, req) if state == 'error': return result else: answer, id = result return f(answer, id, *args, **kwargs)
def sumbit(channel): try: problems, compilers, extensions = get_compilers(channel) except testsys.CommunicationException as e: return render_template("error.html", text=e.message) if request.method == 'GET': config = {} config['problems'] = problems config['compilers'] = compilers return render_template("submit.html", **config) elif request.method == 'POST': if request.files['file']: data = request.files['file'].read().encode('cp866') filepath = secure_filename(request.files['file'].filename) filename = ''.join(filepath.split('.')[:-1]) if request.form['solution']: data = request.form['solution'].encode('cp866') filepath = request.form['prob'] + '.' + request.form['lang'] filename = request.form['prob'] if not data: return util.error("No solution presented") # if not filepath.split('.')[-1] in extensions: # return error("Invalid file type") if not request.form['prob'] in problems: return util.error("Unknown problem '{0}'".format( request.form['prob'])) if not compilers[int(request.form.get('lang', '0')) - 1][0] in extensions: return util.error("Unknown compiler '{0}'".format( request.form['lang'])) state, answer = util.communicate( channel, { 'Team': session['team'], 'Password': session['password'], 'ContestId': session['contestid'], 'Problem': request.form['prob'], 'Contents': data, 'Source': filename, 'Compiler': compilers[int(request.form['lang']) - 1][1], 'Extension': compilers[int(request.form['lang']) - 1][0] }) if state == 'error': return answer return render_template("submit_status.html")
def getnewmsg(channel): state, answer = util.communicate( channel, { "Team": session["team"], "Password": session["password"], "ContestId": session["contestid"], "Command": "WaitingCount", }, ) if state == "error": return answer answer, id = answer if answer["ID"] == id: wtc = int(answer["WaitingCount"]) tswebapp.logger.debug("Got wtc: " + str(wtc)) if wtc == 0: return render_template("getnewmsg.html") if "confirm" in request.args: state, answer = util.communicate(channel, {"ID": request.args["confirm"], "Command": "DisableUnrequested"}) if state == "error": return answer return render_template("msg_confirm.html", wtc=wtc - 1) else: state, answer = util.communicate(channel) if state == "error": return answer answer, id = answer id = answer["ID"] else: wtc = 0 id = answer["ID"] return render_template("getnewmsg.html", message=answer["Message"].decode("cp1251"), id=id)
def submit_clar(channel): state, answer = util.communicate( channel, { 'Team': session['team'], 'Password': session['password'], 'ContestId': session['contestid'], 'Problem': request.form['prob'], 'Command': 'Clar', 'Clar': request.form['clar'].encode('cp866') }) if state == 'error': return answer return render_template("clar_status.html")
def sumbit(channel): try: problems, compilers, extensions = get_compilers(channel) except testsys.CommunicationException as e: return render_template("error.html", text=e.message) if request.method == "GET": config = {} config["problems"] = problems config["compilers"] = compilers return render_template("submit.html", **config) elif request.method == "POST": if request.files["file"]: data = request.files["file"].read().encode("cp866") filepath = secure_filename(request.files["file"].filename) filename = "".join(filepath.split(".")[:-1]) if request.form["solution"]: data = request.form["solution"].encode("cp866") filepath = request.form["prob"] + "." + request.form["lang"] filename = request.form["prob"] if not data: return util.error("No solution presented") # if not filepath.split('.')[-1] in extensions: # return error("Invalid file type") if not request.form["prob"] in problems: return util.error("Unknown problem '{0}'".format(request.form["prob"])) if not compilers[int(request.form.get("lang", "0")) - 1][0] in extensions: return util.error("Unknown compiler '{0}'".format(request.form["lang"])) state, answer = util.communicate( channel, { "Team": session["team"], "Password": session["password"], "ContestId": session["contestid"], "Problem": request.form["prob"], "Contents": data, "Source": filename, "Compiler": compilers[int(request.form["lang"]) - 1][1], "Extension": compilers[int(request.form["lang"]) - 1][0], }, ) if state == "error": return answer return render_template("submit_status.html")
def submit_clar(channel): state, answer = util.communicate( channel, { "Team": session["team"], "Password": session["password"], "ContestId": session["contestid"], "Problem": request.form["prob"], "Command": "Clar", "Clar": request.form["clar"].encode("cp866"), }, ) if state == "error": return answer return render_template("clar_status.html")
def contests(channel): state, answer = util.communicate( channel, { 'Team': session['team'], 'Password': session['password'], 'ContestId': session['contestid'], 'Command': 'ListContests', 'Mask': request.args.get('mask', 1) }) if state == 'error': return answer answer, ans_id = answer contests = util.parse_contests(answer['Contests'].decode('cp866')) return render_template("contests.html", contests=contests)
def viewsubmit(channel, id): state, answer = util.communicate( channel, { 'Team': session['team'], 'Password': session['password'], 'ContestId': session['contestid'], 'DisableUnrequested': '1', 'SubmID': id, 'Command': 'SubmText' }) if state == 'error': return answer answer, ans_id = answer return util.highlight(answer['SubmText'].decode('cp1251'))
def contests(channel): state, answer = util.communicate( channel, { "Team": session["team"], "Password": session["password"], "ContestId": session["contestid"], "Command": "ListContests", "Mask": request.args.get("mask", 1), }, ) if state == "error": return answer answer, ans_id = answer contests = util.parse_contests(answer["Contests"].decode("cp866")) return render_template("contests.html", contests=contests)
def viewsubmit(channel, id): state, answer = util.communicate( channel, { "Team": session["team"], "Password": session["password"], "ContestId": session["contestid"], "DisableUnrequested": "1", "SubmID": id, "Command": "SubmText", }, ) if state == "error": return answer answer, ans_id = answer return util.highlight(answer["SubmText"].decode("cp1251"))
def feedback(channel, id): state, answer = util.communicate( channel, { 'Team': session['team'], 'Password': session['password'], 'ContestId': session['contestid'], 'SubmID': id, 'Command': 'ViewFeedback' }) if state == 'error': return answer answer, ans_id = answer return render_template("feedback.html", hdr=answer['FeedbackAddHeader'], feedback=answer['Feedback'].decode('cp1251'), id=id)
def feedback(channel, id): state, answer = util.communicate( channel, { "Team": session["team"], "Password": session["password"], "ContestId": session["contestid"], "SubmID": id, "Command": "ViewFeedback", }, ) if state == "error": return answer answer, ans_id = answer return render_template( "feedback.html", hdr=answer["FeedbackAddHeader"], feedback=answer["Feedback"].decode("cp1251"), id=id )