Exemplo n.º 1
0
def SubmissionsPage(env):
    
    length = env['CONTENT_LENGTH']
    if not length: length = 0
    else: length = int(length)

    d = cgi.parse_qs(env['QUERY_STRING'])
    if 'delete' in d:
        fn = d['delete'][0]
        try:
            os.remove(os.path.join("submissions", fn))
            os.remove(os.path.join("submissions", fn + ".info"))
        except:
            print "Unable to delete " + fn + "(.info)"

    if 'rejudge' in d:
        fn = d['rejudge'][0]
        try:
            run_judging(fn)
        except:
            print "Unable to rejudge " + fn

    temp_file = tempfile.TemporaryFile()
    contents = env['wsgi.input'].read(length)
    temp_file.write(contents) # or use buffered read()
    temp_file.seek(0)
    form = cgi.FieldStorage(fp=temp_file, environ=env, keep_blank_values=True)

    try:
        fileitem = form['file']
    except KeyError:
        fileitem = None

    if fileitem is not None and fileitem.file is not None:
        timestamp = datetime.now().strftime("%Y%m%dT%H%M%S")
        basename = os.path.basename(fileitem.filename)
        fn = os.path.join("submissions", timestamp + "_" + basename)
        message = ""
        with open(fn, 'wb') as f:
            data = fileitem.file.read(1024)
            while data:
                f.write(data)
                data = fileitem.file.read(1024)

            message = 'The file "' + basename + '" was uploaded successfully.'

        message += "<br>" + run_judging(timestamp + "_" + basename)

        with open(fn + ".info", "w") as f:
            print >>f, form['comment'].value

    else:
        message = 'Upload your solution here.'

    temp_file.close()

    yield top + page.format(message=message)

    for token in get_submissions_table():
        yield token
Exemplo n.º 2
0
def RejudgePage(env):
    d = parse_qs(env['QUERY_STRING'])
    
    message = ""
    if 'src' in d:
        fn = d['src'][0]
        try:
            message = run_judging(fn)
        except:
            print "Unable to rejudge " + fn
            message = "Judging failed."

    return top + page.format(message=message)