diff --git a/rip/cli.py b/rip/cli.py index 1335263..1f37acb 100644 --- a/rip/cli.py +++ b/rip/cli.py @@ -68,7 +68,7 @@ def cli(ctx, **kwargs): logger.debug("Starting debug log") if ctx.invoked_subcommand is None and not ctx.params["urls"]: - click.echo(cli.get_help(ctx)) + echo(cli.get_help(ctx)) if ctx.invoked_subcommand not in { None, @@ -90,13 +90,13 @@ def cli(ctx, **kwargs): r = requests.get("https://pypi.org/pypi/streamrip/json").json() newest = r["info"]["version"] if __version__ != newest: - click.secho( + secho( "A new version of streamrip is available! " "Run `pip3 install streamrip --upgrade` to update.", fg="yellow", ) else: - click.secho("streamrip is up-to-date!", fg="green") + secho("streamrip is up-to-date!", fg="green") if kwargs["no_db"]: config.session["database"]["enabled"] = False @@ -108,7 +108,7 @@ def cli(ctx, **kwargs): if kwargs["quality"] is not None: quality = int(kwargs["quality"]) if quality not in range(5): - click.secho("Invalid quality", fg="red") + secho("Invalid quality", fg="red") return config.session["qobuz"]["quality"] = quality @@ -126,7 +126,7 @@ def cli(ctx, **kwargs): logger.debug(f"Handling {kwargs['text']}") core.handle_txt(kwargs["text"]) else: - click.secho(f"Text file {kwargs['text']} does not exist.") + secho(f"Text file {kwargs['text']} does not exist.") if ctx.invoked_subcommand is None: core.download() @@ -206,7 +206,7 @@ def search(ctx, **kwargs): if core.interactive_search(query, kwargs["source"], kwargs["type"]): core.download() else: - click.secho("No items chosen, exiting.", fg="bright_red") + secho("No items chosen, exiting.", fg="bright_red") @cli.command() @@ -333,10 +333,10 @@ def config(ctx, **kwargs): config.update() if kwargs["path"]: - click.echo(CONFIG_PATH) + echo(CONFIG_PATH) if kwargs["open"]: - click.secho(f"Opening {CONFIG_PATH}", fg="green") + secho(f"Opening {CONFIG_PATH}", fg="green") click.launch(CONFIG_PATH) if kwargs["open_vim"]: @@ -347,41 +347,41 @@ def config(ctx, **kwargs): if kwargs["directory"]: config_dir = os.path.dirname(CONFIG_PATH) - click.secho(f"Opening {config_dir}", fg="green") + secho(f"Opening {config_dir}", fg="green") click.launch(config_dir) if kwargs["qobuz"]: - config.file["qobuz"]["email"] = input(click.style("Qobuz email: ", fg="blue")) + config.file["qobuz"]["email"] = input(style("Qobuz email: ", fg="blue")) - click.secho("Qobuz password (will not show on screen):", fg="blue") + secho("Qobuz password (will not show on screen):", fg="blue") config.file["qobuz"]["password"] = md5( getpass(prompt="").encode("utf-8") ).hexdigest() config.save() - click.secho("Qobuz credentials hashed and saved to config.", fg="green") + secho("Qobuz credentials hashed and saved to config.", fg="green") if kwargs["tidal"]: client = TidalClient() client.login() config.file["tidal"].update(client.get_tokens()) config.save() - click.secho("Credentials saved to config.", fg="green") + secho("Credentials saved to config.", fg="green") if kwargs["deezer"]: - click.secho( + secho( "If you're not sure how to find the ARL cookie, see the instructions at ", italic=True, nl=False, dim=True, ) - click.secho( + secho( "https://github.com/nathom/streamrip/wiki/Finding-your-Deezer-ARL-Cookie", underline=True, italic=True, fg="blue", ) - config.file["deezer"]["arl"] = input(click.style("ARL: ", fg="green")) + config.file["deezer"]["arl"] = input(style("ARL: ", fg="green")) config.save() @@ -481,7 +481,7 @@ def convert(ctx, **kwargs): elif os.path.isfile(kwargs["path"]): codec_map[codec](filename=kwargs["path"], **converter_args).convert() else: - click.secho(f"File {kwargs['path']} does not exist.", fg="red") + secho(f"File {kwargs['path']} does not exist.", fg="red") @cli.command() @@ -503,7 +503,7 @@ def repair(ctx, **kwargs): def none_chosen(): """Print message if nothing was chosen.""" - click.secho("No items chosen, exiting.", fg="bright_red") + secho("No items chosen, exiting.", fg="bright_red") def main(): diff --git a/rip/config.py b/rip/config.py index d510763..8ef27b6 100644 --- a/rip/config.py +++ b/rip/config.py @@ -56,7 +56,7 @@ class Config: if os.path.isfile(self._path): self.load() if self.file["misc"]["version"] != self.defaults["misc"]["version"]: - click.secho( + secho( "Updating config file to new version. Some settings may be lost.", fg="yellow", ) diff --git a/rip/core.py b/rip/core.py index 894a7a6..03d1125 100644 --- a/rip/core.py +++ b/rip/core.py @@ -162,8 +162,8 @@ class RipCore(list): if not parsed and len(self) == 0: if "last.fm" in url: message = ( - f"For last.fm urls, use the {click.style('lastfm', fg='yellow')} " - f"command. See {click.style('rip lastfm --help', fg='yellow')}." + f"For last.fm urls, use the {style('lastfm', fg='yellow')} " + f"command. See {style('rip lastfm --help', fg='yellow')}." ) else: message = f"Cannot find urls in text: {url}" @@ -175,7 +175,7 @@ class RipCore(list): logger.info( f"ID {item_id} already downloaded, use --no-db to override." ) - click.secho( + secho( f"ID {item_id} already downloaded, use --no-db to override.", fg="magenta", ) @@ -248,7 +248,7 @@ class RipCore(list): max_items = float("inf") if self.failed_db.is_dummy: - click.secho( + secho( "Failed downloads database must be enabled in the config file " "to repair!", fg="red", @@ -304,7 +304,7 @@ class RipCore(list): item.load_meta(**arguments) except NonStreamable: self.failed_db.add((item.client.source, item.type, item.id)) - click.secho(f"{item!s} is not available, skipping.", fg="red") + secho(f"{item!s} is not available, skipping.", fg="red") continue try: @@ -321,7 +321,7 @@ class RipCore(list): self.failed_db.add(failed_item_info) continue except ItemExists as e: - click.secho(f'"{e!s}" already exists. Skipping.', fg="yellow") + secho(f'"{e!s}" already exists. Skipping.', fg="yellow") continue if hasattr(item, "id"): @@ -366,13 +366,13 @@ class RipCore(list): creds = self.config.creds(client.source) if client.source == "deezer" and creds["arl"] == "": if self.config.session["deezer"]["deezloader_warnings"]: - click.secho( + secho( "Falling back to Deezloader (max 320kbps MP3). If you have a subscription, run ", nl=False, fg="yellow", ) - click.secho("rip config --deezer ", nl=False, bold=True) - click.secho("to download FLAC files.\n\n", fg="yellow") + secho("rip config --deezer ", nl=False, bold=True) + secho("to download FLAC files.\n\n", fg="yellow") raise DeezloaderFallback while True: @@ -380,7 +380,7 @@ class RipCore(list): client.login(**creds) break except AuthenticationError: - click.secho("Invalid credentials, try again.", fg="yellow") + secho("Invalid credentials, try again.", fg="yellow") self.prompt_creds(client.source) creds = self.config.creds(client.source) except MissingCredentials: @@ -419,7 +419,7 @@ class RipCore(list): interpreter_urls = QOBUZ_INTERPRETER_URL_REGEX.findall(url) if interpreter_urls: - click.secho( + secho( "Extracting IDs from Qobuz interpreter urls. Use urls " "that include the artist ID for faster preprocessing.", fg="yellow", @@ -432,7 +432,7 @@ class RipCore(list): dynamic_urls = DEEZER_DYNAMIC_LINK_REGEX.findall(url) if dynamic_urls: - click.secho( + secho( "Extracting IDs from Deezer dynamic link. Use urls " "of the form https://www.deezer.com/{country}/{type}/{id} for " "faster processing.", @@ -524,7 +524,7 @@ class RipCore(list): return True for purl in lastfm_urls: - click.secho(f"Fetching playlist at {purl}", fg="blue") + secho(f"Fetching playlist at {purl}", fg="blue") title, queries = self.get_lastfm_playlist(purl) pl = Playlist(client=self.get_client(lastfm_source), name=title) @@ -550,7 +550,7 @@ class RipCore(list): pl.loaded = True if tracks_not_found > 0: - click.secho(f"{tracks_not_found} tracks not found.", fg="yellow") + secho(f"{tracks_not_found} tracks not found.", fg="yellow") self.append(pl) def handle_txt(self, filepath: Union[str, os.PathLike]): @@ -815,9 +815,9 @@ class RipCore(list): :type source: str """ if source == "qobuz": - click.secho("Enter Qobuz email:", fg="green") + secho("Enter Qobuz email:", fg="green") self.config.file[source]["email"] = input() - click.secho( + secho( "Enter Qobuz password (will not show on screen):", fg="green", ) @@ -826,27 +826,27 @@ class RipCore(list): ).hexdigest() self.config.save() - click.secho( + secho( f'Credentials saved to config file at "{self.config._path}"', fg="green", ) elif source == "deezer": - click.secho( + secho( "If you're not sure how to find the ARL cookie, see the instructions at ", italic=True, nl=False, dim=True, ) - click.secho( + secho( "https://github.com/nathom/streamrip/wiki/Finding-your-Deezer-ARL-Cookie", underline=True, italic=True, fg="blue", ) - self.config.file["deezer"]["arl"] = input(click.style("ARL: ", fg="green")) + self.config.file["deezer"]["arl"] = input(style("ARL: ", fg="green")) self.config.save() - click.secho( + secho( f'Credentials saved to config file at "{self.config._path}"', fg="green", ) @@ -854,19 +854,19 @@ class RipCore(list): raise Exception def _config_updating_message(self): - click.secho( + secho( "Updating config file... Some settings may be lost. Please run the " "command again.", fg="magenta", ) def _config_corrupted_message(self, err: Exception): - click.secho( + secho( "There was a problem with your config file. This happens " "sometimes after updates. Run ", nl=False, fg="red", ) - click.secho("rip config --reset ", fg="yellow", nl=False) - click.secho("to reset it. You will need to log in again.", fg="red") - click.secho(str(err), fg="red") + secho("rip config --reset ", fg="yellow", nl=False) + secho("to reset it. You will need to log in again.", fg="red") + secho(str(err), fg="red") diff --git a/streamrip/clients.py b/streamrip/clients.py index 22bf9eb..221e70b 100644 --- a/streamrip/clients.py +++ b/streamrip/clients.py @@ -119,7 +119,7 @@ class QobuzClient(Client): :type pwd: str :param kwargs: app_id: str, secrets: list, return_secrets: bool """ - click.secho(f"Logging into {self.source}", fg="green") + secho(f"Logging into {self.source}", fg="green") email: str = kwargs["email"] pwd: str = kwargs["pwd"] if not email or not pwd: @@ -130,7 +130,7 @@ class QobuzClient(Client): return if (kwargs.get("app_id") or kwargs.get("secrets")) in (None, [], ""): - click.secho("Fetching tokens — this may take a few seconds.", fg="magenta") + secho("Fetching tokens — this may take a few seconds.", fg="magenta") logger.info("Fetching tokens from Qobuz") spoofer = Spoofer() kwargs["app_id"] = spoofer.get_app_id() @@ -766,7 +766,7 @@ class TidalClient(Client): self._login_new_user() self.logged_in = True - click.secho("Logged into Tidal", fg="green") + secho("Logged into Tidal", fg="green") def get(self, item_id, media_type): """Public method that internally calls _api_get. @@ -850,7 +850,7 @@ class TidalClient(Client): """ login_link = f"https://{self._get_device_code()}" - click.secho( + secho( f"Go to {login_link} to log into Tidal within 5 minutes.", fg="blue", ) diff --git a/streamrip/media.py b/streamrip/media.py index 02d6638..3a27828 100644 --- a/streamrip/media.py +++ b/streamrip/media.py @@ -272,7 +272,7 @@ class Track(Media): :type progress_bar: bool """ if not self.part_of_tracklist: - click.secho(f"Downloading {self!s}\n", bold=True) + secho(f"Downloading {self!s}\n", bold=True) self._prepare_download( quality=quality, @@ -295,7 +295,7 @@ class Track(Media): if self.client.source == "qobuz": if not self.__validate_qobuz_dl_info(dl_info): - # click.secho("Track is not available for download", fg="red") + # secho("Track is not available for download", fg="red") raise NonStreamable("Track is not available for download") self.sampling_rate = dl_info.get("sampling_rate") @@ -314,7 +314,7 @@ class Track(Media): words[0] + " " + " ".join(map(str.lower, words[1:])) + "." ) - click.secho(f"Panic: {e} dl_info = {dl_info}", fg="red") + secho(f"Panic: {e} dl_info = {dl_info}", fg="red") raise NonStreamable _quick_download(download_url, self.path, desc=self._progress_desc) @@ -470,7 +470,7 @@ class Track(Media): """Download the cover art, if cover_url is given.""" self.cover_path = os.path.join(gettempdir(), f"cover{hash(self.cover_url)}.jpg") logger.debug(f"Downloading cover from {self.cover_url}") - # click.secho(f"\nDownloading cover art for {self!s}", fg="blue") + # secho(f"\nDownloading cover art for {self!s}", fg="blue") if not os.path.exists(self.cover_path): _cover_download(self.cover_url, self.cover_path) @@ -670,7 +670,7 @@ class Track(Media): """ if not self.downloaded: logger.debug("Track not downloaded, skipping conversion") - click.secho("Track not downloaded, skipping conversion", fg="magenta") + secho("Track not downloaded, skipping conversion", fg="magenta") return CONV_CLASS = { @@ -687,7 +687,7 @@ class Track(Media): try: self.container = codec.upper() except AttributeError: - click.secho("Error: No audio codec chosen to convert to.", fg="red") + secho("Error: No audio codec chosen to convert to.", fg="red") raise click.Abort if not hasattr(self, "final_path"): @@ -695,7 +695,7 @@ class Track(Media): if not os.path.isfile(self.path): logger.info("File %s does not exist. Skipping conversion.", self.path) - click.secho(f"{self!s} does not exist. Skipping conversion.", fg="red") + secho(f"{self!s} does not exist. Skipping conversion.", fg="red") return assert ( @@ -707,7 +707,7 @@ class Track(Media): sampling_rate=kwargs.get("sampling_rate"), remove_source=kwargs.get("remove_source", True), ) - # click.secho(f"Converting {self!s}", fg="blue") + # secho(f"Converting {self!s}", fg="blue") engine.convert() self.path = engine.final_fn self.final_path = self.final_path.replace( @@ -814,7 +814,7 @@ class Video(Media): :param kwargs: """ - click.secho( + secho( f"Downloading {self.title} (Video). This may take a while.", fg="blue", ) @@ -949,7 +949,7 @@ class YoutubeVideo(Media): :type youtube_video_downloads_folder: str :param kwargs: """ - click.secho(f"Downloading url {self.id}", fg="blue") + secho(f"Downloading url {self.id}", fg="blue") filename_formatter = "%(track_number)s.%(track)s.%(container)s" filename = os.path.join(parent_folder, filename_formatter) @@ -969,7 +969,7 @@ class YoutubeVideo(Media): ) if download_youtube_videos: - click.secho("Downloading video stream", fg="blue") + secho("Downloading video stream", fg="blue") pv = subprocess.Popen( [ "youtube-dl", @@ -1114,11 +1114,11 @@ class Tracklist(list): if self.client.source != "soundcloud": # soundcloud only gets metadata after `target` is called # message will be printed in `target` - click.secho(f'\nDownloading "{item!s}"', bold=True, fg="green") + secho(f'\nDownloading "{item!s}"', bold=True, fg="green") try: target(item, **kwargs) except ItemExists: - click.secho(f"{item!s} exists. Skipping.", fg="yellow") + secho(f"{item!s} exists. Skipping.", fg="yellow") except NonStreamable as e: e.print(item) failed_downloads.append((item.client.source, item.type, item.id)) @@ -1264,7 +1264,7 @@ class Tracklist(list): :rtype: str """ - click.secho( + secho( f"\n\nDownloading {self.title} ({self.__class__.__name__})\n", fg="magenta", bold=True, @@ -1422,7 +1422,7 @@ class Album(Tracklist, Media): self.download_message() # choose optimal cover size and download it - click.secho("Downloading cover art", bold=True) + secho("Downloading cover art", bold=True) cover_path = os.path.join(gettempdir(), f"cover_{hash(self)}.jpg") embed_cover_size = kwargs.get("embed_cover_size", "large") @@ -1446,7 +1446,7 @@ class Album(Tracklist, Media): cover_size = os.path.getsize(cover_path) if cover_size > FLAC_MAX_BLOCKSIZE: # 16.77 MB - click.secho( + secho( "Downgrading embedded cover size, too large ({cover_size}).", fg="bright_yellow", ) @@ -1473,7 +1473,7 @@ class Album(Tracklist, Media): and kwargs.get("download_booklets", True) and not any(f.endswith(".pdf") for f in os.listdir(self.folder)) ): - click.secho("\nDownloading booklets", bold=True) + secho("\nDownloading booklets", bold=True) for item in self.booklets: Booklet(item).download(parent_folder=self.folder) @@ -1783,7 +1783,7 @@ class Playlist(Tracklist, Media): kwargs["parent_folder"] = self.folder if self.client.source == "soundcloud": item.load_meta() - click.secho(f"Downloading {item!s}", fg="blue") + secho(f"Downloading {item!s}", fg="blue") if playlist_to_album := kwargs.get("set_playlist_to_album", False): item.meta.album = self.name diff --git a/streamrip/utils.py b/streamrip/utils.py index 940a9d9..912b39a 100644 --- a/streamrip/utils.py +++ b/streamrip/utils.py @@ -345,13 +345,13 @@ def decrypt_mqa_file(in_path, out_path, encryption_key): from Crypto.Cipher import AES from Crypto.Util import Counter except (ImportError, ModuleNotFoundError): - click.secho( + secho( "To download this item in MQA, you need to run ", fg="yellow", nl=False, ) - click.secho("pip3 install pycryptodome --upgrade", fg="blue", nl=False) - click.secho(".") + secho("pip3 install pycryptodome --upgrade", fg="blue", nl=False) + secho(".") raise click.Abort # Do not change this @@ -431,7 +431,7 @@ def decho(message, fg=None): :param fg: ANSI color with which to display the message on the screen """ - click.secho(message, fg=fg) + secho(message, fg=fg) logger.debug(message)