Exemplo n.º 1
0
def show_question(request, student_id, exam_id, question_id):

    #if Exam(connection).is_exam_active(exam_id) != True:
    #   return redirect('/{student_id}/tests/{exam_id}'.format(student_id = student_id, exam_id = exam_id))

    if request.method == "POST":
        variable = request.POST['text_area']
        print(variable)
        return redirect("/{student_id}/tests/{exam_id}/{question_id}".format(
            student_id=student_id,
            exam_id=exam_id,
            question_id=question_id + 1))

    else:
        time_left = Exam(connection).get_exam_time_left(7)
        question, question_amount = Question(connection).get_question(
            exam_id, question_id)
        return render(
            request, "question.html", {
                "question_amount": question_amount,
                "range": range(1, question_amount + 1),
                "student_id": student_id,
                "exam_id": exam_id,
                'question': question,
                'time': time_left
            })
Exemplo n.º 2
0
    def parse(self, **kwargs):
        worksheet = GoogleSheetsParser.get_worksheet(self, '1iw-Wv4omM8GoAhdF3yKBKXQzECZBFClRJIVsOrqcynU')

        i = 2
        while True:
            values_list = worksheet.row_values(i)
            i += 1

            if not values_list[0]:
                break

            try:
                exam = Exam.objects.get(
                    name=values_list[0]
                )
            except ObjectDoesNotExist:
                exam = Exam(
                    name=values_list[0]
                )
                self.exam_count += 1
                exam.save()

        return [
            'New Exams: ' + str(self.exam_count),
        ]
Exemplo n.º 3
0
def add():
    data = request.json or request.data or request.form
    res_code = 200
    res = dict(status="fail")
    name = data.get("name")
    branch_id = data.get("branch_id")
    for key in ("name", "branch_id"):
        val = data.get(key)
        if not val:
            res["statusText"] = errors.BLANK_VALUES_FOR_REQUIRED_FIELDS.text
            res["statusData"] = errors.BLANK_VALUES_FOR_REQUIRED_FIELDS.type(
                [key])
            return jsonify(res), res_code
    exam = Exam.query.filter_by(branch_id=branch_id, name=name).first()
    if exam:
        res["statusText"] = errors.CUSTOM_ERROR.text
        res["statusData"] = errors.CUSTOM_ERROR.type(
            'Exam with name "%s" already exists' % exam.name)
        return jsonify(res), res_code
    exam = Exam(name=name, branch_id=branch_id)
    db.session.add(exam)
    db.session.commit()
    res["status"] = "success"
    res["exam"] = exam.serialize()
    return jsonify(res), res_code
Exemplo n.º 4
0
    def post(self):

        parser = reqparse.RequestParser()

        parser.add_argument('name')
        parser.add_argument('description')
        parser.add_argument('roles', type=str)
        parser.add_argument('time', type=int)
        parser.add_argument('attempts', type=int)
        parser.add_argument('file',
                            location='files',
                            type=werkzeug.datastructures.FileStorage)

        args = parser.parse_args()
        file = args['file']
        exam = Exam(**args)

        # Check if file exists, rename if so
        filename = werkzeug.utils.secure_filename(file.filename)

        if os.path.isfile(f'uploads/{filename}'):
            filename = str(int(datetime.now().timestamp())) + "-" + filename

        exam.json_file = filename
        exam.roles = args['roles']

        file.save(f"uploads/{filename}")
        exam.save()
        return exam
Exemplo n.º 5
0
def show_tests(request, user_id):

    exams = Exam(connection).get_exam_details(user_id)
    return render(request, "show_tests.html", {
        "test_details": exams[0],
        "time_remain": exams[1],
        "index": len(exams[0])
    })
Exemplo n.º 6
0
def test_detail(request, student_id, exam_id):

    test_details = Exam(connection).single_exam_details(exam_id)
    print(test_details)
    student = Student(connection).get_student_by_id(student_id)
    #(3, 'Midterm 3', datetime.datetime(2020, 4, 7, 20, 0), 120, '*****@*****.**', 'ENGR 101')

    return render(request, "test.html", {
        "test_detail": test_details,
        "student": student
    })
Exemplo n.º 7
0
def create_fixture_exams(count=10):
    print(f'Inserting {count} exams...')
    teachers = Teacher.query.all()
    exams = [
        Exam(**generate_random_exam(random.choice(teachers).id))
        for _ in range(count)
    ]
    if Exam.persist_changes({'insert': exams}):
        print(f'The {len(exams)} exams were added...')
    else:
        print(f'Cannot insert exams.')
