def test_choose_subtitle_out_of_range_input(self, mock_input): subname = choose_subtitle(TestChoose.sublist) self.assertEqual(subname, TestChoose.sublist[1])
def process_archive( self, video, archive_data, datatype, ): """ 解压字幕包,返回解压字幕名列表 params: video: Video object archive_data: binary archive data datatype: str, archive type return: error: str, error message extract_subs: list, [<subname, subtype>, ...] """ error = "" if datatype not in ARCHIVE_TYPES: error = "unsupported file type " + datatype return error, [] sub_lists_dict = get_file_list(archive_data, datatype) if len(sub_lists_dict) == 0: error = "no subtitle in this archive" return error, [] # get subtitles to extract if not self.single: success, sub_name = guess_subtitle(list(sub_lists_dict.keys()), video.info) if not success: error = "no guess result in auto mode" return error, [] else: sub_name = choose_subtitle(list(sub_lists_dict.keys())) # build new names sub_title, sub_type = path.splitext(sub_name) extract_subs = [[sub_name, sub_type]] if self.both: another_sub_type = ".srt" if sub_type == ".ass" else ".ass" another_sub = sub_name.replace(sub_type, another_sub_type) another_sub = path.basename(another_sub) for subname in list(sub_lists_dict.keys()): if another_sub in subname: extract_subs.append([subname, another_sub_type]) break if len(extract_subs) == 1: print("no %s subtitles in this archive" % another_sub_type) # delete existed subtitles video.delete_existed_subtitles() # extract subtitles for one_sub, one_sub_type in extract_subs: sub_new_name = video.name + video.sub_identifier + one_sub_type extract_path = path.join(video.sub_store_path, sub_new_name) with open(extract_path, "wb") as sub: file_handler = sub_lists_dict[one_sub] sub.write(file_handler.read(one_sub)) return error, extract_subs