def test_other(self, tmpdir): expect_download = False file_name = internals.sanitize(title) download = youtube_tools.download_song(tmpdir, file_name + '.fake_extension', content) assert download == expect_download
def test_check_track_exists_before_download(tmpdir): expect_check = False const.config.folder = str(tmpdir) # prerequisites for determining filename songname = internals.format_string(file_format, meta_tags) global file_name file_name = internals.sanitize(songname) check = spotdl._check_exists(tmpdir, file_name, raw_song, meta_tags) assert check == expect_check
def test_sanitize(self, init_config): txt = '影師嗎' result = internals.sanitize(txt) assert result == 'Ying Shi Ma '
def test_m4a(self, tmpdir): expect_download = True file_name = internals.sanitize(title) download = youtube_tools.download_song(tmpdir, file_name + '.m4a', content) assert download == expect_download
def _download_single(folder, raw_song, number=None): """ Logic behind downloading a song. """ if internals.is_youtube(raw_song): log.debug('Input song is a YouTube URL') content = youtube_tools.go_pafy(raw_song, meta_tags=None) raw_song = slugify(content.title).replace('-', ' ') meta_tags = spotify_tools.generate_metadata(raw_song) meta_tags['number'] = number else: meta_tags = spotify_tools.generate_metadata(raw_song) meta_tags['number'] = number content = youtube_tools.go_pafy(raw_song, meta_tags) if content is None: log.debug('Found no matching video') return if const.config.download_only_metadata and meta_tags is None: log.info('Found no metadata. Skipping the download') return # "[number]. [artist] - [song]" if downloading from list # otherwise "[artist] - [song]" youtube_title = youtube_tools.get_youtube_title(content, number) log.info('{} ({})'.format(youtube_title, content.watchv_url)) # generate file name of the song to download songname = content.title if meta_tags is not None: refined_songname = internals.format_string(const.config.file_format, meta_tags, slugification=True) log.debug('Refining songname from "{0}" to "{1}"'.format( songname, refined_songname)) if not refined_songname == ' - ': songname = refined_songname else: log.warning('Could not find metadata') songname = internals.sanitize(songname) if not _check_exists(folder, songname, raw_song, meta_tags): # deal with file formats containing slashes to non-existent directories songpath = os.path.join(folder, os.path.dirname(songname)) os.makedirs(songpath, exist_ok=True) input_song = songname + const.config.input_ext output_song = songname + const.config.output_ext if youtube_tools.download_song(songpath, input_song, content): try: convert.song(input_song, output_song, folder, avconv=const.config.avconv, trim_silence=const.config.trim_silence) except FileNotFoundError: encoder = 'avconv' if const.config.avconv else 'ffmpeg' log.warning( 'Could not find {0}, skipping conversion'.format(encoder)) const.config.output_ext = const.config.input_ext output_song = songname + const.config.output_ext if not const.config.input_ext == const.config.output_ext: os.remove(os.path.join(folder, input_song)) if not const.config.no_metadata and meta_tags is not None: metadata.embed(os.path.join(folder, output_song), meta_tags) return True else: log.exception('Error downloading song {}'.format(raw_song))