Пример #1
0
 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
Пример #2
0
 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
Пример #3
0
 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
Пример #4
0
 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
Пример #5
0
 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
Пример #6
0
 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
Пример #7
0
 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
Пример #8
0
 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
Пример #9
0
 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
Пример #10
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