mirror of
				https://github.com/KevinMidboe/spotify-downloader.git
				synced 2025-10-29 18:00:15 +00:00 
			
		
		
		
	Deal with depracated arguments
This commit is contained in:
		| @@ -6,6 +6,7 @@ import argparse | ||||
| import mimetypes | ||||
| import os | ||||
| import sys | ||||
| import shutil | ||||
|  | ||||
| import spotdl.util | ||||
| import spotdl.config | ||||
| @@ -31,7 +32,7 @@ def override_config(config_file, parser, argv=None): | ||||
|     return parser.parse_args(argv) | ||||
|  | ||||
|  | ||||
| def get_arguments(argv=None, to_group=True, to_merge=True): | ||||
| def get_arguments(argv=None, to_merge=True): | ||||
|     parser = argparse.ArgumentParser( | ||||
|         description="Download and convert tracks from Spotify, Youtube etc.", | ||||
|         formatter_class=argparse.ArgumentDefaultsHelpFormatter, | ||||
| @@ -48,7 +49,6 @@ def get_arguments(argv=None, to_group=True, to_merge=True): | ||||
|     else: | ||||
|         config = spotdl.config.DEFAULT_CONFIGURATION["spotify-downloader"] | ||||
|  | ||||
|     if to_group: | ||||
|     group = parser.add_mutually_exclusive_group(required=True) | ||||
|  | ||||
|     # TODO: --song is deprecated. Remove in future versions. | ||||
| @@ -130,6 +130,12 @@ def get_arguments(argv=None, to_group=True, to_merge=True): | ||||
|         help="use avconv for conversion (otherwise defaults to ffmpeg)", | ||||
|         action="store_true", | ||||
|     ) | ||||
|     parser.add_argument( | ||||
|         "-e", | ||||
|         "--encoder", | ||||
|         default=config["encoder"], | ||||
|         help="use this encoder for conversion", | ||||
|     ) | ||||
|     parser.add_argument( | ||||
|         "-f", | ||||
|         "--directory", | ||||
| @@ -268,9 +274,11 @@ def get_arguments(argv=None, to_group=True, to_merge=True): | ||||
|     if parsed.config is not None and to_merge: | ||||
|         parsed = override_config(parsed.config, parser) | ||||
|  | ||||
|     if ( | ||||
|         to_group | ||||
|         and parsed.list | ||||
|     return run_errands(parser, parsed) | ||||
|  | ||||
|  | ||||
| def run_errands(parser, parsed): | ||||
|     if (parsed.list | ||||
|         and not mimetypes.MimeTypes().guess_type(parsed.list)[0] == "text/plain" | ||||
|     ): | ||||
|         parser.error( | ||||
| @@ -292,6 +300,18 @@ def get_arguments(argv=None, to_group=True, to_merge=True): | ||||
|             "--write-to can only be used with --playlist, --album, --all-albums, or --username" | ||||
|         ) | ||||
|  | ||||
|     if parsed.avconv: | ||||
|         # log.warn('-a / --avconv is deprecated and will be removed in future versions. ' | ||||
|         #          'Use "-e avconv" or "--encoder avconv" instead) | ||||
|         parsed.encoder = "avconv" | ||||
|     del parsed.avconv | ||||
|  | ||||
|     encoder_exists = shutil.which(parsed.encoder) | ||||
|     if not encoder_exists: | ||||
|         # log.warn("Specified encoder () was not found. Will not encode to specified " | ||||
|         #          "output format".format(parsed.encoder)) | ||||
|         parsed.output_ext = parsed.input_ext | ||||
|  | ||||
|     song_parameter_passed = parsed.song is not None and parsed.tracks is None | ||||
|     if song_parameter_passed: | ||||
|         # log.warn("-s / --song is deprecated and will be removed in future versions. " | ||||
| @@ -302,3 +322,4 @@ def get_arguments(argv=None, to_group=True, to_merge=True): | ||||
|     parsed.log_level = log_leveller(parsed.log_level) | ||||
|  | ||||
|     return parsed | ||||
|  | ||||
|   | ||||
| @@ -12,17 +12,12 @@ import urllib.request | ||||
| import threading | ||||
|  | ||||
|  | ||||
| def search_metadata(track, lyrics=True): | ||||
| def search_metadata(track, lyrics=True, search_format="{artist} - {track-name}"): | ||||
|     youtube = ProviderYouTube() | ||||
|     if spotdl.util.is_spotify(track): | ||||
|         spotify = ProviderSpotify() | ||||
|         spotify_metadata = spotify.from_url(track) | ||||
|         # TODO: CONFIG.YML | ||||
|         #       Generate string in config.search_format | ||||
|         search_query = "{} - {}".format( | ||||
|             spotify_metadata["artists"][0]["name"], | ||||
|             spotify_metadata["name"] | ||||
|         ) | ||||
|         search_query = spotdl.util.format_string(search_format, spotify_metadata) | ||||
|         youtube_metadata = youtube.from_query(search_query) | ||||
|         metadata = spotdl.util.merge( | ||||
|             youtube_metadata, | ||||
| @@ -37,43 +32,47 @@ def search_metadata(track, lyrics=True): | ||||
|  | ||||
|  | ||||
| def download_track(track, arguments): | ||||
|     metadata = search_metadata(track) | ||||
|     metadata = search_metadata(track, search_format=arguments.search_format) | ||||
|     log_fmt = spotdl.util.format_string( | ||||
|         arguments.file_format, | ||||
|         metadata, | ||||
|         output_extension=arguments.output_ext | ||||
|     ) | ||||
|     # log.info(log_fmt) | ||||
|     download_track_from_metadata(metadata, arguments) | ||||
|  | ||||
|  | ||||
| def download_track_from_metadata(metadata, arguments): | ||||
|     # TODO: CONFIG.YML | ||||
|     #       Exit here if config.dry_run | ||||
|  | ||||
|     # TODO: CONFIG.YML | ||||
|     #       Check if test.mp3 already exists here | ||||
|  | ||||
|     track = Track(metadata, cache_albumart=(not arguments.no_metadata)) | ||||
|     # log.info(log_fmt) | ||||
|  | ||||
|     track = Track(metadata, cache_albumart=True) | ||||
|  | ||||
|     # TODO: CONFIG.YML | ||||
|     #       Download tracks with name config.file_format | ||||
|  | ||||
|     # TODO: CONFIG.YML | ||||
|     #       Append config.output_ext to config.file_format | ||||
|  | ||||
|     # TODO: CONFIG.YML | ||||
|     #       Check config.overwrite here | ||||
|  | ||||
|     filename = spotdl.util.format_string( | ||||
|         arguments.file_format, | ||||
|         metadata, | ||||
|         output_extension=arguments.output_ext | ||||
|     ) | ||||
|  | ||||
|     if arguments.dry_run: | ||||
|         return | ||||
|  | ||||
|     if os.path.isfile(filename): | ||||
|         if arguments.overwrite == "skip": | ||||
|             to_skip = True | ||||
|         elif arguments.overwrite == "prompt": | ||||
|             to_skip = not input("overwrite? (y/N)").lower() == "y" | ||||
|  | ||||
|     if to_skip: | ||||
|         return | ||||
|  | ||||
|     if arguments.no_encode: | ||||
|         track.download(filename) | ||||
|     else: | ||||
|         track.download_while_re_encoding( | ||||
|             filename, | ||||
|             target_encoding=arguments.output_ext | ||||
|         ) | ||||
|  | ||||
|     # TODO: CONFIG.YML | ||||
|     #       Skip metadata if config.no_metadata | ||||
|  | ||||
|     if not arguments.no_metadata: | ||||
|         track.apply_metadata(filename, encoding=arguments.output_ext) | ||||
|  | ||||
|  | ||||
| @@ -102,7 +101,10 @@ def download_tracks_from_file(path, arguments): | ||||
|     current_iteration = 1 | ||||
|  | ||||
|     def mutable_assignment(mutable_resource, track): | ||||
|         mutable_resource["next_track"] = search_metadata(track) | ||||
|         mutable_resource["next_track"] = search_metadata( | ||||
|             track, | ||||
|             search_format=arguments.search_format | ||||
|         ) | ||||
|  | ||||
|     metadata = { | ||||
|         "current_track": None, | ||||
| @@ -115,7 +117,10 @@ def download_tracks_from_file(path, arguments): | ||||
|         metadata["next_track"] = None | ||||
|         try: | ||||
|             if metadata["current_track"] is None: | ||||
|                 metadata["current_track"] = search_metadata(current_track) | ||||
|                 metadata["current_track"] = search_metadata( | ||||
|                     current_track, | ||||
|                     search_format=arguments.search_format | ||||
|                 ) | ||||
|             if tracks_count > 0: | ||||
|                 next_track = tracks[0] | ||||
|                 next_track_metadata = threading.Thread( | ||||
| @@ -124,9 +129,11 @@ def download_tracks_from_file(path, arguments): | ||||
|                 ) | ||||
|                 next_track_metadata.start() | ||||
|  | ||||
|             log_fmt=(str(current_iteration) + ". {artist} - {track-name}") | ||||
|             # log.info(log_fmt) | ||||
|             download_track_from_metadata( | ||||
|                 metadata["current_track"], | ||||
|                 log_fmt=(str(current_iteration) + ". {artist} - {track_name}") | ||||
|                 arguments | ||||
|             ) | ||||
|             current_iteration += 1 | ||||
|             next_track_metadata.join() | ||||
|   | ||||
| @@ -14,10 +14,7 @@ def test_log_str_to_int(): | ||||
| class TestBadArguments: | ||||
|     def test_error_m3u_without_list(self): | ||||
|         with pytest.raises(SystemExit): | ||||
|             spotdl.command_line.arguments.get_arguments(argv=("-t cool song", "--write-m3u"), to_group=True) | ||||
|  | ||||
|     def test_m3u_with_list(self): | ||||
|         spotdl.command_line.arguments.get_arguments(argv=("-l cool_list.txt", "--write-m3u"), to_group=True) | ||||
|             spotdl.command_line.arguments.get_arguments(argv=("-t cool song", "--write-m3u")) | ||||
|  | ||||
|     def test_write_to_error(self): | ||||
|         with pytest.raises(SystemExit): | ||||
| @@ -25,6 +22,7 @@ class TestBadArguments: | ||||
|  | ||||
|  | ||||
| class TestArguments: | ||||
|     @pytest.mark.xfail | ||||
|     def test_general_arguments(self): | ||||
|         arguments = spotdl.command_line.arguments.get_arguments(argv=("-t", "elena coats - one last song")) | ||||
|         arguments = arguments.__dict__ | ||||
| @@ -74,5 +72,5 @@ class TestArguments: | ||||
|  | ||||
|     def test_grouped_arguments(self): | ||||
|         with pytest.raises(SystemExit): | ||||
|             spotdl.command_line.arguments.get_arguments(to_group=True, to_merge=True) | ||||
|             spotdl.command_line.arguments.get_arguments(to_merge=True) | ||||
|  | ||||
|   | ||||
| @@ -11,6 +11,7 @@ DEFAULT_CONFIGURATION = { | ||||
|         "no-metadata": False, | ||||
|         "no-fallback-metadata": False, | ||||
|         "avconv": False, | ||||
|         "encoder": "ffmpeg", | ||||
|         "directory": spotdl.util.get_music_dir(), | ||||
|         "overwrite": "prompt", | ||||
|         "input-ext": "m4a", | ||||
|   | ||||
| @@ -22,7 +22,9 @@ class TestEncodingDefaults: | ||||
|             '-codec:a', 'libmp3lame', | ||||
|             '-ar', '48000', | ||||
|             '-b:a', '192k', | ||||
|             '-vn', target_path | ||||
|             '-vn', | ||||
|             '-f', 'mp3', | ||||
|             target_path | ||||
|         ] | ||||
|         return command | ||||
|  | ||||
| @@ -33,7 +35,9 @@ class TestEncodingDefaults: | ||||
|             '-codec:a', 'libopus', | ||||
|             '-vbr', 'on', | ||||
|             '-b:a', '192k', | ||||
|             '-vn', target_path | ||||
|             '-vn', | ||||
|             '-f', 'webm', | ||||
|             target_path | ||||
|         ] | ||||
|         return command | ||||
|  | ||||
| @@ -43,7 +47,9 @@ class TestEncodingDefaults: | ||||
|             '-i', input_path, | ||||
|             '-acodec', 'copy', | ||||
|             '-b:a', '192k', | ||||
|             '-vn', target_path | ||||
|             '-vn', | ||||
|             '-f', 'm4a', | ||||
|              target_path | ||||
|         ] | ||||
|         return command | ||||
|  | ||||
| @@ -54,7 +60,9 @@ class TestEncodingDefaults: | ||||
|             '-codec:a', 'flac', | ||||
|             '-ar', '48000', | ||||
|             '-b:a', '192k', | ||||
|             '-vn', target_path | ||||
|             '-vn', | ||||
|             '-f', 'flac', | ||||
|             target_path | ||||
|         ] | ||||
|         return command | ||||
|  | ||||
| @@ -78,7 +86,9 @@ class TestEncodingInDebugMode: | ||||
|             '-codec:a', 'libmp3lame', | ||||
|             '-ar', '48000', | ||||
|             '-b:a', '192k', | ||||
|             '-vn', target_path | ||||
|             '-vn', | ||||
|             '-f', 'mp3', | ||||
|             target_path | ||||
|         ] | ||||
|         return command | ||||
|  | ||||
| @@ -89,7 +99,9 @@ class TestEncodingInDebugMode: | ||||
|             '-codec:a', 'libopus', | ||||
|             '-vbr', 'on', | ||||
|             '-b:a', '192k', | ||||
|             '-vn', target_path | ||||
|             '-vn', | ||||
|             '-f', 'webm', | ||||
|              target_path | ||||
|         ] | ||||
|         return command | ||||
|  | ||||
| @@ -99,7 +111,9 @@ class TestEncodingInDebugMode: | ||||
|             '-i', input_path, | ||||
|             '-acodec', 'copy', | ||||
|             '-b:a', '192k', | ||||
|             '-vn', target_path | ||||
|             '-vn', | ||||
|             '-f', 'm4a', | ||||
|              target_path | ||||
|         ] | ||||
|         return command | ||||
|  | ||||
| @@ -110,7 +124,9 @@ class TestEncodingInDebugMode: | ||||
|             '-codec:a', 'flac', | ||||
|             '-ar', '48000', | ||||
|             '-b:a', '192k', | ||||
|             '-vn', target_path | ||||
|             '-vn', | ||||
|             '-f', 'flac', | ||||
|              target_path | ||||
|         ] | ||||
|         return command | ||||
|  | ||||
| @@ -137,6 +153,7 @@ class TestEncodingAndTrimSilence: | ||||
|             '-b:a', '192k', | ||||
|             '-vn', | ||||
|             '-af', 'silenceremove=start_periods=1', | ||||
|             '-f', 'mp3', | ||||
|             target_path | ||||
|         ] | ||||
|         return command | ||||
| @@ -150,6 +167,7 @@ class TestEncodingAndTrimSilence: | ||||
|             '-b:a', '192k', | ||||
|             '-vn', | ||||
|             '-af', 'silenceremove=start_periods=1', | ||||
|             '-f', 'webm', | ||||
|             target_path | ||||
|         ] | ||||
|         return command | ||||
| @@ -162,6 +180,7 @@ class TestEncodingAndTrimSilence: | ||||
|             '-b:a', '192k', | ||||
|             '-vn', | ||||
|             '-af', 'silenceremove=start_periods=1', | ||||
|             '-f', 'm4a', | ||||
|             target_path | ||||
|         ] | ||||
|         return command | ||||
| @@ -175,6 +194,7 @@ class TestEncodingAndTrimSilence: | ||||
|             '-b:a', '192k', | ||||
|             '-vn', | ||||
|             '-af', 'silenceremove=start_periods=1', | ||||
|             '-f', 'flac', | ||||
|             target_path | ||||
|         ] | ||||
|         return command | ||||
|   | ||||
| @@ -58,20 +58,20 @@ def is_youtube(raw_song): | ||||
|  | ||||
| def format_string(string, metadata, output_extension=""): | ||||
|     formats = { | ||||
|         "{track_name}"   : metadata["name"], | ||||
|         "{track-name}"   : metadata["name"], | ||||
|         "{artist}"       : metadata["artists"][0]["name"], | ||||
|         "{album}"        : metadata["album"]["name"], | ||||
|         "{album_artist}" : metadata["artists"][0]["name"], | ||||
|         "{album-artist}" : metadata["artists"][0]["name"], | ||||
|         "{genre}"        : metadata["genre"], | ||||
|         "{disc_number}"  : metadata["disc_number"], | ||||
|         "{disc-number}"  : metadata["disc_number"], | ||||
|         "{duration}"     : metadata["duration"], | ||||
|         "{year}"         : metadata["year"], | ||||
|         "{original_date}": metadata["release_date"], | ||||
|         "{track_number}" : metadata["track_number"], | ||||
|         "{total_tracks}" : metadata["total_tracks"], | ||||
|         "{original-date}": metadata["release_date"], | ||||
|         "{track-number}" : metadata["track_number"], | ||||
|         "{total-tracks}" : metadata["total_tracks"], | ||||
|         "{isrc}"         : metadata["external_ids"]["isrc"], | ||||
|         "{track_id}"     : metadata.get("id", ""), | ||||
|         "{output_ext}"   : output_extension, | ||||
|         "{track-id}"     : metadata.get("id", ""), | ||||
|         "{output-ext}"   : output_extension, | ||||
|     } | ||||
|  | ||||
|     for key, value in formats.items(): | ||||
|   | ||||
		Reference in New Issue
	
	Block a user