Example #1
0
def create_school(
    *,
    db: Session = Depends(deps.get_db),
    school_in: schemas.SchoolCreate,
    current_admin: models.Admin = Depends(
        deps.get_current_admin_with_permission("school")),
) -> Any:
    """
    Create new school.
    """
    # Check if the school already exists; raise Exception with error code 409 if it does
    if crud.school.get_by_name(db, name=school_in.name):
        raise ConflictException(
            detail="A school with this name already exists in the system.", )

    # Check if a school with this head already exists; raise Exception with error code 409 if it does
    if crud.school.get_by_head(db, head=school_in.head):
        raise ConflictException(
            detail="A school with this head already exists in the system.", )

    # Create new school
    logging.info(
        f"Admin {current_admin.user_id} ({current_admin.user.email}) is creating School {school_in.__dict__}"
    )
    school = crud.school.create(db, obj_in=school_in)

    return school
Example #2
0
def read_courses(
    db: Session = Depends(deps.get_db),
    skip: int = 0,
    limit: int = 100,
    _: models.Admin = Depends(deps.get_current_admin_with_permission("course")),
) -> Any:
    return crud.course.get_multi(db, skip=skip, limit=limit)
Example #3
0
def remove_student_from_term(
    *,
    db: Session = Depends(deps.get_db),
    division_id: str,
    student_id: str,
    current_admin: models.Admin = Depends(
        deps.get_current_admin_with_permission("term")),
) -> Any:

    if division := crud.division.get(db, division_id):
        if student := crud.student.get(db, student_id):
            if student in division.students:
                logging.info(
                    f"Admin {current_admin.user_id} ({current_admin.user.email}) "
                    f"is deleting Student {student_id} ({student.user.email}) "
                    f"from Division {division_id} ({division.course.name} {division.division_code})"
                )
                division.students.remove(student)
                try:
                    db.commit()
                except exc.IntegrityError as e:
                    logging.error(e)
                    db.rollback()
                    raise ConflictException(detail=e.__str__())
                except Exception as e:
                    logging.error(e)
                    db.rollback()
                    raise BadRequestException(detail=e.__str__())
                return student
            raise NotFoundException(
                detail=
                f"Student with id {student_id} not found in Division with if {division_id}"
            )
Example #4
0
def add_term_students_by_id(
    *,
    db: Session = Depends(deps.get_db),
    term_id: str,
    user_ids: list[str],
    _: models.Admin = Depends(deps.get_current_admin_with_permission("term")),
) -> Any:
    if term := crud.term.get(db, id=term_id):
        response: dict[str, Any] = defaultdict(lambda: [])
        errors = defaultdict(lambda: [])

        for user_id in user_ids:
            if user := crud.user.get(db, id=user_id):
                if user.type == "student":
                    if user.school_id == term.year.school_id:
                        if student := crud.student.get(db, id=user_id):
                            if student.term_id != term_id:
                                crud.student.update(
                                    db,
                                    db_obj=student,
                                    obj_in=StudentUpdate(term_id=term_id))
                                response["success"].append(student.user_id)
                            else:
                                errors["student already in term"].append(
                                    user_id)
                        else:
                            errors["no student object"].append(user_id)
                    else:
                        errors["different schools"].append(user_id)
                else:
                    errors["not a student"].append(user_id)
Example #5
0
def read_course_by_id(
    *,
    db: Session = Depends(deps.get_db),
    course_id: str,
    _: models.Admin = Depends(deps.get_current_admin_with_permission("course")),
) -> Any:
    if course := crud.course.get(db, id=course_id):
        return course
Example #6
0
def get_timetable_division(
    *,
    db: Session = Depends(deps.get_db),
    _: models.User = Depends(deps.get_current_admin_with_permission("course")),
    division_id: str,
) -> Any:
    if division := crud.division.get(db, id=division_id):
        return generate_timetable(db, [division])
Example #7
0
def read_term_students_by_id(
    *,
    db: Session = Depends(deps.get_db),
    term_id: str,
    _: models.Admin = Depends(deps.get_current_admin_with_permission("term")),
) -> Any:
    if term := crud.term.get(db, term_id):
        return term.students
Example #8
0
def read_timeslots(
    db: Session = Depends(deps.get_db),
    skip: int = 0,
    limit: int = 100,
    _: models.Admin = Depends(
        deps.get_current_admin_with_permission("school")),
) -> Any:
    return crud.timeslot.get_multi(db, skip=skip, limit=limit)
Example #9
0
def read_terms(
    db: Session = Depends(deps.get_db),
    skip: int = 0,
    limit: int = 100,
    _: models.Admin = Depends(deps.get_current_admin_with_permission("term")),
) -> Any:
    terms = crud.term.get_multi(db, skip=skip, limit=limit)
    return terms
