예제 #1
0
    def _set_status(self, status: str):
        if status not in self.STATUSES:
            raise ValueError(f"invalid status {status}")

        self.status = status
        db_session.add(self)
        db_session.commit()
예제 #2
0
    def _new_request(cls, identifier: str, verification_method: str, status: str, password: str = None) -> str:
        """
        新增一条注册请求

        :param identifier: 学号/教工号
        :param verification_method: password or email
        :param status: status of the request
        :param password: if register by password, fill everyclass password here
        :return: the `request_id`
        """
        if verification_method not in (cls.METHOD_PASSWORD, cls.METHOD_EMAIL):
            raise ValueError("verification_method must be one of email and password")

        request_id = uuid.uuid4()

        extra_doc = {}
        if password:
            extra_doc.update({"password": generate_password_hash(password)})

        request = VerificationRequest(request_id=request_id, identifier=identifier, method=verification_method,
                                      status=status, extra=extra_doc)
        db_session.add(request)
        db_session.commit()

        return str(request_id)
예제 #3
0
 def new(cls, user_id: str, to_user_id: str) -> "Grant":
     grant = Grant(user_id=user_id,
                   to_user_id=to_user_id,
                   grant_type=GRANT_TYPE_VIEWING,
                   status=GRANT_STATUS_PENDING)
     db_session.add(grant)
     db_session.commit()
     return grant
예제 #4
0
 def reject(self):
     if self.status == GRANT_STATUS_PENDING:
         self.status = GRANT_STATUS_REJECTED
     else:
         raise ValueError(
             f"status {self.status} cannot be transformed to valid")
     db_session.add(self)
     db_session.commit()
예제 #5
0
    def new(cls, room_id: str, date: datetime.date, time: str, user_type: str,
            user_id: str) -> "UnavailableRoomReport":
        report = UnavailableRoomReport(room_id=room_id,
                                       date=date,
                                       time=time,
                                       reporter=user_id,
                                       reporter_type=user_type)
        db_session.add(report)
        db_session.commit()

        _, week, day = get_semester_date(date)
        redis.incr(
            f"{redis_prefix}:avail_room_occupy_fb:{week}:{day}:{time}:{room_id}",
            1)
        return report
예제 #6
0
    def import_demo_content(cls):
        with open(os.path.join(os.path.dirname(__file__), "klass.json")) as f:
            data = json.loads(f.read())
            for line in data:
                course_id, teachers = line['course_code'], line['teacher_list']

                teachers = json.loads(teachers)
                teacher_list = [t['code'] for t in teachers]

                k = KlassMeta(course_id=course_id,
                              semester='2019-2020-2',
                              score=-1,
                              teachers=teacher_list)
                db_session.add(k)
            db_session.commit()
예제 #7
0
    def new(cls, klass_id: int, user_id: str, rk: int, ra: int, fs: float,
            gr: int, comment: str):
        from everyclass.server.entity import service as entity_service
        student = entity_service.get_student(user_id)

        grade_str = ""
        groups = re.findall(r'\d+', student.klass)
        if len(groups) > 0:
            grade_str = f"{groups[0][:2]}级"

        db_session.add(
            KlassReview(klass_id=klass_id,
                        user_identifier=user_id,
                        user_nickname=f"{student.deputy}{grade_str}学生",
                        rating_knowledge=rk,
                        rating_attendance=ra,
                        final_score=fs,
                        gender_rate=gr,
                        comments=comment))
        db_session.commit()
예제 #8
0
    def add_user(cls,
                 identifier: str,
                 password: str,
                 password_encrypted: bool = False) -> None:
        """新增用户。当用户已存在时,抛出ValueError。

        :param identifier: 学号或教工号
        :param password: 密码
        :param password_encrypted: 密码是否已经被加密过了(否则会被二次加密)
        """
        if not password_encrypted:
            password_hash = generate_password_hash(password)
        else:
            password_hash = password

        user = User(identifier=identifier,
                    password=password_hash,
                    create_time=datetime.datetime.now())

        db_session.add(user)
        try:
            db_session.commit()
        except IntegrityError as e:
            raise AlreadyRegisteredError from e
 def new(cls, password: str, identifier: str):
     sp = SimplePassword(identifier=identifier, password=password)
     db_session.add(sp)
     db_session.commit()