def filter_(name, subtitle=None, include=None, exclude=None, regex=None): result = {'status': 'success', 'message': ''} try: bangumi_obj = Bangumi.fuzzy_get(name=name) except Bangumi.DoesNotExist: result['status'] = 'error' result['message'] = 'Bangumi {0} does not exist.'.format(name) return result try: Followed.get(bangumi_name=bangumi_obj.name) except Followed.DoesNotExist as exc: result['status'] = 'error' result['message'] = 'Bangumi {name} has not subscribed, try \'bgmi add "{name}"\'.' \ .format(name=bangumi_obj.name) return result followed_filter_obj, is_this_obj_created = Filter.get_or_create(bangumi_name=name) if is_this_obj_created: followed_filter_obj.save() if subtitle is not None: subtitle = [s.strip() for s in subtitle.split(',')] subtitle = [s['id'] for s in Subtitle.get_subtitle_by_name(subtitle)] subtitle_list = [s.split('.')[0] for s in bangumi_obj.subtitle_group.split(', ') if '.' in s] subtitle_list.extend(bangumi_obj.subtitle_group.split(', ')) subtitle = filter(lambda s: s in subtitle_list, subtitle) subtitle = ', '.join(subtitle) followed_filter_obj.subtitle = subtitle if include is not None: followed_filter_obj.include = include if exclude is not None: followed_filter_obj.exclude = exclude if regex is not None: followed_filter_obj.regex = regex followed_filter_obj.save() subtitle_list = list(map(lambda s: s['name'], Subtitle.get_subtitle_by_id(bangumi_obj.subtitle_group.split(', ')))) result['data'] = { 'name': name, 'subtitle_group': subtitle_list, 'followed': list(map(lambda s: s['name'], Subtitle.get_subtitle_by_id(followed_filter_obj.subtitle.split(', '))) if followed_filter_obj.subtitle else []), 'include': followed_filter_obj.include, 'exclude': followed_filter_obj.exclude, 'regex': followed_filter_obj.regex, } logger.debug(result) return result
def delete(name='', clear_all=False, batch=False): """ :param name: :type name: unicode :param clear_all: :type clear_all: bool :param batch: :type batch: bool :return: """ # action delete # just delete subscribed bangumi or clear all the subscribed bangumi result = {} logger.debug('delete {}'.format(name)) if clear_all: if Followed.delete_followed(batch=batch): result['status'] = "warning" result['message'] = 'all subscriptions have been deleted' else: print_error('user canceled') elif name: try: followed = Followed.get(bangumi_name=name) followed.status = STATUS_DELETED followed.save() result['status'] = 'warning' result['message'] = 'Bangumi {} has been deleted'.format(name) except Followed.DoesNotExist: result['status'] = 'error' result['message'] = 'Bangumi %s does not exist' % name else: result['status'] = 'warning' result['message'] = 'Nothing has been done.' logger.debug(result) return result
def mark(name, episode): """ :param name: name of the bangumi you want to mark :type name: str :param episode: bangumi episode you want to mark :type episode: int :return: result :rtype: dict[status: str,message: str] """ result = {} try: followed_obj = Followed.get(bangumi_name=name) except Followed.DoesNotExist: runner = ScriptRunner() followed_obj = runner.get_model(name) if not followed_obj: result['status'] = 'error' result[ 'message'] = 'Subscribe or Script <{}> does not exist.'.format( name) return result if episode is not None: followed_obj.episode = episode followed_obj.save() result['status'] = 'success' result['message'] = '{} has been mark as episode: {}'.format( name, episode) else: # episode is None result['status'] = 'info' result['message'] = '{}, episode: {}'.format(name, followed_obj.episode) return result
def delete(name="", clear_all=False, batch=False): """ :param name: :type name: unicode :param clear_all: :type clear_all: bool :param batch: :type batch: bool :return: """ # action delete # just delete subscribed bangumi or clear all the subscribed bangumi result = {} logger.debug("delete {}".format(name)) if clear_all: if Followed.delete_followed(batch=batch): result["status"] = "warning" result["message"] = "all subscriptions have been deleted" else: print_error("user canceled") elif name: try: followed = Followed.get(bangumi_name=name) followed.status = STATUS_DELETED followed.save() result["status"] = "warning" result["message"] = "Bangumi {} has been deleted".format(name) except Followed.DoesNotExist: result["status"] = "error" result["message"] = "Bangumi %s does not exist" % name else: result["status"] = "warning" result["message"] = "Nothing has been done." logger.debug(result) return result
def mark(name: str, episode: int) -> ControllerResult: """ :param name: name of the bangumi you want to mark :param episode: bangumi episode you want to mark """ result = {} try: followed_obj = Followed.get(bangumi_name=name) except Followed.DoesNotExist: runner = ScriptRunner() followed_obj = runner.get_model(name) # type: ignore if not followed_obj: result["status"] = "error" result["message"] = f"Subscribe or Script <{name}> does not exist." return result if episode is not None: followed_obj.episode = episode followed_obj.save() result["status"] = "success" result["message"] = f"{name} has been mark as episode: {episode}" else: # episode is None result["status"] = "info" result["message"] = f"{name}, episode: {followed_obj.episode}" return result
def delete(name: str = "", clear_all: bool = False, batch: bool = False) -> ControllerResult: """ :param name: :param clear_all: :param batch: """ # action delete # just delete subscribed bangumi or clear all the subscribed bangumi result = {} logger.debug("delete %s", name) if clear_all: if Followed.delete_followed(batch=batch): result["status"] = "warning" result["message"] = "all subscriptions have been deleted" else: print_error("user canceled") elif name: try: followed = Followed.get(bangumi_name=name) followed.status = STATUS_DELETED followed.save() result["status"] = "warning" result["message"] = f"Bangumi {name} has been deleted" except Followed.DoesNotExist: result["status"] = "error" result["message"] = f"Bangumi {name} does not exist" else: result["status"] = "warning" result["message"] = "Nothing has been done." logger.debug(result) return result
def mark(name, episode): """ :param name: name of the bangumi you want to mark :type name: str :param episode: bangumi episode you want to mark :type episode: int :return: result :rtype: dict[status: str,message: str] """ result = {} try: followed_obj = Followed.get(bangumi_name=name) except Followed.DoesNotExist: runner = ScriptRunner() followed_obj = runner.get_model(name) if not followed_obj: result['status'] = 'error' result['message'] = 'Subscribe or Script <{}> does not exist.'.format(name) return result if episode is not None: followed_obj.episode = episode followed_obj.save() result['status'] = 'success' result['message'] = '{} has been mark as episode: {}'.format(name, episode) else: # episode is None result['status'] = 'info' result['message'] = '{}, episode: {}'.format(name, followed_obj.episode) return result
def fetch_(ret): try: bangumi_obj = Bangumi.get(name=ret.name) except Bangumi.DoesNotExist: print_error('Bangumi {0} not exist'.format(ret.name)) return try: Followed.get(bangumi_name=bangumi_obj.name) except Followed.DoesNotExist: print_error('Bangumi {0} is not followed'.format(ret.name)) return followed_filter_obj = Filter.get(bangumi_name=ret.name) print_filter(followed_filter_obj) print_info('Fetch bangumi {0} ...'.format(bangumi_obj.name)) _, data = website.get_maximum_episode(bangumi_obj, ignore_old_row=False if ret.not_ignore else True) if not data: print_warning('Nothing.') for i in data: print_success(i['title'])
def fetch_(ret): try: bangumi_obj = Bangumi.get(name=ret.name) except Bangumi.DoesNotExist: print_error('Bangumi {0} not exist'.format(ret.name)) return try: Followed.get(bangumi_name=bangumi_obj.name) except Followed.DoesNotExist: print_error('Bangumi {0} is not followed'.format(ret.name)) return followed_filter_obj = Filter.get(bangumi_name=ret.name) print_filter(followed_filter_obj) print_info('Fetch bangumi {0} ...'.format(bangumi_obj.name)) _, data = website.get_maximum_episode( bangumi_obj, ignore_old_row=False if ret.not_ignore else True) if not data: print_warning('Nothing.') for i in data: print_success(i['title'])
def fetch_(ret: Any) -> None: try: bangumi_obj = Bangumi.get(name=ret.name) except Bangumi.DoesNotExist: print_error(f"Bangumi {ret.name} not exist") return try: Followed.get(bangumi_name=bangumi_obj.name) except Followed.DoesNotExist: print_error(f"Bangumi {ret.name} is not followed") return followed_filter_obj = Filter.get(bangumi_name=ret.name) print_filter(followed_filter_obj) print_info(f"Fetch bangumi {bangumi_obj.name} ...") _, data = website.get_maximum_episode( bangumi_obj, ignore_old_row=not bool(ret.not_ignore)) if not data: print_warning("Nothing.") for i in data: print_success(i.title)
def status_(name, status=STATUS_DELETED): result = {'status': 'success', 'message': ''} if not status in FOLLOWED_STATUS or not status: result['status'] = 'error' result['message'] = 'Invalid status: {0}'.format(status) return result status = int(status) try: followed_obj = Followed.get(bangumi_name=name) except Followed.DoesNotExist: result['status'] = 'error' result['message'] = 'Followed<{0}> does not exists'.format(name) return result followed_obj.status = status followed_obj.save() result['message'] = 'Followed<{0}> has been marked as status {1}'.format(name, status) return result
def status_(name: str, status: int = STATUS_DELETED) -> ControllerResult: result = {"status": "success", "message": ""} if (status not in FOLLOWED_STATUS) or (not status): result["status"] = "error" result["message"] = f"Invalid status: {status}" return result status = int(status) try: followed_obj = Followed.get(bangumi_name=name) except Followed.DoesNotExist: result["status"] = "error" result["message"] = f"Followed<{name}> does not exists" return result followed_obj.status = status followed_obj.save() result["message"] = f"Followed<{name}> has been marked as status {status}" return result
def status_(name, status=STATUS_DELETED): result = {'status': 'success', 'message': ''} if not status in FOLLOWED_STATUS or not status: result['status'] = 'error' result['message'] = 'Invalid status: {0}'.format(status) return result status = int(status) try: followed_obj = Followed.get(bangumi_name=name) except Followed.DoesNotExist: result['status'] = 'error' result['message'] = 'Followed<{0}> does not exists'.format(name) return result followed_obj.status = status followed_obj.save() result['message'] = 'Followed<{0}> has been marked as status {1}'.format( name, status) return result
def status_(name, status=STATUS_DELETED): result = {"status": "success", "message": ""} if not status in FOLLOWED_STATUS or not status: result["status"] = "error" result["message"] = "Invalid status: {}".format(status) return result status = int(status) try: followed_obj = Followed.get(bangumi_name=name) except Followed.DoesNotExist: result["status"] = "error" result["message"] = "Followed<{}> does not exists".format(name) return result followed_obj.status = status followed_obj.save() result["message"] = "Followed<{}> has been marked as status {}".format( name, status) return result
def update(name, download=None, not_ignore=False): logger.debug( "updating bangumi info with args: download: {}".format(download)) result = { "status": "info", "message": "", "data": { "updated": [], "downloaded": [] }, } ignore = not bool(not_ignore) print_info("marking bangumi status ...") now = int(time.time()) for i in Followed.get_all_followed(): if i["updated_time"] and int(i["updated_time"] + 60 * 60 * 24) < now: followed_obj = Followed.get(bangumi_name=i["bangumi_name"]) followed_obj.status = STATUS_FOLLOWED followed_obj.save() for script in ScriptRunner().scripts: obj = script.Model().obj if obj.updated_time and int(obj.updated_time + 60 * 60 * 24) < now: obj.status = STATUS_FOLLOWED obj.save() print_info("updating subscriptions ...") download_queue = [] if download: if not name: print_warning("No specified bangumi, ignore `--download` option") if len(name) > 1: print_warning( "Multiple specified bangumi, ignore `--download` option") if not name: updated_bangumi_obj = Followed.get_all_followed() else: updated_bangumi_obj = [] for i in name: try: f = Followed.get(bangumi_name=i) f = model_to_dict(f) updated_bangumi_obj.append(f) except DoesNotExist: pass runner = ScriptRunner() script_download_queue = runner.run() for subscribe in updated_bangumi_obj: print_info("fetching %s ..." % subscribe["bangumi_name"]) try: bangumi_obj = Bangumi.get(name=subscribe["bangumi_name"]) except Bangumi.DoesNotExist: print_error( "Bangumi<{}> does not exists.".format( subscribe["bangumi_name"]), exit_=False, ) continue try: followed_obj = Followed.get(bangumi_name=subscribe["bangumi_name"]) except Followed.DoesNotExist: print_error( "Bangumi<{}> is not followed.".format( subscribe["bangumi_name"]), exit_=False, ) continue episode, all_episode_data = website.get_maximum_episode( bangumi=bangumi_obj, ignore_old_row=ignore, max_page=1) if (episode.get("episode") > subscribe["episode"]) or (len(name) == 1 and download): if len(name) == 1 and download: episode_range = download else: episode_range = range(subscribe["episode"] + 1, episode.get("episode", 0) + 1) print_success("%s updated, episode: %d" % (subscribe["bangumi_name"], episode["episode"])) followed_obj.episode = episode["episode"] followed_obj.status = STATUS_UPDATED followed_obj.updated_time = int(time.time()) followed_obj.save() result["data"]["updated"].append({ "bangumi": subscribe["bangumi_name"], "episode": episode["episode"], }) for i in episode_range: for epi in all_episode_data: if epi["episode"] == i: download_queue.append(epi) break if download is not None: result["data"]["downloaded"] = download_queue download_prepare(download_queue) download_prepare(script_download_queue) print_info("Re-downloading ...") download_prepare( Download.get_all_downloads(status=STATUS_NOT_DOWNLOAD)) return result
def filter_( name: str, subtitle: Optional[str] = None, include: Optional[str] = None, exclude: Optional[str] = None, regex: Optional[str] = None, ) -> ControllerResult: result = {"status": "success", "message": ""} # type: Dict[str, Any] try: bangumi_obj = Bangumi.fuzzy_get(name=name) except Bangumi.DoesNotExist: result["status"] = "error" result["message"] = f"Bangumi {name} does not exist." return result try: Followed.get(bangumi_name=bangumi_obj.name) except Followed.DoesNotExist: result["status"] = "error" result[ "message"] = "Bangumi {name} has not subscribed, try 'bgmi add \"{name}\"'.".format( name=bangumi_obj.name) return result followed_filter_obj, is_this_obj_created = Filter.get_or_create( bangumi_name=bangumi_obj.name) if is_this_obj_created: followed_filter_obj.save() if subtitle is not None: _subtitle = [s.strip() for s in subtitle.split(",")] _subtitle = [s["id"] for s in Subtitle.get_subtitle_by_name(_subtitle)] subtitle_list = [ s.split(".")[0] for s in bangumi_obj.subtitle_group.split(", ") if "." in s ] subtitle_list.extend(bangumi_obj.subtitle_group.split(", ")) followed_filter_obj.subtitle = ", ".join( filter(lambda s: s in subtitle_list, _subtitle)) if include is not None: followed_filter_obj.include = include if exclude is not None: followed_filter_obj.exclude = exclude if regex is not None: followed_filter_obj.regex = regex followed_filter_obj.save() subtitle_list = [ s["name"] for s in Subtitle.get_subtitle_by_id( bangumi_obj.subtitle_group.split(", ")) ] result["data"] = { "name": bangumi_obj.name, "subtitle_group": subtitle_list, "followed": [ s["name"] for s in Subtitle.get_subtitle_by_id( followed_filter_obj.subtitle.split(", ")) ] if followed_filter_obj.subtitle else [], "include": followed_filter_obj.include, "exclude": followed_filter_obj.exclude, "regex": followed_filter_obj.regex, } logger.debug(result) return result
def update(name: List[str], download: Any = None, not_ignore: bool = False) -> ControllerResult: logger.debug("updating bangumi info with args: download: %r", download) result: Dict[str, Any] = { "status": "info", "message": "", "data": { "updated": [], "downloaded": [] }, } ignore = not bool(not_ignore) print_info("marking bangumi status ...") now = int(time.time()) for i in Followed.get_all_followed(): if i["updated_time"] and int(i["updated_time"] + 60 * 60 * 24) < now: followed_obj = Followed.get(bangumi_name=i["bangumi_name"]) followed_obj.status = STATUS_FOLLOWED followed_obj.save() for script in ScriptRunner().scripts: obj = script.Model().obj if obj.updated_time and int(obj.updated_time + 60 * 60 * 24) < now: obj.status = STATUS_FOLLOWED obj.save() print_info("updating subscriptions ...") download_queue = [] if download: if not name: print_warning("No specified bangumi, ignore `--download` option") if len(name) > 1: print_warning( "Multiple specified bangumi, ignore `--download` option") if not name: updated_bangumi_obj = Followed.get_all_followed() else: updated_bangumi_obj = [] for n in name: try: f = Followed.get(bangumi_name=n) f = model_to_dict(f) updated_bangumi_obj.append(f) except DoesNotExist: pass runner = ScriptRunner() script_download_queue = runner.run() for subscribe in updated_bangumi_obj: print_info(f"fetching {subscribe['bangumi_name']} ...") try: bangumi_obj = Bangumi.get(name=subscribe["bangumi_name"]) except Bangumi.DoesNotExist: print_error( "Bangumi<{}> does not exists.".format( subscribe["bangumi_name"]), exit_=False, ) continue try: followed_obj = Followed.get(bangumi_name=subscribe["bangumi_name"]) except Followed.DoesNotExist: print_error( "Bangumi<{}> is not followed.".format( subscribe["bangumi_name"]), exit_=False, ) continue try: episode, all_episode_data = website.get_maximum_episode( bangumi=bangumi_obj, ignore_old_row=ignore, max_page=int(MAX_PAGE)) except requests.exceptions.ConnectionError as e: print_warning(f"error {e} to fetch {bangumi_obj.name}, skip") continue if (episode > subscribe["episode"]) or (len(name) == 1 and download): if len(name) == 1 and download: episode_range = download else: episode_range = range(subscribe["episode"] + 1, episode + 1) print_success( f"{subscribe['bangumi_name']} updated, episode: {episode:d}" ) followed_obj.episode = episode followed_obj.status = STATUS_UPDATED followed_obj.updated_time = int(time.time()) followed_obj.save() result["data"]["updated"].append({ "bangumi": subscribe["bangumi_name"], "episode": episode }) for i in episode_range: for epi in all_episode_data: if epi.episode == i: download_queue.append(epi) break if download is not None: result["data"]["downloaded"] = download_queue download_prepare(download_queue) download_prepare(script_download_queue) print_info("Re-downloading ...") download_prepare([ Episode( **{ key: value for key, value in x.items() if key not in ["id", "status"] }) for x in Download.get_all_downloads(status=STATUS_NOT_DOWNLOAD) ]) return result
def update(name, download=None, not_ignore=False): logger.debug('updating bangumi info with args: download: {}'.format(download)) result = {'status': 'info', 'message': '', 'data': {'updated': [], 'downloaded': []}} ignore = not bool(not_ignore) print_info('marking bangumi status ...') now = int(time.time()) for i in Followed.get_all_followed(): if i['updated_time'] and int(i['updated_time'] + 60 * 60 * 24) < now: followed_obj = Followed.get(bangumi_name=i['bangumi_name']) followed_obj.status = STATUS_FOLLOWED followed_obj.save() for script in ScriptRunner().scripts: obj = script.Model().obj if obj.updated_time and int(obj.updated_time + 60 * 60 * 24) < now: obj.status = STATUS_FOLLOWED obj.save() print_info('updating subscriptions ...') download_queue = [] if download: if not name: print_warning('No specified bangumi, ignore `--download` option') if len(name) > 1: print_warning('Multiple specified bangumi, ignore `--download` option') if not name: updated_bangumi_obj = Followed.get_all_followed() else: updated_bangumi_obj = [] for i in name: try: f = Followed.get(bangumi_name=i) f = model_to_dict(f) updated_bangumi_obj.append(f) except DoesNotExist: pass runner = ScriptRunner() script_download_queue = runner.run() for subscribe in updated_bangumi_obj: print_info('fetching %s ...' % subscribe['bangumi_name']) try: bangumi_obj = Bangumi.get(name=subscribe['bangumi_name']) except Bangumi.DoesNotExist: print_error('Bangumi<{0}> does not exists.'.format(subscribe['bangumi_name']), exit_=False) continue try: followed_obj = Followed.get(bangumi_name=subscribe['bangumi_name']) except Followed.DoesNotExist: print_error('Bangumi<{0}> is not followed.'.format(subscribe['bangumi_name']), exit_=False) continue episode, all_episode_data = website.get_maximum_episode(bangumi=bangumi_obj, ignore_old_row=ignore, max_page=1) if (episode.get('episode') > subscribe['episode']) or (len(name) == 1 and download): if len(name) == 1 and download: episode_range = download else: episode_range = range( subscribe['episode'] + 1, episode.get('episode', 0) + 1) print_success('%s updated, episode: %d' % (subscribe['bangumi_name'], episode['episode'])) followed_obj.episode = episode['episode'] followed_obj.status = STATUS_UPDATED followed_obj.updated_time = int(time.time()) followed_obj.save() result['data']['updated'].append({'bangumi': subscribe['bangumi_name'], 'episode': episode['episode']}) for i in episode_range: for epi in all_episode_data: if epi['episode'] == i: download_queue.append(epi) break if download is not None: result['data']['downloaded'] = download_queue download_prepare(download_queue) download_prepare(script_download_queue) print_info('Re-downloading ...') download_prepare(Download.get_all_downloads( status=STATUS_NOT_DOWNLOAD)) return result
def update(name, download=None, not_ignore=False): logger.debug( 'updating bangumi info with args: download: {}'.format(download)) result = { 'status': 'info', 'message': '', 'data': { 'updated': [], 'downloaded': [] } } ignore = not bool(not_ignore) print_info('marking bangumi status ...') now = int(time.time()) for i in Followed.get_all_followed(): if i['updated_time'] and int(i['updated_time'] + 60 * 60 * 24) < now: followed_obj = Followed.get(bangumi_name=i['bangumi_name']) followed_obj.status = STATUS_FOLLOWED followed_obj.save() for script in ScriptRunner().scripts: obj = script.Model().obj if obj.updated_time and int(obj.updated_time + 60 * 60 * 24) < now: obj.status = STATUS_FOLLOWED obj.save() print_info('updating bangumi data ...') website.fetch(save=True, group_by_weekday=False) print_info('updating subscriptions ...') download_queue = [] if download: if not name: print_warning('No specified bangumi, ignore `--download` option') if len(name) > 1: print_warning( 'Multiple specified bangumi, ignore `--download` option') if not name: updated_bangumi_obj = Followed.get_all_followed() else: updated_bangumi_obj = [] for i in name: try: f = Followed.get(bangumi_name=i) f = model_to_dict(f) updated_bangumi_obj.append(f) except DoesNotExist: pass runner = ScriptRunner() script_download_queue = runner.run() for subscribe in updated_bangumi_obj: print_info('fetching %s ...' % subscribe['bangumi_name']) try: bangumi_obj = Bangumi.get(name=subscribe['bangumi_name']) except Bangumi.DoesNotExist: print_error('Bangumi<{0}> does not exists.'.format( subscribe['bangumi_name']), exit_=False) continue try: followed_obj = Followed.get(bangumi_name=subscribe['bangumi_name']) except Followed.DoesNotExist: print_error('Bangumi<{0}> is not followed.'.format( subscribe['bangumi_name']), exit_=False) continue episode, all_episode_data = website.get_maximum_episode( bangumi=bangumi_obj, ignore_old_row=ignore, max_page=1) if (episode.get('episode') > subscribe['episode']) or (len(name) == 1 and download): if len(name) == 1 and download: episode_range = download else: episode_range = range(subscribe['episode'] + 1, episode.get('episode', 0) + 1) print_success('%s updated, episode: %d' % (subscribe['bangumi_name'], episode['episode'])) followed_obj.episode = episode['episode'] followed_obj.status = STATUS_UPDATED followed_obj.updated_time = int(time.time()) followed_obj.save() result['data']['updated'].append({ 'bangumi': subscribe['bangumi_name'], 'episode': episode['episode'] }) for i in episode_range: for epi in all_episode_data: if epi['episode'] == i: download_queue.append(epi) break if download is not None: result['data']['downloaded'] = download_queue download_prepare(download_queue) download_prepare(script_download_queue) print_info('Re-downloading ...') download_prepare( Download.get_all_downloads(status=STATUS_NOT_DOWNLOAD)) return result
def filter_(name, subtitle=None, include=None, exclude=None, regex=None): result = {"status": "success", "message": ""} try: bangumi_obj = Bangumi.fuzzy_get(name=name) except Bangumi.DoesNotExist: result["status"] = "error" result["message"] = "Bangumi {} does not exist.".format(name) return result try: Followed.get(bangumi_name=bangumi_obj.name) except Followed.DoesNotExist as exc: result["status"] = "error" result[ "message"] = "Bangumi {name} has not subscribed, try 'bgmi add \"{name}\"'.".format( name=bangumi_obj.name) return result followed_filter_obj, is_this_obj_created = Filter.get_or_create( bangumi_name=name) if is_this_obj_created: followed_filter_obj.save() if subtitle is not None: subtitle = [s.strip() for s in subtitle.split(",")] subtitle = [s["id"] for s in Subtitle.get_subtitle_by_name(subtitle)] subtitle_list = [ s.split(".")[0] for s in bangumi_obj.subtitle_group.split(", ") if "." in s ] subtitle_list.extend(bangumi_obj.subtitle_group.split(", ")) subtitle = filter(lambda s: s in subtitle_list, subtitle) subtitle = ", ".join(subtitle) followed_filter_obj.subtitle = subtitle if include is not None: followed_filter_obj.include = include if exclude is not None: followed_filter_obj.exclude = exclude if regex is not None: followed_filter_obj.regex = regex followed_filter_obj.save() subtitle_list = list( map( lambda s: s["name"], Subtitle.get_subtitle_by_id( bangumi_obj.subtitle_group.split(", ")), )) result["data"] = { "name": name, "subtitle_group": subtitle_list, "followed": list( map( lambda s: s["name"], Subtitle. get_subtitle_by_id(followed_filter_obj.subtitle.split(", ")), ) if followed_filter_obj.subtitle else []), "include": followed_filter_obj.include, "exclude": followed_filter_obj.exclude, "regex": followed_filter_obj.regex, } logger.debug(result) return result
def filter_(name, subtitle=None, include=None, exclude=None, regex=None): result = {'status': 'success', 'message': ''} try: bangumi_obj = Bangumi.get(name=name) except Bangumi.DoesNotExist: result['status'] = 'error' result['message'] = 'Bangumi {0} does not exist.'.format(name) return result try: Followed.get(bangumi_name=bangumi_obj.name) except Followed.DoesNotExist as exc: result['status'] = 'error' result['message'] = 'Bangumi {name} has not subscribed, try \'bgmi add "{name}"\'.' \ .format(name=bangumi_obj.name) return result followed_filter_obj, is_this_obj_created = Filter.get_or_create( bangumi_name=name) if is_this_obj_created: followed_filter_obj.save() if subtitle is not None: subtitle = [s.strip() for s in subtitle.split(',')] subtitle = [s['id'] for s in Subtitle.get_subtitle_by_name(subtitle)] subtitle_list = [ s.split('.')[0] for s in bangumi_obj.subtitle_group.split(', ') if '.' in s ] subtitle_list.extend(bangumi_obj.subtitle_group.split(', ')) subtitle = filter(lambda s: s in subtitle_list, subtitle) subtitle = ', '.join(subtitle) followed_filter_obj.subtitle = subtitle if include is not None: followed_filter_obj.include = include if exclude is not None: followed_filter_obj.exclude = exclude if regex is not None: followed_filter_obj.regex = regex followed_filter_obj.save() subtitle_list = list( map( lambda s: s['name'], Subtitle.get_subtitle_by_id( bangumi_obj.subtitle_group.split(', ')))) result['data'] = { 'name': name, 'subtitle_group': subtitle_list, 'followed': list( map( lambda s: s['name'], Subtitle. get_subtitle_by_id(followed_filter_obj.subtitle.split(', ') )) if followed_filter_obj.subtitle else []), 'include': followed_filter_obj.include, 'exclude': followed_filter_obj.exclude, 'regex': followed_filter_obj.regex, } logger.debug(result) return result
def test_mark(bangumi_names): name = bangumi_names[0] main(f"add {name} --episode 0".split()) main(f"mark {name} 1".split()) assert Followed.get(bangumi_name=name).episode == 1