예제 #1
0
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)
예제 #2
0
파일: views.py 프로젝트: pwilkins/nbproject
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)
예제 #3
0
파일: views.py 프로젝트: md11235/nbproject
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
예제 #4
0
파일: views.py 프로젝트: Robbilie/nbproject
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
예제 #5
0
파일: views.py 프로젝트: md11235/nbproject
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
예제 #6
0
파일: views.py 프로젝트: pwilkins/nbproject
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
예제 #7
0
파일: views.py 프로젝트: Robbilie/nbproject
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