Example #10
0
def read_lecture_by_id(
    *,
    db: Session = Depends(deps.get_db),
    lecture_id: str,
    _: models.Admin = Depends(deps.get_current_admin_with_permission("school")),
) -> Any:
    if lecture := crud.lecture.get(db, id=lecture_id):
        return lecture
Example #11
0
def read_division_by_id(
    *,
    db: Session = Depends(deps.get_db),
    division_id: str,
    _: models.Admin = Depends(
        deps.get_current_admin_with_permission("course")),
) -> Any:
    if division := crud.division.get(db, id=division_id):
        return division
Example #12
0
def read_timeslot_by_id(
    *,
    db: Session = Depends(deps.get_db),
    timeslot_id: str,
    _: models.Admin = Depends(
        deps.get_current_admin_with_permission("school")),
) -> Any:
    if timeslot := crud.timeslot.get(db, id=timeslot_id):
        return timeslot
Example #13
0
def delete_lecture(
    *,
    db: Session = Depends(deps.get_db),
    lecture_id: str,
    current_admin: models.Admin = Depends(deps.get_current_admin_with_permission("school")),
) -> Any:
    if lecture := crud.lecture.get(db, id=lecture_id):
        logging.info(f"Admin {current_admin.user_id} ({current_admin.user.email}) is deleting lecture {lecture.id}")
        return crud.lecture.remove(db, id=lecture_id)
Example #14
0
def update_lecture(
    *,
    db: Session = Depends(deps.get_db),
    lecture_id: str,
    lecture_in: schemas.LectureUpdate,
    current_admin: models.Admin = Depends(deps.get_current_admin_with_permission("school")),
) -> Any:
    if lecture := crud.lecture.get(db, id=lecture_id):
        logging.info(f"Admin {current_admin.user_id} ({current_admin.user.email}) is updating lecture {lecture.id}")
        return crud.lecture.update(db, db_obj=lecture, obj_in=lecture_in)
Example #15
0
def read_admins(
    db: Session = Depends(deps.get_db),
    skip: int = 0,
    limit: int = 100,
    _: models.Admin = Depends(deps.get_current_admin_with_permission("admin")),
) -> Any:
    """
    Retrieve admins
    """
    return crud.admin.get_multi(db, skip=skip, limit=limit)
Example #16
0
def get_timeslots(
    *,
    db: Session = Depends(deps.get_db),
    school_id: str,
    _: models.Admin = Depends(
        deps.get_current_admin_with_permission("school")),
) -> Any:
    """
    Get all timeslots in a school
    """
    return crud.timeslot.get_by_school(db, school_id=school_id)
Example #17
0
def get_professors(
    *,
    db: Session = Depends(deps.get_db),
    school_id: str,
    _: models.Admin = Depends(
        deps.get_current_admin_with_permission("school")),
) -> Any:
    """
    Get all students belonging to a school.
    """
    return crud.user.get_all_professors_for_school(db, school_id=school_id)
Example #18
0
def read_year_by_id(
    *,
    db: Session = Depends(deps.get_db),
    year_id: str,
    _: models.Admin = Depends(deps.get_current_admin_with_permission("year")),
) -> Any:
    """
    Retrieve years
    """
    if year := crud.year.get(db, year_id):
        return year
Example #19
0
def delete_year(
    *,
    db: Session = Depends(deps.get_db),
    year_id: str,
    current_admin: models.Admin = Depends(deps.get_current_admin_with_permission("year")),
) -> Any:
    if year := crud.year.get(db, year_id):
        logging.info(
            f"Admin {current_admin.user_id} ({current_admin.user.email}) is deleting Year {year.id} ({year.name})"
        )
        return crud.year.remove(db, id=year_id)
Example #20
0
def read_users(
    db: Session = Depends(deps.get_db),
    skip: int = 0,
    limit: int = 100,
    _: models.Admin = Depends(deps.get_current_admin_with_permission("user")),
) -> Any:
    """
    Retrieve users.
    """
    users = crud.user.get_multi(db, skip=skip, limit=limit)
    return users
Example #21
0
def delete_course(
    *,
    db: Session = Depends(deps.get_db),
    course_id: str,
    current_admin: models.Admin = Depends(deps.get_current_admin_with_permission("course")),
) -> Any:
    if course := crud.course.get(db, id=course_id):
        logging.info(
            f"Admin {current_admin.user_id} ({current_admin.user.email}) is deleting Course {course.id} ({course.name})"
        )
        return crud.course.remove(db, id=course_id)
