Ejemplo n.º 1
0
    def get(self, responseID):
        grader = grading.Grader()
        grader.grade_automatic_questions(responseID)
        grader.grade_supplementary_material(responseID)
        task_response = models.TaskResponse.query.filter_by(
            id=responseID).first()
        course = task_response.task.course
        courses_where_ta = current_user.get_courses_where_ta()
        if task_response.student_id != current_user.id and \
                course not in current_user.get_courses_where_teacher_or_ta():
            return "Permission Denied", 401
        if task_response.student_id == current_user.id and \
                task_response.task.status != "grades published":
            return "Task Not Yet Released"
        formatted_time = task_response.datetime.strftime("%a %b %d %H:%M:%S")
        response = json.loads(task_response.graded_response)
        supplementary = json.loads(task_response.graded_supplementary)
        supplementary_order = json.loads(task_response.supplementary_order)

        return render_template("grading/response.html",
                               response=response,
                               student=task_response.user,
                               task=task_response.task,
                               task_response=task_response,
                               time=formatted_time,
                               supplementary=supplementary,
                               permissions=current_user.permissions,
                               supplementaryOrder=supplementary_order)
Ejemplo n.º 2
0
 def get(self, courseID):
     course = models.Course.query.filter_by(id=int(courseID) - 1000).first()
     if course not in current_user.get_courses_where_teacher_or_ta():
         return "You are not the instructor for this course", 401
     data = []
     for u in course.users:
         tasks = []
         d = {'user': u}
         for task in course.tasks:
             print task
             response = models.TaskResponse.query.filter(models.TaskResponse.task_id == task.id,
                                                         models.TaskResponse.student_id == u.id).order_by(
                                                         models.TaskResponse.datetime.desc()).first()
             r = {
                 'task': task,
                 'response': response
             }
             tasks.append(r)
         d['tasks'] = tasks
         data.append(d)
     course_tasks = {
         'course_tasks': course.tasks
     }
     return render_template("courseGrades.html", data=data,
                            course_tasks=course_tasks)
Ejemplo n.º 3
0
 def get(self):
     if current_user.permissions == 10:
         data = []
         for c in current_user.get_courses_enrolled():
             tasks = []
             d = {
                 'course': c,
             }
             for task in c.tasks:
                 response = models.TaskResponse.query.filter(
                     models.TaskResponse.student_id==current_user.id,
                     models.TaskResponse.task_id==task.id).order_by(
                     models.TaskResponse.datetime.desc()).first()
                 t = {
                     'task': task,
                     'response': response
                 }
                 tasks.append(t)
             d['tasks'] = tasks
             data.append(d)
         return render_template('studentGradebook.html',
                                courses=current_user.get_courses_enrolled(),
                                tasks=data)
     elif current_user.permissions >= 20:
         courses = current_user.get_courses_where_teacher_or_ta()
         return render_template('authorGradebook.html', courses=courses)
Ejemplo n.º 4
0
    def get(self):
        teaching = current_user.get_courses_where_teacher_or_ta()
        enrolled = current_user.get_courses_enrolled()

        return render_template('home.html',
                               courses_enrolled=enrolled,
                               courses_teaching=teaching)
Ejemplo n.º 5
0
    def get(self):
        teaching = current_user.get_courses_where_teacher_or_ta()
        enrolled = current_user.get_courses_enrolled()

        return render_template('home.html',
                               courses_enrolled=enrolled,
                               courses_teaching=teaching)
Ejemplo n.º 6
0
    def get(self, response_id):
        response = models.TaskResponse.query.filter_by(id=response_id).first()
        xml_data = json.loads(response.task.xml_data)
        course = response.task.course
        if course not in current_user.get_courses_where_teacher_or_ta():
            return "Permission Denied", 401
        f = tempfile.TemporaryFile()
        f.write('<?xml version="1.0" encoding="utf-8"?>')
        f.write('\n<decision_matrix name="ResponseMatrix">')
        f.write('\n\t<labels>')
        f.write('\n\t\t<alternatives>')
        choiceRow = 0
        for element in xml_data:
            if element['row'] == 0 and element['col'] > 0:
                f.write('\n\t\t\t<alternative>%s</alternative>' %
                        element['text'])
        f.write('\n\t\t</alternatives>')
        f.write('\n\t\t<dimensions>')
        for element in xml_data:
            if element['col'] == 0 and element['row'] > 0:
                choiceRow += 1
        for element in xml_data:
            if element['col'] == 0 and element['row'] > 0 and element[
                    'row'] < choiceRow:
                f.write('\n\t\t\t<dimension>%s</dimension>' % element['text'])
        f.write('\n\t\t</dimensions>')
        f.write('\n\t</labels>')
        f.write('\n\t<interactions>')
        for interaction in json.loads(response.xml_data):
            for element in xml_data:
                if element.get('id') == interaction['id']:
                    (alternative,
                     dimension) = self.get_alternative_and_dimension(
                         element, xml_data)

                    if element['row'] == choiceRow:
                        start = float(interaction.get(
                            'start', 0)) if interaction.get('start') else 0
                        end = float(interaction.get(
                            'end', 0)) if interaction.get('end') else 0
                        message = '\n\t\t<choice alternative="%s" timestamp="%.3f" endtime="%.3f" />' % (
                            alternative, start / 1000, end / 1000)
                    else:
                        message = '\n\t\t<info dimension="%s" alternative="%s" timestamp="%.3f" endtime="%.3f" />' % (
                            dimension, alternative, float(interaction['start'])
                            / 1000, float(interaction['end']) / 1000)
                    f.write(message)
                    break
        f.write('\n\t</interactions>')
        f.write('\n</decision_matrix>')
        f.seek(0, os.SEEK_END)
        size = f.tell()
        f.seek(0)
        fn = 'response_%s.xml' % response_id
        response = flask.send_file(f,
                                   as_attachment=True,
                                   attachment_filename=fn,
                                   add_etags=False)
        return response
