From 2f258865adef6ddbd369b319e37da0fef3ba6aae Mon Sep 17 00:00:00 2001 From: nathom Date: Tue, 13 Apr 2021 20:52:07 -0700 Subject: [PATCH] Misc bug fixes --- streamrip/downloader.py | 10 +++++++--- streamrip/metadata.py | 3 --- streamrip/utils.py | 36 ++++++++++++++++++++++++++++++------ 3 files changed, 37 insertions(+), 12 deletions(-) diff --git a/streamrip/downloader.py b/streamrip/downloader.py index 9376b68..88e32e0 100644 --- a/streamrip/downloader.py +++ b/streamrip/downloader.py @@ -177,6 +177,7 @@ class Track: self.download_cover() # only downloads for playlists and singles self.path = os.path.join(gettempdir(), f"{hash(self.id)}_{self.quality}.tmp") + return True def download( self, @@ -250,9 +251,10 @@ class Track: self.move(self.final_path) try: + database = kwargs.get("database") database.add(self.id) logger.debug(f"{self.id} added to database") - except AttributeError: + except AttributeError: # assume database=None was passed pass logger.debug("Downloaded: %s -> %s", self.path, self.final_path) @@ -264,8 +266,8 @@ class Track: return True - def __validate_qobuz_dl_info(info: dict) -> bool: - return not all( + def __validate_qobuz_dl_info(self, info: dict) -> bool: + return all( (info.get("sampling_rate"), info.get("bit_depth"), not info.get("sample")) ) @@ -884,9 +886,11 @@ class Album(Tracklist): else: kwargs["parent_folder"] = self.folder + logger.debug("Downloading 2") if not track.download(quality=quality, database=database, **kwargs): return False + logger.debug("tagging tracks") # deezer tracks come tagged if kwargs.get("tag_tracks", True) and self.client.source != "deezer": track.tag(cover=self.cover_obj, embed_cover=kwargs.get("embed_cover", True)) diff --git a/streamrip/metadata.py b/streamrip/metadata.py index d379089..4fb202a 100644 --- a/streamrip/metadata.py +++ b/streamrip/metadata.py @@ -107,12 +107,9 @@ class TrackMetadata: """ if self.__source == "qobuz": # Tags - print(resp.keys()) self.album = resp.get("title") self.tracktotal = resp.get("tracks_count", 1) self.genre = resp.get("genres_list") or resp.get("genre") - print("in meta:") - print(self.genre) self.date = resp.get("release_date_original") or resp.get("release_date") self.copyright = resp.get("copyright") self.albumartist = safe_get(resp, "artist", "name") diff --git a/streamrip/utils.py b/streamrip/utils.py index 2e35dda..bd5db9d 100644 --- a/streamrip/utils.py +++ b/streamrip/utils.py @@ -1,4 +1,6 @@ import base64 +import contextlib +import sys import logging import os from string import Formatter @@ -11,6 +13,7 @@ from Crypto.Util import Counter from pathvalidate import sanitize_filename from requests.packages import urllib3 from tqdm import tqdm +from tqdm.contrib import DummyTqdmFile from .constants import LOG_DIR, TIDAL_COVER_URL from .exceptions import InvalidSourceError, NonStreamable @@ -98,6 +101,20 @@ def get_quality_id(bit_depth: Optional[int], sampling_rate: Optional[int]): return 4 +@contextlib.contextmanager +def std_out_err_redirect_tqdm(): + orig_out_err = sys.stdout, sys.stderr + try: + sys.stdout, sys.stderr = map(DummyTqdmFile, orig_out_err) + yield orig_out_err[0] + # Relay exceptions + except Exception as exc: + raise exc + # Always restore sys.stdout/err if necessary + finally: + sys.stdout, sys.stderr = orig_out_err + + def tqdm_download(url: str, filepath: str, params: dict = None, desc: str = None): """Downloads a file with a progress bar. @@ -118,12 +135,19 @@ def tqdm_download(url: str, filepath: str, params: dict = None, desc: str = None raise NonStreamable(url) try: - with open(filepath, "wb") as file, tqdm( - total=total, unit="iB", unit_scale=True, unit_divisor=1024, desc=desc - ) as bar: - for data in r.iter_content(chunk_size=1024): - size = file.write(data) - bar.update(size) + with std_out_err_redirect_tqdm() as orig_stdout: + with open(filepath, "wb") as file, tqdm( + file=orig_stdout, + total=total, + unit="iB", + unit_scale=True, + unit_divisor=1024, + desc=desc, + dynamic_ncols=True, + ) as bar: + for data in r.iter_content(chunk_size=1024): + size = file.write(data) + bar.update(size) except Exception: try: os.remove(filepath)