Exemplo n.º 8
0
 def test_delete_exam_teacher(self):
     """Teacher archiving their exam"""
     exam = Exam.query.first()
     new_exam_dict = generate_random_exam(exam.author_id)
     new_exam = Exam(**new_exam_dict)
     new_exam.insert()
     try:
         teacher = Teacher.get_by_id(new_exam.author_id)
         token = generate_user_token(teacher.username, TEACHER_PERMISSIONS)
         res = self.client.delete(f'/api/v1/exams/{new_exam.id}',
                                  headers={
                                      'Content-Type': 'application/json',
                                      'Authorization': f'bearer {token}'})
         self.assertEqual(res.status_code, 200, res.get_json())
         data = res.get_json()
         self.check_fields_list(data, ['success', 'deleted'])
         self.assertTrue('success')
         self.assertEqual(data['deleted'], new_exam.id)
         self.assertIsNone(Exam.get_by_id(new_exam.id))
     finally:
         new_exam.delete()
Exemplo n.º 9
0
def paper_upload():
    data = MultiDict(mapping=request.json)
    form = PaperUploadForm(data)
    if not form.validate():
        raise FormValidateError(form.errors)
    # todo 插入数据库
    attachments = request.json.get('attachments', [])
    exam = Exam(name=form.name.data, section=form.section.data, subject=form.subject.data, paper_types=form.paper_types.data, \
                province_id=form.province_id.data, city_id=form.city_id.data, area_id=form.area_id.data,\
                school_id=form.school_id.data,
                exam_date=form.exam_date.data,
                year=form.year.data,
                grade=form.grade.data,
                is_fast=form.is_fast.data,
                state=0,
                attachments=attachments,
                upload_user=g.user.id,
                order=PAPER_TYPE_ORDER[form.paper_types.data])
    result = exam.save()
    ExamLog.log(exam.id, g.user.id, EXAM_STATUS['未审核'], 'UPLOAD')
    if result.id is not None:
        return render_api({})
    raise JsonOutputException('添加失败')
Exemplo n.º 10
0
    def exam(user):
        if request.method == 'POST':
            try:
                metric_id = request.data['metricId']
                visit_id = request.data['visitId']
                value = request.data['value']
            except KeyError:
                return {}, 400

            metric = Metric.query.filter_by(id=metric_id)
            visit = Visit.query.filter_by(id=visit_id)

            if not user.admin:
                metric = metric.filter_by(gender=user.gender)
                visit = visit.filter_by(user=user)

            metric = metric.first()
            visit = visit.first()
            if visit is None or metric is None:
                return {}, 400

            exam = Exam(value=value, metric=metric, visit=visit)
            exam.save()
            visit.date_modified = exam.date_modified
            visit.save()
            response = jsonify({
                'id': exam.id,
                'value': exam.value,
                'dateCreated': exam.date_created,
                'dateModified': exam.date_modified,
                'visitId': exam.visit.id,
                'metricId': exam.metric.id,
                'metricName': exam.metric.name
            })
            response.status_code = 201
            return response
        else:
            try:
                visit_id = request.values['visitId']
            except KeyError:
                if user.admin:
                    exams = Exam.get_all()
                else:
                    visit_ids = Visit.query.filter_by(user=user).with_entities(
                        Visit.id)
                    exams = Exam.query.filter(Exam.visit_id.in_(visit_ids))
            else:
                visit = Visit.query.filter_by(id=visit_id)
                if not user.admin:
                    visit = visit.filter_by(user=user)
                visit = visit.first()
                exams = Exam.query.filter_by(visit=visit).order_by(
                    Exam.metric_id)
            results = []
            for exam in exams:
                obj = {
                    'id': exam.id,
                    'value': exam.value,
                    'dateCreated': exam.date_created,
                    'dateModified': exam.date_modified,
                    'visitId': exam.visit.id,
                    'metricId': exam.metric.id,
                    'metricName': exam.metric.name
                }
                results.append(obj)
            response = jsonify(results)
            response.status_code = 200
            return response