Example #22
0
def delete_timeslot(
    *,
    db: Session = Depends(deps.get_db),
    timeslot_id: str,
    current_admin: models.Admin = Depends(
        deps.get_current_admin_with_permission("school")),
) -> Any:
    if timeslot := crud.timeslot.get(db, id=timeslot_id):
        logging.info(
            f"Admin {current_admin.user_id} ({current_admin.user.email}) is deleting timeslot {timeslot.id} (start - "
            f"{timeslot.start_time}, end - {timeslot.end_time})")
        return crud.timeslot.remove(db, id=timeslot_id)
Example #23
0
def delete_term(
    *,
    db: Session = Depends(deps.get_db),
    term_id: str,
    current_admin: models.Admin = Depends(
        deps.get_current_admin_with_permission("term")),
) -> Any:
    if term := crud.term.get(db, term_id):
        logging.info(
            f"Admin {current_admin.user_id} ({current_admin.user.email}) is deleting Term {term.id} ({term.id})"
        )
        return crud.term.remove(db, id=term_id)
Example #24
0
def read_schools(
    db: Session = Depends(deps.get_db),
    skip: int = 0,
    limit: int = 100,
    _: models.Admin = Depends(
        deps.get_current_admin_with_permission("school")),
) -> Any:
    """
    Retrieve schools.
    """
    schools = crud.school.get_multi(db, skip=skip, limit=limit)
    return schools
Example #25
0
def delete_school(
    *,
    db: Session = Depends(deps.get_db),
    school_id: str,
    current_admin: models.Admin = Depends(
        deps.get_current_admin_with_permission("school")),
) -> Any:
    if school := crud.school.get(db, school_id):
        logging.info(
            f"Admin {current_admin.user_id} ({current_admin.user.email}) is deleting School {school.id} ({school.name})"
        )
        return crud.school.remove(db, id=school_id)
Example #26
0
def update_term(
    *,
    db: Session = Depends(deps.get_db),
    term_id: str,
    term_in: schemas.TermUpdate,
    current_admin: models.Admin = Depends(
        deps.get_current_admin_with_permission("term")),
) -> Any:
    if term := crud.term.get(db, term_id):
        logging.info(
            f"Admin {current_admin.user_id} ({current_admin.user.email}) is updating Term {term.id} ({term.name}) to"
            f" {term_in.__dict__}")
        return crud.term.update(db, db_obj=term, obj_in=term_in)
Example #27
0
def delete_division(
    *,
    db: Session = Depends(deps.get_db),
    division_id: str,
    current_admin: models.Admin = Depends(
        deps.get_current_admin_with_permission("course")),
) -> Any:
    if division := crud.division.get(db, id=division_id):
        logging.info(
            f"Admin {current_admin.user_id} ({current_admin.user.email}) is deleting Division {division.id} "
            f"({division.course.name} - {division.division_code} for Term {division.course.name})"
        )
        return crud.division.remove(db, id=division_id)
Example #28
0
def update_course(
    *,
    db: Session = Depends(deps.get_db),
    course_id: str,
    course_in: schemas.CourseUpdate,
    current_admin: models.Admin = Depends(deps.get_current_admin_with_permission("course")),
) -> Any:
    if course := crud.course.get(db, id=course_id):
        logging.info(
            f"Admin {current_admin.user_id} ({current_admin.user.email}) is updating Course {course.id}({course.name}) "
            f"to {course_in.__dict__}"
        )
        return crud.course.update(db, db_obj=course, obj_in=course_in)
Example #29
0
def update_year(
    *,
    db: Session = Depends(deps.get_db),
    year_id: str,
    year_in: schemas.YearUpdate,
    current_admin: models.Admin = Depends(deps.get_current_admin_with_permission("year")),
) -> Any:
    if year := crud.year.get(db, year_id):
        logging.info(
            f"Admin {current_admin.user_id} ({current_admin.user.email}) is updating Year {year.id} ({year.name}) to"
            f"{year_in.__dict__}"
        )
        return crud.year.update(db, db_obj=year, obj_in=year_in)
Example #30
0
def update_timeslot(
    *,
    db: Session = Depends(deps.get_db),
    timeslot_id: str,
    timeslot_in: schemas.TimeSlotUpdate,
    current_admin: models.Admin = Depends(
        deps.get_current_admin_with_permission("school")),
) -> Any:
    if timeslot := crud.timeslot.get(db, id=timeslot_id):
        logging.info(
            f"Admin {current_admin.user_id} ({current_admin.user.email}) is updating timeslot {timeslot.id} (start - "
            f"{timeslot.start_time}, end - {timeslot.end_time}) to {timeslot_in.__dict__}"
        )
        return crud.timeslot.update(db, db_obj=timeslot, obj_in=timeslot_in)