def getUserResults(req, courseId, assignmentId, username): """Get the results for a given username""" req.content_type = 'text/html' strout = websutil.OutputString() try: vmcfg = config.CourseConfig(CourseList().course_config(courseId)) except: traceback.print_exc(file = strout) return json.dumps({'errorType' : ERR_EXCEPTION, 'errorMessage' : "", 'errorTrace' : strout.get()}) vmpaths = paths.VmcheckerPaths(vmcfg.root_path()) submission_dir = vmpaths.dir_cur_submission_root(assignmentId, username) r_path = paths.dir_submission_results(submission_dir) strout = websutil.OutputString() try: result_files = [] if os.path.isdir(r_path): update_db.update_grades(courseId, user=username, assignment=assignmentId) for fname in os.listdir(r_path): # skill all files not ending in '.vmr' if not fname.endswith('.vmr'): continue f_path = os.path.join(r_path, fname) if os.path.isfile(f_path): overflow_msg = '' f_size = os.path.getsize(f_path) if f_size > MAX_VMR_FILE_SIZE: overflow_msg = '\n\n<b>File truncated! Actual size: ' + str(f_size) + ' bytes</b>\n' # decode as utf-8 and ignore any errors, because # characters will be badly encoded as json. with codecs.open(f_path, 'r', encoding='utf-8', errors='ignore') as f: result_files.append({fname : (f.read(MAX_VMR_FILE_SIZE) + overflow_msg) }) if len(result_files) == 0: msg = "In the meantime have a fortune cookie: <blockquote>" try: process = subprocess.Popen('/usr/games/fortune', shell=False, stdout=subprocess.PIPE) msg += process.communicate()[0] + "</blockquote>" except: msg += "Knock knock. Who's there? [Silence] </blockquote>" result_files = [ {'fortune.vmr' : msg } ] result_files.append({'queue-contents.vmr' : websutil.get_test_queue_contents(courseId) }) result_files.append({'late-submission.vmr' : websutil.submission_upload_info(courseId, username, assignmentId)}) result_files = websutil.sortResultFiles(result_files) return json.dumps(result_files) except: traceback.print_exc(file = strout) return json.dumps({'errorType' : ERR_EXCEPTION, 'errorMessage' : "", 'errorTrace' : strout.get()})
def getUserResults(req, courseId, assignmentId, username): """Get the results for a given username""" req.content_type = 'text/html' strout = websutil.OutputString() try: vmcfg = config.CourseConfig(CourseList().course_config(courseId)) except: traceback.print_exc(file = strout) return json.dumps({'errorType' : ERR_EXCEPTION, 'errorMessage' : "", 'errorTrace' : strout.get()}) vmpaths = paths.VmcheckerPaths(vmcfg.root_path()) submission_dir = vmpaths.dir_cur_submission_root(assignmentId, username) r_path = paths.dir_submission_results(submission_dir) strout = websutil.OutputString() try: result_files = [] if os.path.isdir(r_path): update_db.update_grades(courseId, user=username, assignment=assignmentId) for fname in os.listdir(r_path): # skill all files not ending in '.vmr' if not fname.endswith('.vmr'): continue f_path = os.path.join(r_path, fname) if os.path.isfile(f_path): overflow_msg = '' f_size = os.path.getsize(f_path) if f_size > MAX_VMR_FILE_SIZE: overflow_msg = '\n\n<b>File truncated! Actual size: ' + str(f_size) + ' bytes</b>\n' # decode as utf-8 and ignore any errors, because # characters will be badly encoded as json. with codecs.open(f_path, 'r', encoding='utf-8', errors='ignore') as f: result_files.append({fname : (f.read(MAX_VMR_FILE_SIZE) + overflow_msg) }) if len(result_files) == 0: msg = "In the meantime have a fortune cookie: <blockquote>" try: process = subprocess.Popen('/usr/games/fortune', shell=False, stdout=subprocess.PIPE) msg += process.communicate()[0] + "</blockquote>" except: msg += "Knock knock. Who's there? [Silence] </blockquote>" result_files = [ {'fortune.vmr' : msg } ] result_files.append({'queue-contents.vmr' : websutil.get_test_queue_contents(courseId) }) result_files.append({'late-submission.vmr' : websutil.submission_upload_info(courseId, username, assignmentId)}) result_files = websutil.sortResultFiles(result_files) return json.dumps(result_files) except: traceback.print_exc(file = strout) return json.dumps({'errorType' : ERR_EXCEPTION, 'errorMessage' : "", 'errorTrace' : strout.get()})
def getUserResults(courseId, assignmentId, username): strout = websutil.OutputString() try: vmcfg = config.CourseConfig(CourseList().course_config(courseId)) except: traceback.print_exc(file = strout) return json.dumps({'errorType' : ERR_EXCEPTION, 'errorMessage' : "", 'errorTrace' : strout.get()}) vmpaths = paths.VmcheckerPaths(vmcfg.root_path()) submission_dir = vmpaths.dir_cur_submission_root(assignmentId, username) r_path = paths.dir_submission_results(submission_dir) strout = websutil.OutputString() try: result_files = [] if os.path.isdir(r_path): # XXX should we narrow scope on user & assignment? # TODO: add a routine to update user+asignment+course grade only #update_db.update_grades(courseId) for fname in os.listdir(r_path): # skill all files not ending in '.vmr' if not fname.endswith('.vmr'): continue f_path = os.path.join(r_path, fname) if os.path.isfile(f_path): overflow_msg = '' f_size = os.path.getsize(f_path) if f_size > MAX_VMR_FILE_SIZE: overflow_msg = '\n\n<b>File truncated! Actual size: ' + str(f_size) + ' bytes</b>\n' # decode as utf-8 and ignore any errors, because # characters will be badly encoded as json. with codecs.open(f_path, 'r', encoding='utf-8', errors='ignore') as f: result_files.append({fname : (f.read(MAX_VMR_FILE_SIZE) + overflow_msg) }) if len(result_files) == 0: msg = "In the meantime have a fortune cookie" result_files = [ {'fortune.vmr' : msg } ] result_files.append({'queue-contents.vmr' : '' }) result_files.append({'late-submission.vmr' : websutil.submission_upload_info(courseId, username, assignmentId)}) result_files = websutil.sortResultFiles(result_files) return json.dumps(result_files) except: traceback.print_exc(file = strout) return json.dumps({'errorType' : ERR_EXCEPTION, 'errorMessage' : "", 'errorTrace' : strout.get()})
def getUserResults(req, courseId, assignmentId, username): """Get the results for a given username""" req.content_type = "text/html" strout = websutil.OutputString() try: vmcfg = config.CourseConfig(CourseList().course_config(courseId)) except: traceback.print_exc(file=strout) return json.dumps({"errorType": ERR_EXCEPTION, "errorMessage": "", "errorTrace": strout.get()}) vmpaths = paths.VmcheckerPaths(vmcfg.root_path()) submission_dir = vmpaths.dir_submission_root(assignmentId, username) r_path = paths.dir_submission_results(submission_dir) strout = websutil.OutputString() try: result_files = [] if os.path.isdir(r_path): update_db.update_all(courseId) for fname in os.listdir(r_path): # skill all files not ending in '.vmr' if not fname.endswith(".vmr"): continue f_path = os.path.join(r_path, fname) if os.path.isfile(f_path): with open(f_path, "r") as f: result_files.append({fname: f.read()}) if len(result_files) != 0: result_files = websutil.sortResultFiles(result_files) else: process = subprocess.Popen("/usr/games/fortune", shell=False, stdout=subprocess.PIPE) msg = "In the meantime have a fortune cookie: <blockquote>" msg += process.communicate()[0] + "</blockquote>" result_files = [{"Your results are not ready yet": msg}] return json.dumps(result_files) except: traceback.print_exc(file=strout) return json.dumps({"errorType": ERR_EXCEPTION, "errorMessage": "", "errorTrace": strout.get()})