def followed_bangumi(): weekly_list_followed = Bangumi.get_updating_bangumi(status=STATUS_FOLLOWED) weekly_list_updated = Bangumi.get_updating_bangumi(status=STATUS_UPDATED) weekly_list = defaultdict(list) for k, v in chain(weekly_list_followed.items(), weekly_list_updated.items()): weekly_list[k].extend(v) for bangumi_list in weekly_list.values(): for bangumi in bangumi_list: bangumi['subtitle_group'] = [{'name': x['name'], 'id': x['id']} for x in Subtitle.get_subtitle_by_id(bangumi['subtitle_group'].split(', '))] return weekly_list
def bangumi_calendar(self, force_update=False, save=True, cover=None): if force_update and not test_connection(): force_update = False print_warning('Network is unreachable') if force_update: print_info('Fetching bangumi info ...') Bangumi.delete_all() weekly_list = self.fetch(save=save) else: weekly_list = Bangumi.get_updating_bangumi() if not weekly_list: print_warning('Warning: no bangumi schedule, fetching ...') weekly_list = self.fetch(save=save) if cover is not None: # download cover to local cover_to_be_download = cover for daily_bangumi in weekly_list.values(): for bangumi in daily_bangumi: _, file_path = convert_cover_to_path(bangumi['cover']) if not glob.glob(file_path): cover_to_be_download.append(bangumi['cover']) if cover_to_be_download: print_info('Updating cover ...') download_cover(cover_to_be_download) return weekly_list
def complete(ret): # coding=utf-8 """eval "$(bgmi complete)" to complete bgmi in bash""" updating_bangumi_names = [ x['name'] for x in Bangumi.get_updating_bangumi(order=False) ] all_config = [x for x in bgmi.config.__all__ if not x == 'DATA_SOURCE'] actions_and_opts = {} helper = {} for action in actions_and_arguments: actions_and_opts[action['action']] = [ x for x in action.get('arguments', []) if x['dest'].startswith('-') ] helper[action['action']] = action.get('help', '') if 'bash' in os.getenv('SHELL').lower(): # bash template_file_path = os.path.join(os.path.dirname(__file__), 'others', '_bgmi_completion_bash.sh') elif 'zsh' in os.getenv('SHELL').lower(): # zsh template_file_path = os.path.join(os.path.dirname(__file__), 'others', '_bgmi_completion_zsh.sh') else: import sys print('unsupported shell {}'.format(os.getenv('SHELL').lower()), file=sys.stderr) return with open(template_file_path, 'r') as template_file: shell_template = template.Template(template_file.read(), autoescape='') template_with_content = shell_template.generate( actions=ACTIONS, bangumi=updating_bangumi_names, config=all_config, actions_and_opts=actions_and_opts, source=[x['id'] for x in SUPPORT_WEBSITE], helper=helper) # type: bytes if os.environ.get('DEBUG', False): # pragma: no cover with open('./_bgmi', 'wb+') as template_file: template_file.write(template_with_content) import sys template_with_content = template_with_content.decode() # type:str # print(template_with_content.rstrip()) # sys.stdout.write(template_with_content) print(template_with_content.replace('\r', '\n'), file=sys.stdout, flush=True)
def add(name, episode=None): """ ret.name :str """ # action add # add bangumi by a list of bangumi name # result = {} if not Bangumi.get_updating_bangumi(): website.fetch(save=True, group_by_weekday=False) try: bangumi_obj = Bangumi.get(name=name) except Bangumi.DoesNotExist: return { 'status': 'error', 'message': '{0} not found, please check the name'.format(name) } followed_obj, this_obj_created = Followed.get_or_create( bangumi_name=bangumi_obj.name, defaults={'status': STATUS_FOLLOWED}) if not this_obj_created: if followed_obj.status == STATUS_FOLLOWED: return { 'status': 'warning', 'message': '{0} already followed'.format(bangumi_obj.name) } else: followed_obj.status = STATUS_FOLLOWED followed_obj.save() Filter.get_or_create(bangumi_name=name) bangumi_data, _ = website.get_maximum_episode(bangumi_obj, subtitle=False, max_page=1) followed_obj.episode = bangumi_data[ 'episode'] if episode is None else episode followed_obj.save() result = { 'status': 'success', 'message': '{0} has been followed'.format(bangumi_obj.name) } return result