예제 #1
0
 def test_addGradeUserCourse(cls):
     user3 = User.objects.create_user(username="******", password="******")
     c = Course.addCourse(user=user3, course_name="NLP", credinitials="3")
     Grade.addGradeUserCourse(c, 90, 'A', 2021)
     out = Grade.objects.filter(semester='A')
     assert list(out.values_list('course', 'grade', 'semester',
                                 'year')) == [(3, 90, 'A', 2021)]
예제 #2
0
 def test_removeGrade(cls):
     user3 = User.objects.create_user(username="******", password="******")
     c = Course.addCourse(user=user3, course_name="NLP", credinitials="3")
     Grade.addGradeUserCourse(c, 50, 'B', 2020)
     Grade.removeGrade(2)
     out = Grade.objects.all()
     assert list(out.values_list('course', 'grade', 'semester',
                                 'year')) == [
                                     (3, 50, 'B', 2020),
                                 ]
예제 #3
0
 def get_scaled_multiple_mp_average_by_indices(self, indices, rounding=2):
     """ Get a scaled mulitple marking period average for this student
     Requires that the property mps be set previously.
     This function exists mainly for appy based report cards where speed,
     and simplicity (in the template) are important.
     """
     from grades.models import Grade
     mps = [self.mps[i] for i in indices]
     return Grade.get_scaled_multiple_mp_average(self, mps, rounding)
예제 #4
0
def get_grade(season, name):
    match = re.match("^\s*(.*?)\s+\(KG\)\s*", name, re.DOTALL | re.MULTILINE)
    if match:
        name = match.group(1)

    grade = Grade.from_full_name(name)

    if not grade:
        raise Exception("Unable to find grade with name '%s'" % name)

    # get the grade from our tree, this then includes depth and whether it has children
    # in the context of this season
    season_grades = season.get_grade_tree()
    for season_grade in season_grades:
        if season_grade.id == grade.id:
            return season_grade

    raise Exception(
        "The grade '%s' is not a configured grade for the %s season" %
        (grade.name, season.name))
예제 #5
0
        def build_grade_fields(self, form):
            fields = []

            for grade in Grade.get_grade_tree(is_active=True):
                field_name = 'grade__%d' % grade.id
                grade.field_name = field_name

                field = forms.BooleanField(label="", required=False)
                form.fields.insert(len(form.fields), field_name, field)

                # only add top grade checkboxes to green grades which have no children
                if not grade.has_children and grade.kind == 'GRE':
                    top_field_name = 'grade__%d__top' % grade.id
                    grade.top_field_name = top_field_name

                    field = forms.BooleanField(label="", required=False)
                    form.fields.insert(len(form.fields), top_field_name, field)

                fields.append(grade)

            return fields
예제 #6
0
def index():
    form = StudentForm(request.form)
    form.discipline.choices = [(d.id, d.name) for d in Discipline.query.all()]
    grades = Grade.query.all()
    print(grades)
    if request.method == 'POST' and form.validate():
        if Student.query.filter_by(name=form.name.data).first() is not None:
            s = Student.query.filter_by(name=form.name.data).first()
        else:
            s = Student(name=form.name.data)
            db.session.add(s)
            db.session.commit()

        g = Grade(student=s.id,
                  discipline=form.discipline.data,
                  grade=form.grade.data)
        db.session.add(g)
        db.session.commit()
        return redirect(url_for('index'))

    # Avg grades for all
    avg_grades = db.session.query(func.avg(Grade.grade)).all()
    # Avg grade by subj
    all_grades = [d.grades.all() for d in Discipline.query.all()]
    avg_for_discipline = [
        (sum([gr.grade for gr in d])/len(d), d[0].discipline_related.name)
        for d in all_grades if len(d) > 0]
    # Avg by student
    students = Student.query.all()
    student_avg = [(sum([mark.grade
                        for mark in st.grades.all()])/len(st.grades.all()),
                    st.name) for st in students if len(st.grades.all()) > 0]

    return render_template('index.html',
                           form=form,
                           grades=grades,
                           avg_grades=avg_grades,
                           avg_for_discipline=avg_for_discipline,
                           student_avg=student_avg)
예제 #7
0
파일: views.py 프로젝트: meitals91/StuDash
def Delete_grade(request, gradeID):
    Grade.removeGrade(gradeID)
    messages.success(request, "Grade Deleted!")
    return redirect('grades:createGrade')
