def vocation_set(self, stop_time: datetime, reason: str = None) -> DBResult: if self.exist(): session = NBdb().get_session() # 检查用户在假期表中是否存在 try: # 存在则设置假期状态信息 exist_status = session.query(Vocation).filter( Vocation.user_id == self.id().result).one() exist_status.status = 1 exist_status.stop_at = stop_time exist_status.reason = reason exist_status.updated_at = datetime.now() session.commit() result = DBResult(error=False, info='Success upgraded', result=0) except NoResultFound: # 不存在则假期表中添加信息 try: new_status = Vocation(user_id=self.id().result, status=1, stop_at=stop_time, reason=reason, created_at=datetime.now()) session.add(new_status) session.commit() result = DBResult(error=False, info='Success set', result=0) except Exception as e: session.rollback() result = DBResult(error=True, info=repr(e), result=-1) except MultipleResultsFound: result = DBResult(error=True, info='MultipleResultsFound', result=-1) except Exception as e: session.rollback() result = DBResult(error=True, info=repr(e), result=-1) finally: session.close() else: result = DBResult(error=True, info='User not exist', result=-1) return result
def subscription_add(self, sub: DBSubscription, group_sub_info: str = None) -> DBResult: if self.exist() and sub.exist(): session = NBdb().get_session() try: # 订阅关系已存在, 更新信息 exist_subscription = session.query(GroupSub). \ filter(GroupSub.group_id == self.id().result). \ filter(GroupSub.sub_id == sub.id().result).one() exist_subscription.group_sub_info = group_sub_info exist_subscription.updated_at = datetime.now() session.commit() result = DBResult(error=False, info='Success upgraded', result=0) except NoResultFound: # 不存在关系则添加新成员 try: subscription = GroupSub(sub_id=sub.id().result, group_id=self.id().result, group_sub_info=group_sub_info, created_at=datetime.now()) session.add(subscription) session.commit() result = DBResult(error=False, info='Success added', result=0) except Exception as e: session.rollback() result = DBResult(error=True, info=repr(e), result=-1) except MultipleResultsFound: result = DBResult(error=True, info='MultipleResultsFound', result=-1) except Exception as e: session.rollback() result = DBResult(error=True, info=repr(e), result=-1) finally: session.close() else: result = DBResult(error=True, info='Group or subscription not exist', result=-1) return result
def member_add(self, user: DBUser, user_group_nickname: str) -> DBResult: if self.exist() and user.exist(): session = NBdb().get_session() # 查询成员-群组表中用户-群关系 try: # 用户-群关系已存在, 更新用户群昵称 exist_user = session.query(UserGroup). \ filter(UserGroup.user_id == user.id().result). \ filter(UserGroup.group_id == self.id().result).one() exist_user.user_group_nickname = user_group_nickname exist_user.updated_at = datetime.now() session.commit() result = DBResult(error=False, info='Success upgraded', result=0) except NoResultFound: # 不存在关系则添加新成员 try: new_user = UserGroup( user_id=user.id().result, group_id=self.id().result, user_group_nickname=user_group_nickname, created_at=datetime.now()) session.add(new_user) session.commit() result = DBResult(error=False, info='Success added', result=0) except Exception as e: session.rollback() result = DBResult(error=True, info=repr(e), result=-1) except MultipleResultsFound: result = DBResult(error=True, info='MultipleResultsFound', result=-1) except Exception as e: session.rollback() result = DBResult(error=True, info=repr(e), result=-1) finally: session.close() else: result = DBResult(error=True, info='Group or user not exist', result=-1) return result
def skill_add(self, skill: DBSkill, skill_level: int) -> DBResult: if self.exist() and skill.exist(): session = NBdb().get_session() # 查询用户已有技能 try: # 已有技能, 更新等级 exist_skill = session.query(UserSkill). \ filter(UserSkill.skill_id == skill.id().result). \ filter(UserSkill.user_id == self.id().result).one() exist_skill.skill_level = skill_level exist_skill.updated_at = datetime.now() session.commit() result = DBResult(error=False, info='Success upgraded', result=0) except NoResultFound: # 不存在则添加新技能 try: new_skill = UserSkill(user_id=self.id().result, skill_id=skill.id().result, skill_level=skill_level, created_at=datetime.now()) session.add(new_skill) session.commit() result = DBResult(error=False, info='Success added', result=0) except Exception as e: session.rollback() result = DBResult(error=True, info=repr(e), result=-1) except MultipleResultsFound: result = DBResult(error=True, info='MultipleResultsFound', result=-1) except Exception as e: session.rollback() result = DBResult(error=True, info=repr(e), result=-1) finally: session.close() else: result = DBResult(error=True, info='Skill or user not exist', result=-1) return result
def add(self, title: str, description: str, tags: str, illust_id: str, url: str) -> DBResult: session = NBdb().get_session() try: exist_pixivision = session.query(Pixivision).filter( Pixivision.aid == self.aid).one() exist_pixivision.title = title exist_pixivision.description = description exist_pixivision.tags = tags exist_pixivision.illust_id = illust_id exist_pixivision.url = url exist_pixivision.updated_at = datetime.now() session.commit() result = DBResult(error=False, info='Success upgrade', result=0) except NoResultFound: try: # 动态表中添加新动态 new_pixivision = Pixivision(aid=self.aid, title=title, description=description, tags=tags, illust_id=illust_id, url=url, created_at=datetime.now()) session.add(new_pixivision) session.commit() result = DBResult(error=False, info='Success added', result=0) except Exception as e: session.rollback() result = DBResult(error=True, info=repr(e), result=-1) except MultipleResultsFound: result = DBResult(error=True, info='MultipleResultsFound', result=-1) except Exception as e: session.rollback() result = DBResult(error=True, info=repr(e), result=-1) finally: session.close() return result
def add_user_cool_down_event(cls, plugin: str, user_id: int, stop_at: datetime, description: str = None) -> DBResult: session = NBdb().get_session() try: exist_event = session.query(CoolDownEvent). \ filter(CoolDownEvent.plugin == plugin). \ filter(CoolDownEvent.event_type == 'user').\ filter(CoolDownEvent.user_id == user_id).one() exist_event.stop_at = stop_at exist_event.description = description exist_event.updated_at = datetime.now() session.commit() result = DBResult(error=False, info='Success upgraded', result=0) except NoResultFound: try: new_event = CoolDownEvent(event_type='user', plugin=plugin, user_id=user_id, stop_at=stop_at, description=description, created_at=datetime.now()) session.add(new_event) session.commit() result = DBResult(error=False, info='Success added', result=0) except Exception as e: session.rollback() result = DBResult(error=True, info=repr(e), result=-1) except MultipleResultsFound: result = DBResult(error=True, info='MultipleResultsFound', result=-1) except Exception as e: session.rollback() result = DBResult(error=True, info=repr(e), result=-1) finally: session.close() return result
def add(self, server_host: str, password: str, port: int = 993) -> DBResult: session = NBdb().get_session() try: # 已存在则更新 exist_box = session.query(EmailBox).filter( EmailBox.address == self.address).one() exist_box.server_host = server_host exist_box.port = port exist_box.password = password exist_box.updated_at = datetime.now() session.commit() result = DBResult(error=False, info='Success upgraded', result=0) except NoResultFound: # 不存在则添加 try: new_box = EmailBox(address=self.address, server_host=server_host, password=password, port=port, created_at=datetime.now()) session.add(new_box) session.commit() result = DBResult(error=False, info='Success added', result=0) except Exception as e: session.rollback() result = DBResult(error=True, info=repr(e), result=-1) except MultipleResultsFound: result = DBResult(error=True, info='MultipleResultsFound', result=-1) except Exception as e: session.rollback() result = DBResult(error=True, info=repr(e), result=-1) finally: session.close() return result
def add(self, nickname: str) -> DBResult: session = NBdb().get_session() try: # 用户已存在则更新成员表昵称 exist_user = session.query(User).filter(User.qq == self.qq).one() if exist_user.nickname == nickname: result = DBResult(error=False, info='Success upgraded', result=0) else: exist_user.nickname = nickname exist_user.updated_at = datetime.now() session.commit() result = DBResult(error=False, info='Success upgraded', result=0) except NoResultFound: # 不存在则成员表中添加新成员 try: new_user = User(qq=self.qq, nickname=nickname, created_at=datetime.now()) session.add(new_user) session.commit() result = DBResult(error=False, info='Success added', result=0) except Exception as e: session.rollback() result = DBResult(error=True, info=repr(e), result=-1) except MultipleResultsFound: result = DBResult(error=True, info='MultipleResultsFound', result=-1) except Exception as e: session.rollback() result = DBResult(error=True, info=repr(e), result=-1) finally: session.close() return result
def set(self, allow_tag: int, deny_tag: int, auth_info: str = None) -> DBResult: session = NBdb().get_session() try: # 已存在则更新 if self.auth_type == 'user': auth = session.query(AuthUser).join(User). \ filter(AuthUser.user_id == User.id). \ filter(User.qq == self.auth_id). \ filter(AuthUser.auth_node == self.auth_node).one() auth.allow_tag = allow_tag auth.deny_tag = deny_tag auth.auth_info = auth_info auth.updated_at = datetime.now() session.commit() result = DBResult(error=False, info='Success upgraded', result=0) elif self.auth_type == 'group': auth = session.query(AuthGroup).join(Group). \ filter(AuthGroup.group_id == Group.id). \ filter(Group.group_id == self.auth_id). \ filter(AuthGroup.auth_node == self.auth_node).one() auth.allow_tag = allow_tag auth.deny_tag = deny_tag auth.auth_info = auth_info auth.updated_at = datetime.now() session.commit() result = DBResult(error=False, info='Success upgraded', result=0) else: result = DBResult(error=True, info='Auth type error', result=-1) except NoResultFound: try: # 不存在则添加信息 if self.auth_type == 'user': user = DBUser(user_id=self.auth_id) if not user.exist(): result = DBResult(error=True, info='User not exist', result=-1) else: auth = AuthUser(user_id=user.id().result, auth_node=self.auth_node, allow_tag=allow_tag, deny_tag=deny_tag, auth_info=auth_info, created_at=datetime.now()) session.add(auth) session.commit() result = DBResult(error=False, info='Success set', result=0) elif self.auth_type == 'group': group = DBGroup(group_id=self.auth_id) if not group.exist(): result = DBResult(error=True, info='Group not exist', result=-1) else: auth = AuthGroup(group_id=group.id().result, auth_node=self.auth_node, allow_tag=allow_tag, deny_tag=deny_tag, auth_info=auth_info, created_at=datetime.now()) session.add(auth) session.commit() result = DBResult(error=False, info='Success set', result=0) else: result = DBResult(error=True, info='Auth type error', result=-1) except Exception as e: session.rollback() result = DBResult(error=True, info=repr(e), result=-1) except MultipleResultsFound: result = DBResult(error=True, info='MultipleResultsFound', result=-1) except Exception as e: session.rollback() result = DBResult(error=True, info=repr(e), result=-1) finally: session.close() return result
def add(self, uid: int, title: str, uname: str, nsfw_tag: int, tags: List[str], url: str) -> DBResult: session = NBdb().get_session() # 将tag写入pixiv_tag表 for tag in tags: _tag = DBPixivtag(tagname=tag) _tag.add() # 将作品信息写入pixiv_illust表 try: exist_illust = session.query(Pixiv).filter(Pixiv.pid == self.pid).one() exist_illust.title = title exist_illust.uname = uname if nsfw_tag > exist_illust.nsfw_tag: exist_illust.nsfw_tag = nsfw_tag exist_illust.tags = repr(tags) exist_illust.updated_at = datetime.now() session.commit() result = DBResult(error=False, info='Exist illust updated', result=0) except NoResultFound: try: new_illust = Pixiv(pid=self.pid, uid=uid, title=title, uname=uname, url=url, nsfw_tag=nsfw_tag, tags=repr(tags), created_at=datetime.now()) session.add(new_illust) session.commit() # 写入tag_pixiv关联表 # 获取本作品在illust表中的id _illust_id_res = self.id() if not _illust_id_res.success(): raise Exception('illust not find or add failed') _illust_id = _illust_id_res.result # 根据作品tag依次写入tag_illust表 for tag in tags: _tag = DBPixivtag(tagname=tag) _tag_id_res = _tag.id() if not _tag_id_res.success(): continue _tag_id = _tag_id_res.result try: new_tag_illust = PixivT2I(illust_id=_illust_id, tag_id=_tag_id, created_at=datetime.now()) session.add(new_tag_illust) session.commit() except Exception as e: session.rollback() try: # 避免以后查询不到,写入失败就将illust信息一并删除 _exist_illust = session.query(Pixiv).filter(Pixiv.pid == self.pid).one() session.delete(_exist_illust) session.commit() raise e except Exception as e: # 这里还出错就没救了x session.rollback() raise e result = DBResult(error=False, info='Success added', result=0) except Exception as e: session.rollback() result = DBResult(error=True, info=repr(e), result=-1) except MultipleResultsFound: result = DBResult(error=True, info='MultipleResultsFound', result=-1) except Exception as e: session.rollback() result = DBResult(error=True, info=repr(e), result=-1) finally: session.close() return result