InfoScanner.py 文件源码

python
阅读 27 收藏 0 点赞 0 评论 0

项目:Albireo 作者: lordfriend 项目源码 文件源码
def __scan_current_on_air_bangumi(self):
        logger.info('start scan info of episode')
        session = SessionManager.Session()
        try:
            result = session.query(Episode, Bangumi). \
                join(Bangumi). \
                filter(Bangumi.delete_mark == None). \
                filter(Bangumi.status != Bangumi.STATUS_FINISHED)

            bgm_episode_dict = {}

            for episode, bangumi in result:
                # check terminated state to response instantly.
                if self.terminated:
                    return

                if not (bangumi.bgm_id in bgm_episode_dict):
                    # if this is not the first call for get_bgm_info,
                    # a delay should be added to prevent access the bgm api
                    # too frequently
                    if bgm_episode_dict:
                        time.sleep(20)
                    logger.info('try to get info for bangumi of %s' % str(bangumi.bgm_id))
                    (status_code, bangumi_info) = self.get_bgm_info(bangumi.bgm_id)
                    if status_code < 400:
                        bgm_episode_dict[bangumi.bgm_id] = bangumi_info

                if not (bangumi.bgm_id in bgm_episode_dict):
                    continue

                bangumi_info = bgm_episode_dict[bangumi.bgm_id]

                for eps in bangumi_info['eps']:
                    if eps['id'] == episode.bgm_eps_id:
                        if episode.name == '':
                            episode.name = eps['name']
                        if episode.name_cn == '':
                            episode.name_cn = eps['name_cn']
                        if episode.duration == '':
                            episode.duration = eps['duration']
                        # always update airdate because it can be changed.
                        if is_valid_date(eps['airdate']):
                            episode.airdate = eps['airdate']
                        break

            session.commit()
            logger.info('scan finished, will scan at next day')
        except exc.DBAPIError as db_error:
            logger.error(db_error, exc_info=True)
            # if connection is invalid rollback the session
            if db_error.connection_invalidated:
                session.rollback()
        except Exception as error:
            logger.error(error, exc_info=True)
            traceback.print_exc()
        finally:
            SessionManager.Session.remove()
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号