def get_stats_ensemble(payload, req): uid = UR.getUserId(req) id_ensemble = payload["id_ensemble"] if not auth.canSeeGrades(uid, id_ensemble): return UR.prepare_response({}, 1, "NOT ALLOWED") retval = annotations.get_stats_ensemble(payload) return UR.prepare_response(retval)
def serve_grades_spreadsheet(req, id_ensemble): uid = UR.getUserId(req) if not auth.canSeeGrades(uid, id_ensemble): return HttpResponse( "Error: You don't have credentials to see grades for class %s" % (id_ensemble, )) import xlwt wbk = xlwt.Workbook() #first, generate the sheets with comment, words, char counts: stats = add_count_sheets(id_ensemble, wbk) #now add a sheet for labeled comments if there are any: add_labeledcomments_sheet(uid, id_ensemble, wbk) #now add sheets for the social graph # FIXME: this is broken for ensemble 6010 on nb.mit.edu. Disabling for now. # https://github.com/nbproject/nbproject/issues/199 #add_socialgraph_sheets(id_ensemble, stats["users"], wbk) import datetime a = datetime.datetime.now() fn = "stats_%s_%04d%02d%02d_%02d%02d.xls" % (id_ensemble, a.year, a.month, a.day, a.hour, a.minute) wbk.save("/tmp/%s" % (fn, )) response = serve(req, fn, "/tmp/") os.remove("/tmp/%s" % (fn, )) response["Content-Type"] = 'application/vnd.ms-excel' response['Content-Disposition'] = "attachment; filename=%s" % (fn, ) return response
def serve_grades_spreadsheet(req, id_ensemble): uid = UR.getUserId(req) if not auth.canSeeGrades(uid, id_ensemble): return HttpResponse("Error: You don't have credentials to see grades for class %s" % (id_ensemble,)) import xlwt wbk = xlwt.Workbook() #first, generate the sheets with comment, words, char counts: stats = add_count_sheets(id_ensemble, wbk) #now add a sheet for labeled comments if there are any: add_labeledcomments_sheet(uid, id_ensemble, wbk) #now add sheets for the social graph # FIXME: this is broken for ensemble 6010 on nb.mit.edu. Disabling for now. # https://github.com/nbproject/nbproject/issues/199 #add_socialgraph_sheets(id_ensemble, stats["users"], wbk) import datetime a = datetime.datetime.now() fn = "stats_%s_%04d%02d%02d_%02d%02d.xls" % (id_ensemble,a.year, a.month, a.day, a.hour, a.minute) wbk.save("/tmp/%s" %(fn,)) response = serve(req, fn,"/tmp/") os.remove("/tmp/%s" %(fn,)) response["Content-Type"]='application/vnd.ms-excel' response['Content-Disposition'] = "attachment; filename=%s" % (fn, ) return response
def spreadsheet_cluster(req, id_ensemble): uid = UR.getUserId(req) if not auth.canSeeGrades(uid, id_ensemble): return HttpResponse( "Error: You don't have credentials to see grades for class %s" % (id_ensemble, )) import xlwt, json workbook = xlwt.Workbook() a = annotations.get_social_interactions_clusters(id_ensemble) ensemble = M.Ensemble.objects.get(pk=id_ensemble) clusters = json.loads(ensemble.metadata)["groups"] ### info sheet ### s = workbook.add_sheet("information") row = 0 col = 0 for i in xrange(0, len(clusters)): cluster = clusters[i] s.write(row, col, "cluster") col += 1 s.write(row, col, i) col = 0 row += 1 s.write(row, col, "sources") s.write(row, col + 1, "id") s.write(row, col + 2, "title") s.write(row, col + 3, "class") row += 1 for source_id in cluster["source"]: col = 0 source = M.Source.objects.get(pk=source_id) s.write(row, col + 1, source_id) s.write(row, col + 2, source.title) s.write(row, col + 3, source.ownership_set.all()[0].ensemble.name) row += 1 col = 0 s.write(row, col, "buddy groups") s.write(row, col + 1, "group id") s.write(row, col + 2, "user id") s.write(row, col + 3, "firstname") s.write(row, col + 4, "lastname") s.write(row, col + 5, "email") row += 1 for j in xrange(0, len(cluster["buddylists"])): for user_id in cluster["buddylists"][j]: user = M.User.objects.get(pk=user_id) s.write(row, col + 1, j) s.write(row, col + 2, user_id) s.write(row, col + 3, user.firstname) s.write(row, col + 4, user.lastname) s.write(row, col + 5, user.email) row += 1 row += 1 ##data sheets: for i in xrange(0, len(clusters)): data = a[i] cluster = clusters[i] user_ids = [] for buddylist in cluster["buddylists"]: user_ids.extend(buddylist) s = workbook.add_sheet("cluster %s" % (i, )) #Header row: row = 0 col = 0 s.write(row, col, "replier \ initiator") col += 1 for id1 in user_ids: val = id1 s.write(row, col, val) col += 1 row += 1 #now real data: for id2 in user_ids: col = 0 val = id2 s.write(row, col, val) col += 1 for id1 in user_ids: id = "%s_%s" % (id2, id1) if id in data: val = data[id]["cnt"] s.write(row, col, val) col += 1 row += 1 import datetime a = datetime.datetime.now() fn = "stats_cluster_%s_%04d%02d%02d_%02d%02d.xls" % ( id_ensemble, a.year, a.month, a.day, a.hour, a.minute) workbook.save("/tmp/%s" % (fn, )) response = serve(req, fn, "/tmp/") os.remove("/tmp/%s" % (fn, )) response["Content-Type"] = 'application/vnd.ms-excel' response['Content-Disposition'] = "attachment; filename=%s" % (fn, ) return response
def serve_grades_spreadsheet(req, id_ensemble): uid = UR.getUserId(req) if not auth.canSeeGrades(uid, id_ensemble): return HttpResponse("Error: You don't have credentials to see grades for class %s" % (id_ensemble,)) a = annotations.get_stats_ensemble({"id_ensemble": id_ensemble}) files = a["files"] stats = a["stats"] users = a["users"] sections = a["sections"] import xlwt wbk = xlwt.Workbook() s_wd = wbk.add_sheet("word_count") s_ch = wbk.add_sheet("char_count") s_cm = wbk.add_sheet("comments_count") # Default order: file id and user email file_ids = sorted(files) user_ids = sorted(users, key=lambda o:users[o]["email"]) row=0 col=0 s_wd.write(row, col, "WORDS") s_ch.write(row, col, "CHARACTERS") s_cm.write(row, col, "COMMENTS") col+=1 s_wd.write(row, col, "SECTION") s_ch.write(row, col, "SECTION") s_cm.write(row, col, "SECTION") col+=1 val = None for f in file_ids: val = files[f]["title"] s_wd.write(row, col, val) s_ch.write(row, col, val) s_cm.write(row, col, val) col+=1 row+=1 for u in user_ids: col=0 val = users[u]["email"] s_wd.write(row, col, val) s_ch.write(row, col, val) s_cm.write(row, col, val) col+=1 val = "" if users[u]["section_id"] is None else sections[users[u]["section_id"]]["name"] s_wd.write(row, col, val) s_ch.write(row, col, val) s_cm.write(row, col, val) col+=1 for f in file_ids: stat_id = "%s_%s" % (u,f) s_wd.write(row, col, stats[stat_id]["numwords"] if stat_id in stats else "") s_ch.write(row, col, stats[stat_id]["numchars"] if stat_id in stats else "") s_cm.write(row, col, stats[stat_id]["cnt"] if stat_id in stats else "") col+=1 row+=1 #now add a sheet for labeled comments if there are any: lcs = M.LabelCategory.objects.filter(ensemble__id=id_ensemble).order_by("id") lcs_ids = list(lcs.values_list('id', flat=True)) cls = M.CommentLabel.objects.select_related("comment", "location").filter(category__in=lcs, grader__id=uid).order_by("comment__location__source__id", "comment__id", "category__id") if len(cls)>0: s_lc = wbk.add_sheet("labeled_comments") #Header row: row=0 col=0 s_lc.write(row, col,"SOURCE_ID") col+=1 s_lc.write(row, col,"COMMENT_ID") col+=1 s_lc.write(row, col,"PARENT_ID") col+=1 s_lc.write(row, col,"LOCATION_ID") col+=1 s_lc.write(row, col,"AUTHOR_ID") col+=1 s_lc.write(row, col,"BODY") for i in xrange(0,len(lcs)): col+=1 s_lc.write(row, col,"%s - [0:%s]" %(lcs[i].name, lcs[i].pointscale)) #Data Rows: previous_comment_id=0 for j in xrange(0, len(cls)): rec = cls[j] if previous_comment_id == rec.comment.id: #We just need to complete the data that we missed on the previous row. col_grade = col+lcs_ids.index(rec.category_id) #move to the column for the next category for which we have data s_lc.write(row, col_grade, rec.grade) else: row+=1 col=0 s_lc.write(row, col,rec.comment.location.source_id) col+=1 s_lc.write(row, col,rec.comment.id) col+=1 s_lc.write(row, col,rec.comment.parent_id) col+=1 s_lc.write(row, col,rec.comment.location_id) col+=1 s_lc.write(row, col, rec.comment.author_id) col+=1 s_lc.write(row, col, rec.comment.body) col+=1 col_grade = col+lcs_ids.index(rec.category_id) #move to the column for the next category for which we have data s_lc.write(row, col_grade, rec.grade) previous_comment_id = rec.comment.id import datetime a = datetime.datetime.now() fn = "stats_%s_%04d%02d%02d_%02d%02d.xls" % (id_ensemble,a.year, a.month, a.day, a.hour, a.minute) wbk.save("/tmp/%s" %(fn,)) response = serve(req, fn,"/tmp/") os.remove("/tmp/%s" %(fn,)) response["Content-Type"]='application/vnd.ms-excel' response['Content-Disposition'] = "attachment; filename=%s" % (fn, ) return response
def spreadsheet_cluster(req, id_ensemble): uid = UR.getUserId(req) if not auth.canSeeGrades(uid, id_ensemble): return HttpResponse("Error: You don't have credentials to see grades for class %s" % (id_ensemble,)) import xlwt, json workbook = xlwt.Workbook() a = annotations.get_social_interactions_clusters(id_ensemble) ensemble = M.Ensemble.objects.get(pk=id_ensemble) clusters = json.loads(ensemble.metadata)["groups"] ### info sheet ### s = workbook.add_sheet("information") row=0 col=0 for i in xrange(0, len(clusters)): cluster = clusters[i] s.write(row, col, "cluster") col +=1 s.write(row, col, i) col = 0 row+=1 s.write(row, col, "sources") s.write(row, col+1, "id") s.write(row, col+2, "title") s.write(row, col+3, "class") row+=1 for source_id in cluster["source"]: col = 0 source = M.Source.objects.get(pk=source_id) s.write(row, col+1, source_id) s.write(row, col+2, source.title) s.write(row, col+3, source.ownership_set.all()[0].ensemble.name) row+=1 col = 0 s.write(row, col, "buddy groups") s.write(row, col+1, "group id") s.write(row, col+2, "user id") s.write(row, col+3, "firstname") s.write(row, col+4, "lastname") s.write(row, col+5, "email") row+=1 for j in xrange(0, len(cluster["buddylists"])): for user_id in cluster["buddylists"][j]: user = M.User.objects.get(pk=user_id) s.write(row, col+1, j) s.write(row, col+2, user_id) s.write(row, col+3, user.firstname) s.write(row, col+4, user.lastname) s.write(row, col+5, user.email) row+=1 row+=1 ##data sheets: for i in xrange(0, len(clusters)): data = a[i] cluster = clusters[i] user_ids = [] for buddylist in cluster["buddylists"]: user_ids.extend(buddylist) s = workbook.add_sheet("cluster %s" %(i,)) #Header row: row=0 col=0 s.write(row, col,"replier \ initiator") col+=1 for id1 in user_ids: val = id1 s.write(row, col, val) col+=1 row+=1 #now real data: for id2 in user_ids: col=0 val = id2 s.write(row, col, val) col+=1 for id1 in user_ids: id = "%s_%s" % (id2, id1) if id in data: val = data[id]["cnt"] s.write(row, col, val) col+=1 row+=1 import datetime a = datetime.datetime.now() fn = "stats_cluster_%s_%04d%02d%02d_%02d%02d.xls" % (id_ensemble,a.year, a.month, a.day, a.hour, a.minute) workbook.save("/tmp/%s" %(fn,)) response = serve(req, fn,"/tmp/") os.remove("/tmp/%s" %(fn,)) response["Content-Type"]='application/vnd.ms-excel' response['Content-Disposition'] = "attachment; filename=%s" % (fn, ) return response