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
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)