예제 #8
0
파일: grades.py 프로젝트: Torrib/gradestats
def parse_data(data, exam, faculty):
    soup = BeautifulSoup(data, 'html5lib')
    tables = soup.find_all('table')
    # Semester info
    table_info = tables[len(tables) - 4]
    rows_info = table_info.find_all('tr')
    td_info = rows_info[1].find_all('td')
    temp = td_info[1].string.split('-')
    semester_code = ""

    if exam == "VÅR":
        semester_code = "V"
    elif exam == "SOM":
        semester_code = "S"
    elif exam == "HØST":
        semester_code = "H"

    semester_code += '%s' % (temp[0].strip())

    # Grade info
    rows_grades = soup.find_all(class_="tableRow")
    # row 5 and down is subjects
    print("Found %d exams from %s" % (len(rows_grades) - 1, semester_code))
    for i in range(0, len(rows_grades) - 1):
        td_grades = rows_grades[i].find_all('td')
        subject_code = td_grades[0].string.split('-')
        subject_code = subject_code[0].strip()
        subjects = Course.objects.filter(code=subject_code)
        if not subjects:
            if "AVH" in subject_code:
                continue
            course = create_course(subject_code, faculty)
            if not course:
                continue
        else:
            course = subjects[0]

        grades = Grade.objects.filter(course=course, semester_code=semester_code)
        if not grades:
            grades = Grade()
            attending = int(td_grades[5].string.strip())

            grades.course = course
            grades.semester_code = semester_code
            grades.f = int(td_grades[6].string.strip())

            passing = attending - grades.f

            grades.a = round((int(td_grades[13].string.strip()) / 100.0) * passing)
            grades.b = round((int(td_grades[14].string.strip()) / 100.0) * passing)
            grades.c = round((int(td_grades[15].string.strip()) / 100.0) * passing)
            grades.d = round((int(td_grades[16].string.strip()) / 100.0) * passing)
            grades.e = round((int(td_grades[17].string.strip()) / 100.0) * passing)

            s = grades.a + grades.b + grades.c + grades.d + grades.e + grades.f

            if s - grades.f == 0:
                grades.passed = passing

            if s == 0:
                grades.average_grade = 0
            else:
                grades.average_grade = (grades.a * 5.0 + grades.b * 4 + grades.c * 3 + grades.d * 2 + grades.e) / s

            grades.save()
예제 #9
0
def parse_data(data, exam, faculty):
    soup = BeautifulSoup(data, 'html5lib')
    tables = soup.find_all('table')
    # Semester info
    table_info = tables[len(tables) - 4]
    rows_info = table_info.find_all('tr')
    td_info = rows_info[1].find_all('td')
    temp = td_info[1].string.split('-')
    semester_code = ""

    if exam == "VÅR":
        semester_code = "V"
    elif exam == "SOM":
        semester_code = "S"
    elif exam == "HØST":
        semester_code = "H"

    semester_code += '%s' % (temp[0].strip())

    # Grade info
    rows_grades = soup.find_all(class_="tableRow")
    # row 5 and down is subjects
    print("Found %d exams from %s" % (len(rows_grades) - 1, semester_code))
    for i in range(0, len(rows_grades) - 1):
        td_grades = rows_grades[i].find_all('td')
        subject_code = td_grades[0].string.split('-')
        subject_code = subject_code[0].strip()
        subjects = Course.objects.filter(code=subject_code)
        if not subjects:
            if "AVH" in subject_code:
                continue
            course = create_course(subject_code, faculty)
            if not course:
                continue
        else:
            course = subjects[0]

        grades = Grade.objects.filter(course=course,
                                      semester_code=semester_code)
        if not grades:
            grades = Grade()
            attending = int(td_grades[5].string.strip())

            grades.course = course
            grades.semester_code = semester_code
            grades.f = int(td_grades[6].string.strip())

            passing = attending - grades.f

            grades.a = round(
                (int(td_grades[13].string.strip()) / 100.0) * passing)
            grades.b = round(
                (int(td_grades[14].string.strip()) / 100.0) * passing)
            grades.c = round(
                (int(td_grades[15].string.strip()) / 100.0) * passing)
            grades.d = round(
                (int(td_grades[16].string.strip()) / 100.0) * passing)
            grades.e = round(
                (int(td_grades[17].string.strip()) / 100.0) * passing)

            s = grades.a + grades.b + grades.c + grades.d + grades.e + grades.f

            if s - grades.f == 0:
                grades.passed = passing

            if s == 0:
                grades.average_grade = 0
            else:
                grades.average_grade = (grades.a * 5.0 + grades.b * 4 +
                                        grades.c * 3 + grades.d * 2 +
                                        grades.e) / s

            grades.save()