Exemplo n.º 11
0
def data_entry():
    import pprint
    pprint.pprint(request.form)
    qualifications_form = QualificationFormAdd()
    qualifications_form.locale.choices = [('GB', 'GB'), ('DE', 'DE'),
                                          ('US', 'US')]
    qualifications_form.year.choices = [('2015', '2015'), ('2014', '2014'),
                                        ('2013', '2013'), ('2012', '2012'),
                                        ('2011', '2011')]
    board_form = BoardFormAdd()
    board_form.locale.choices = [('GB', 'GB'), ('DE', 'DE'), ('US', 'US')]
    subject_form = SubjectFormAdd()
    exam_form = ExamFormAdd()
    section_form = SectionFormAdd()
    question_form = QuestionFormAdd()
    if request.method == 'GET':
        return render_template('data_entry.html',
                               user=current_user.name,
                               user_role=current_user.role.name,
                               qualifications_form=qualifications_form,
                               subject_form=subject_form,
                               board_form=board_form,
                               exam_form=exam_form,
                               section_form=section_form,
                               question_form=question_form)
    if request.method == 'POST':
        if qualifications_form.validate_on_submit():
            new_qualification = Qualification(
                name=qualifications_form.name.data,
                locale=qualifications_form.locale.data,
                year=qualifications_form.year.data,
                num_students=qualifications_form.num_students.data)
            db.session.add(new_qualification)
            db.session.commit()
            flash('Added Qualification: {0} {1} ({2})'.format(
                new_qualification.name, new_qualification.year,
                new_qualification.locale))
            return redirect(url_for('data_entry'))
        else:
            utilities.flash_form_errors(qualifications_form)
        if board_form.validate_on_submit():
            new_board = Board(name=board_form.name.data,
                              locale=board_form.locale.data,
                              num_marking=board_form.num_marking.data)
            db.session.add(new_board)
            db.session.commit()
            flash('Added Board: {0} ({1})'.format(new_board.name,
                                                  new_board.locale))
            return redirect(url_for('data_entry'))
        else:
            utilities.flash_form_errors(board_form)
        if subject_form.validate_on_submit():
            new_subject = Subject(
                name=subject_form.name.data,
                qualification_id=subject_form.qualification.data.id,
                board_id=subject_form.board.data.id,
                is_compulsory=subject_form.is_compulsory.data,
                is_higher=subject_form.is_higher.data,
                perc_exam=subject_form.perc_exam.data,
                total_marks=subject_form.total_marks.data,
                num_modules=subject_form.num_modules.data,
                num_students=subject_form.num_students.data)
            db.session.add(new_subject)
            db.session.commit()
            flash('Added Subject: {0} | {1} {2} | {3} ({4})'.format(
                new_subject.name, new_subject.qualification.name,
                new_subject.qualification.year, new_subject.board.name,
                new_subject.board.locale))
            return redirect(url_for('data_entry'))
        else:
            utilities.flash_form_errors(subject_form)
        if exam_form.validate_on_submit():
            new_exam = Exam(subject_id=exam_form.subject.data.id,
                            name=exam_form.name.data,
                            marks=exam_form.marks.data,
                            total_num_q=exam_form.total_num_q.data,
                            required_num_q=exam_form.required_num_q.data,
                            time=exam_form.time.data,
                            datetime=exam_form.datetime.data,
                            num_retakes=exam_form.num_retakes.data)
            db.session.add(new_exam)
            db.session.commit()
            flash('Added Exam: {0} | {1} | {2} {3} | {4} ({5})'.format(
                new_exam.name, new_exam.subject.name,
                new_exam.subject.qualification.name,
                new_exam.subject.qualification.year,
                new_exam.subject.board.name, new_exam.subject.board.locale))
            return redirect(url_for('data_entry'))
        else:
            utilities.flash_form_errors(exam_form)
        if section_form.validate_on_submit():
            new_section = Section(exam_id=section_form.exam.data.id,
                                  topic=section_form.topic.data,
                                  marks=section_form.marks.data,
                                  time=section_form.time.data)
            db.session.add(new_section)
            db.session.commit()
            flash(
                'Added Section: {0} | {1} | {2} | {3} {4} | {5} ({6})'.format(
                    new_section.topic, new_section.exam.name,
                    new_section.exam.subject.name,
                    new_section.exam.subject.qualification.name,
                    new_section.exam.subject.qualification.year,
                    new_section.exam.subject.board.name,
                    new_section.exam.subject.board.locale))
            return redirect(url_for('data_entry'))
        else:
            utilities.flash_form_errors(section_form)
        return redirect(url_for('data_entry'))
Exemplo n.º 12
0
def exams(request):
    from app.models import Course
    display = Course.objects.filter(
        student__user__username=request.user).exists()

    if request.method == 'POST':
        from app.forms import ExamForm
        from app.models import Student, Subject, Exam, Course
        form = ExamForm(request.POST)
        if form.is_valid():

            sameCourse = Course.objects.get(
                student__user__username=request.user)
            sameStudent = Student.objects.get(user__username=request.user)
            sent_subject = request.POST['new_subject'].capitalize()
            newSubject, created = Subject.objects.get_or_create(
                name=sent_subject, course=sameCourse)
            if created:
                newSubject.save()
            newGrade = request.POST['grade'] or None
            newPassed = request.POST.get('passed', '') == 'on'
            newDate = request.POST['date_passed'] or None

            newExam = Exam(
                student=sameStudent,
                subject=newSubject,
                grade=newGrade,
                passed=newPassed,
                date_passed=newDate,
            )

            newExam.save()
            return render(
                request, 'exams/exams.html', {
                    'msg':
                    'Exam Succesfully Added',
                    'newExamForm':
                    ExamForm(),
                    'exams':
                    Exam.objects.filter(student__user__username=request.user),
                    'display':
                    display
                })
        else:
            return render(
                request, 'exams/exams.html', {
                    'err':
                    'Invalid data',
                    'newExamForm':
                    form,
                    'exams':
                    Exam.objects.filter(student__user__username=request.user),
                    'display':
                    display
                })

    from app.models import Exam
    from app.forms import ExamForm

    exams = Exam.objects.filter(student__user__username=request.user)

    return render(
        request, 'exams/exams.html', {
            'exams': exams,
            'request': request,
            'newExamForm': ExamForm(),
            'display': display
        })