示例#1
0
 def delete(self) -> DBResult:
     session = NBdb().get_session()
     try:
         # 清空群成员表中该用户
         for exist_user in session.query(UserGroup).filter(
                 UserGroup.user_id == self.id().result).all():
             session.delete(exist_user)
         # 删除技能
         self.skill_clear()
         # 删除状态和假期
         self.status_del()
         exist_user = session.query(User).filter(User.qq == self.qq).one()
         session.delete(exist_user)
         session.commit()
         result = DBResult(error=False, info='Success', result=0)
     except NoResultFound:
         result = DBResult(error=True, info='NoResultFound', 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
示例#2
0
 def subscription_del(self, sub: DBSubscription) -> 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()
             session.delete(exist_subscription)
             session.commit()
             result = DBResult(error=False, info='Success', result=0)
         except NoResultFound:
             result = DBResult(error=True, info='NoResultFound', 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
示例#3
0
 def skill_del(self, skill: DBSkill) -> 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()
             session.delete(exist_skill)
             session.commit()
             result = DBResult(error=False, info='Success', result=0)
         except NoResultFound:
             result = DBResult(error=True, info='NoResultFound', 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
示例#4
0
 def mailbox_del(self, mailbox: DBEmailBox) -> DBResult:
     if self.exist() and mailbox.exist():
         session = NBdb().get_session()
         try:
             # 群邮箱已存在, 更新信息
             exist_mailbox = session.query(GroupEmailBox). \
                 filter(GroupEmailBox.group_id == self.id().result). \
                 filter(GroupEmailBox.email_box_id == mailbox.id().result).one()
             session.delete(exist_mailbox)
             session.commit()
             result = DBResult(error=False, info='Success', result=0)
         except NoResultFound:
             result = DBResult(error=True, info='NoResultFound', 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 mailbox not exist',
                           result=-1)
     return result
示例#5
0
 def delete(self) -> 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()
             session.delete(auth)
             session.commit()
             result = DBResult(error=False, info='Success', 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()
             session.delete(auth)
             session.commit()
             result = DBResult(error=False, info='Success', result=0)
         else:
             result = DBResult(error=True,
                               info='Auth type error',
                               result=-1)
     except NoResultFound:
         result = DBResult(error=True, info='NoResultFound', 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
示例#6
0
 def member_del(self, user: DBUser) -> 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()
             session.delete(exist_user)
             session.commit()
             result = DBResult(error=False, info='Success', result=0)
         except NoResultFound:
             result = DBResult(error=True, info='NoResultFound', 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
示例#7
0
 def clear_time_out_event(cls):
     session = NBdb().get_session()
     events = session.query(CoolDownEvent).order_by(CoolDownEvent.id).all()
     for event in events:
         try:
             if datetime.now() >= event.stop_at:
                 session.delete(event)
                 session.commit()
         except Exception:
             session.rollback()
             continue
示例#8
0
 def able_member_clear(self) -> DBResult:
     if self.exist():
         session = NBdb().get_session()
         # 查询成员-技能表中用户-技能关系
         try:
             for exist_user_skill in session.query(UserSkill).filter(
                     UserSkill.skill_id == self.id().result).all():
                 session.delete(exist_user_skill)
             session.commit()
             result = DBResult(error=False, info='Success', result=0)
         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 not exist', result=-1)
     return result
示例#9
0
 def sub_group_clear(self) -> DBResult:
     if self.exist():
         session = NBdb().get_session()
         try:
             for exist_group_sub in session.query(GroupSub).filter(
                     GroupSub.sub_id == self.id().result).all():
                 session.delete(exist_group_sub)
             session.commit()
             result = DBResult(error=False, info='Success', result=0)
         except Exception as e:
             session.rollback()
             result = DBResult(error=True, info=repr(e), result=-1)
         finally:
             session.close()
     else:
         result = DBResult(error=True,
                           info='Subscription not exist',
                           result=-1)
     return result
示例#10
0
 def status_del(self) -> DBResult:
     if self.exist():
         session = NBdb().get_session()
         try:
             exist_status = session.query(Vocation).filter(
                 Vocation.user_id == self.id().result).one()
             session.delete(exist_status)
             session.commit()
             result = DBResult(error=False, info='Success', result=0)
         except Exception as e:
             session.rollback()
             result = DBResult(error=True, info=repr(e), result=-1)
         finally:
             session.close()
     else:
         result = DBResult(error=True,
                           info='Status or user not exist',
                           result=-1)
     return result
示例#11
0
 def delete(self) -> DBResult:
     session = NBdb().get_session()
     try:
         exist_box = session.query(EmailBox).filter(
             EmailBox.address == self.address).one()
         session.delete(exist_box)
         session.commit()
         result = DBResult(error=False, info='Success', result=0)
     except NoResultFound:
         result = DBResult(error=True, info='NoResultFound', 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
示例#12
0
 def mailbox_clear(self) -> DBResult:
     if self.exist():
         session = NBdb().get_session()
         # 查询成员-群组表中用户-群关系
         try:
             for exist_mailbox in \
                     session.query(GroupEmailBox).filter(GroupEmailBox.group_id == self.id().result).all():
                 session.delete(exist_mailbox)
             session.commit()
             result = DBResult(error=False, info='Success', result=0)
         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 mailbox not exist',
                           result=-1)
     return result
示例#13
0
 def delete(self) -> DBResult:
     session = NBdb().get_session()
     try:
         # 清空持已订阅这个sub的群组
         self.sub_group_clear()
         exist_subscription = session.query(Subscription).filter(Subscription.sub_type == self.sub_type).\
             filter(Subscription.sub_id == self.sub_id).one()
         session.delete(exist_subscription)
         session.commit()
         result = DBResult(error=False, info='Success', result=0)
     except NoResultFound:
         result = DBResult(error=True, info='NoResultFound', 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
示例#14
0
 def delete(self) -> DBResult:
     session = NBdb().get_session()
     try:
         # 清空持有这个技能人的技能
         self.able_member_clear()
         exist_skill = session.query(Skill).filter(
             Skill.name == self.name).one()
         session.delete(exist_skill)
         session.commit()
         result = DBResult(error=False, info='Success', result=0)
     except NoResultFound:
         result = DBResult(error=True, info='NoResultFound', 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
示例#15
0
 def subscription_clear_by_type(self, sub_type: int) -> DBResult:
     if self.exist():
         session = NBdb().get_session()
         # 查询成员-群组表中用户-群关系
         try:
             for exist_group_sub in session.query(GroupSub).join(Subscription).\
                     filter(GroupSub.sub_id == Subscription.id). \
                     filter(Subscription.sub_type == sub_type). \
                     filter(GroupSub.group_id == self.id().result).all():
                 session.delete(exist_group_sub)
             session.commit()
             result = DBResult(error=False, info='Success', result=0)
         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
示例#16
0
 def delete(self) -> DBResult:
     session = NBdb().get_session()
     try:
         # 清空群成员列表
         self.member_clear()
         # 清空订阅
         self.subscription_clear()
         exist_group = session.query(Group).filter(
             Group.group_id == self.group_id).one()
         session.delete(exist_group)
         session.commit()
         result = DBResult(error=False, info='Success', result=0)
     except NoResultFound:
         result = DBResult(error=True, info='NoResultFound', 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
示例#17
0
    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