Ejemplo n.º 7
0
 def get(self, courseID):
     course = models.Course.query.filter_by(id=int(courseID) - 1000).first()
     author = models.User.query.filter_by(id=course.teacher_id).first()
     if course in current_user.get_courses_where_teacher_or_ta() or \
             course in current_user.get_courses_enrolled() or current_user.permissions >= 100:
         return render_template("course.html", course=course, author=author)
     else:
         return "You do not have access to view this course", 401
Ejemplo n.º 8
0
 def get(self):
     if current_user.is_authenticated():
         courses = current_user.get_courses_enrolled()
         courses += current_user.get_courses_where_teacher_or_ta()
         courses = [c.serialize for c in courses]
         return flask.json.dumps(courses)
     else:
         return flask.json.dumps([])
Ejemplo n.º 9
0
 def get(self):
     if current_user.is_authenticated():
         courses = current_user.get_courses_enrolled()
         courses += current_user.get_courses_where_teacher_or_ta()
         courses = [c.serialize for c in courses]
         return flask.json.dumps(courses)
     else:
         return flask.json.dumps([])
Ejemplo n.º 10
0
 def get(self, courseID):
     course = models.Course.query.filter_by(id=int(courseID) - 1000).first()
     author = models.User.query.filter_by(id=course.teacher_id).first()
     if course in current_user.get_courses_where_teacher_or_ta() or \
             course in current_user.get_courses_enrolled() or current_user.permissions >= 100:
         return render_template("course.html", course=course, author=author)
     else:
         return "You do not have access to view this course", 401
Ejemplo n.º 11
0
 def post(self):
     data = flask.request.get_json()
     response_id = data['response_id'].split('?')[0]
     response = models.TaskResponse.query.filter_by(id=response_id).first()
     course = response.task.course
     if course not in current_user.get_courses_where_teacher_or_ta():
         return "Permission Denied", 401
     grader = grading.Grader()
     correctness = grader.grade_manual_question(response_id,
                                                data['question_id'],
                                                data['correct'])
     return json.dumps(correctness)
Ejemplo n.º 12
0
 def post(self):
     data = flask.request.get_json()
     response_id = data['response_id'].split('?')[0]
     response = models.TaskResponse.query.filter_by(id=response_id).first()
     course = response.task.course
     if course not in current_user.get_courses_where_teacher_or_ta():
         return "Permission Denied", 401
     grader = grading.Grader()
     correctness = grader.grade_manual_question(response_id,
                                                data['question_id'],
                                                data['correct'])
     return json.dumps(correctness)
Ejemplo n.º 13
0
 def post(self):
     data = flask.request.get_json()
     response_id = data['response_id'].split('?')[0]
     response = models.TaskResponse.query.filter_by(id=response_id).first()
     course = response.task.course
     if course not in current_user.get_courses_where_teacher_or_ta():
         return "Permission Denied", 401
     grader = grading.Grader()
     grader.grade_manual_question(response_id,
                                  data['question_id'],
                                  data['critical'],
                                  category="critical")
     models.db.session.commit()
     return ""
Ejemplo n.º 14
0
 def post(self):
     data = flask.request.get_json()
     response_id = data['response_id'].split('?')[0]
     response = models.TaskResponse.query.filter_by(id=response_id).first()
     course = response.task.course
     if course not in current_user.get_courses_where_teacher_or_ta():
         return "Permission Denied", 401
     grader = grading.Grader()
     grader.grade_manual_question(response_id,
                                  data['question_id'],
                                  data['critical'],
                                  category="critical")
     models.db.session.commit()
     return ""
