Esempio n. 1
0
File: main.py Progetto: stden/TSWeb
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']))
Esempio n. 2
0
File: main.py Progetto: stden/TSWeb
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"]))
Esempio n. 3
0
File: main.py Progetto: stden/TSWeb
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)
Esempio n. 4
0
File: main.py Progetto: stden/TSWeb
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)
Esempio n. 5
0
File: main.py Progetto: stden/TSWeb
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)
Esempio n. 6
0
 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)
Esempio n. 7
0
File: main.py Progetto: stden/TSWeb
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")
Esempio n. 8
0
File: main.py Progetto: stden/TSWeb
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)
Esempio n. 9
0
File: main.py Progetto: stden/TSWeb
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")
Esempio n. 10
0
File: main.py Progetto: stden/TSWeb
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")
Esempio n. 11
0
File: main.py Progetto: stden/TSWeb
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")
Esempio n. 12
0
File: main.py Progetto: stden/TSWeb
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)
Esempio n. 13
0
File: main.py Progetto: stden/TSWeb
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'))
Esempio n. 14
0
File: main.py Progetto: stden/TSWeb
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)
Esempio n. 15
0
File: main.py Progetto: stden/TSWeb
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"))
Esempio n. 16
0
File: main.py Progetto: stden/TSWeb
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)
Esempio n. 17
0
File: main.py Progetto: stden/TSWeb
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
    )