Ejemplo n.º 15
0
    def get(self, response_id):
        response = models.TaskResponse.query.filter_by(id=response_id).first()
        xml_data = json.loads(response.task.xml_data)
        course = response.task.course
        if course not in current_user.get_courses_where_teacher_or_ta():
            return "Permission Denied", 401
        f = tempfile.TemporaryFile()
        f.write('<?xml version="1.0" encoding="utf-8"?>')
        f.write('\n<decision_matrix name="ResponseMatrix">')
        f.write('\n\t<labels>')
        f.write('\n\t\t<alternatives>')
        choiceRow = 0
        for element in xml_data:
            if element['row'] == 0 and element['col'] > 0:
                f.write('\n\t\t\t<alternative>%s</alternative>' % element['text'])
        f.write('\n\t\t</alternatives>')
        f.write('\n\t\t<dimensions>')
        for element in xml_data:
            if element['col'] == 0 and element['row'] > 0:
                choiceRow += 1
        for element in xml_data:
            if element['col'] == 0 and element['row'] > 0 and element['row'] < choiceRow:
                f.write('\n\t\t\t<dimension>%s</dimension>' % element['text'])
        f.write('\n\t\t</dimensions>')
        f.write('\n\t</labels>')
        f.write('\n\t<interactions>')
        for interaction in json.loads(response.xml_data):
            for element in xml_data:
                if element.get('id') == interaction['id']:
                    (alternative, dimension) = self.get_alternative_and_dimension(element, xml_data)

                    if element['row'] == choiceRow:
                        start = float(interaction.get('start', 0)) if interaction.get('start') else 0
                        end = float(interaction.get('end', 0)) if interaction.get('end') else 0
                        message = '\n\t\t<choice alternative="%s" timestamp="%.3f" endtime="%.3f" />' % (alternative, start/1000, end/1000)
                    else:
                        message = '\n\t\t<info dimension="%s" alternative="%s" timestamp="%.3f" endtime="%.3f" />' % (dimension, alternative, float(interaction['start'])/1000, float(interaction['end'])/1000)
                    f.write(message)
                    break
        f.write('\n\t</interactions>')
        f.write('\n</decision_matrix>')
        f.seek(0, os.SEEK_END)
        size = f.tell()
        f.seek(0)
        fn = 'response_%s.xml' % response_id
        response = flask.send_file(f, as_attachment=True, attachment_filename=fn,
                                   add_etags=False)
        return response
Ejemplo n.º 16
0
 def get(self, courseID):
     course = models.Course.query.filter_by(id=int(courseID) - 1000).first()
     if course not in current_user.get_courses_where_teacher_or_ta():
         return "You are not the instructor for this course", 401
     data = []
     for u in course.users:
         tasks = []
         d = {'user': u}
         for task in course.tasks:
             print task
             response = models.TaskResponse.query.filter(
                 models.TaskResponse.task_id == task.id,
                 models.TaskResponse.student_id == u.id).order_by(
                     models.TaskResponse.datetime.desc()).first()
             r = {'task': task, 'response': response}
             tasks.append(r)
         d['tasks'] = tasks
         data.append(d)
     course_tasks = {'course_tasks': course.tasks}
     return render_template("courseGrades.html",
                            data=data,
                            course_tasks=course_tasks)
Ejemplo n.º 17
0
 def get(self):
     if current_user.permissions == 10:
         data = []
         for c in current_user.get_courses_enrolled():
             tasks = []
             d = {
                 'course': c,
             }
             for task in c.tasks:
                 response = models.TaskResponse.query.filter(
                     models.TaskResponse.student_id == current_user.id,
                     models.TaskResponse.task_id == task.id).order_by(
                         models.TaskResponse.datetime.desc()).first()
                 t = {'task': task, 'response': response}
                 tasks.append(t)
             d['tasks'] = tasks
             data.append(d)
         return render_template('studentGradebook.html',
                                courses=current_user.get_courses_enrolled(),
                                tasks=data)
     elif current_user.permissions >= 20:
         courses = current_user.get_courses_where_teacher_or_ta()
         return render_template('authorGradebook.html', courses=courses)
Ejemplo n.º 18
0
    def get(self, responseID):
        grader = grading.Grader()
        grader.grade_automatic_questions(responseID)
        grader.grade_supplementary_material(responseID)
        task_response = models.TaskResponse.query.filter_by(id=responseID).first()
        course = task_response.task.course
        courses_where_ta = current_user.get_courses_where_ta()
        if task_response.student_id != current_user.id and \
                course not in current_user.get_courses_where_teacher_or_ta():
            return "Permission Denied", 401
        if task_response.student_id == current_user.id and \
                task_response.task.status != "grades published":
            return "Task Not Yet Released"
        formatted_time = task_response.datetime.strftime("%a %b %d %H:%M:%S")
        response = json.loads(task_response.graded_response)
        supplementary = json.loads(task_response.graded_supplementary)
        supplementary_order = json.loads(task_response.supplementary_order)

        return render_template("grading/response.html", response=response,
                               student=task_response.user, task=task_response.task,
                               task_response=task_response, time=formatted_time,
                               supplementary=supplementary,
                               permissions=current_user.permissions,
                               supplementaryOrder=supplementary_order)
Ejemplo n.º 19
0
 def get(self):
     courses = current_user.get_courses_where_teacher_or_ta()
     courses = [c.serialize for c in courses]
     return flask.json.dumps(courses)
Ejemplo n.º 20
0
 def get(self):
     courses = current_user.get_courses_where_teacher_or_ta()
     courses = [c.serialize for c in courses]
     return flask.json.dumps(courses)