Run isort, fix typing

This commit is contained in:
nathom 2021-05-01 19:00:36 -07:00
parent cfa6b35eb0
commit fc8f4cee83
5 changed files with 28 additions and 9 deletions

View file

@ -202,6 +202,7 @@ class Track:
return False
if self.client.source == "qobuz":
assert isinstance(dl_info, dict) # for typing
if not self.__validate_qobuz_dl_info(dl_info):
click.secho("Track is not available for download", fg="red")
return False
@ -211,6 +212,7 @@ class Track:
# --------- Download Track ----------
if self.client.source in ("qobuz", "tidal", "deezer"):
assert isinstance(dl_info, dict)
logger.debug("Downloadable URL found: %s", dl_info.get("url"))
try:
tqdm_download(
@ -223,6 +225,7 @@ class Track:
return False
elif self.client.source == "soundcloud":
assert isinstance(dl_info, dict)
self._soundcloud_download(dl_info)
else:
@ -403,7 +406,7 @@ class Track:
cover_url=cover_url,
)
def tag(
def tag( # noqa
self,
album_meta: dict = None,
cover: Union[Picture, APIC, MP4Cover] = None,
@ -871,7 +874,7 @@ class Tracklist(list):
info = cls._parse_get_resp(item, client=client)
# equivalent to Album(client=client, **info)
return cls(client=client, **info)
return cls(client=client, **info) # type: ignore
@staticmethod
def get_cover_obj(cover_path: str, container: str, source: str):

View file

@ -1,5 +1,4 @@
import base64
from pprint import pprint
import hashlib
import json
import logging

View file

@ -1,4 +1,6 @@
"""Manages the information that will be embeded in the audio file. """
from __future__ import annotations
import logging
import re
from collections import OrderedDict
@ -48,7 +50,10 @@ class TrackMetadata:
"""
def __init__(
self, track: Optional[dict] = None, album: Optional[dict] = None, source="qobuz"
self,
track: Optional[Union[TrackMetadata, dict]] = None,
album: Optional[Union[TrackMetadata, dict]] = None,
source="qobuz",
):
"""Creates a TrackMetadata object optionally initialized with
dicts returned by the Qobuz API.

View file

@ -9,7 +9,7 @@ import logging
import os
import re
from tempfile import gettempdir
from typing import Dict, Generator, Iterable, Union, Optional
from typing import Dict, Generator, Iterable, Optional, Union
import click
from pathvalidate import sanitize_filename
@ -59,6 +59,7 @@ class Album(Tracklist):
self.disctotal: int
self.tracktotal: int
self.albumartist: str
# usually an unpacked TrackMetadata.asdict()
self.__dict__.update(kwargs)

View file

@ -5,7 +5,7 @@ import os
import re
import sys
from string import Formatter
from typing import Hashable, Optional, Union
from typing import Dict, Hashable, Optional, Union
import click
import requests
@ -52,6 +52,7 @@ def get_quality(quality_id: int, source: str) -> Union[str, int]:
:type source: str
:rtype: Union[str, int]
"""
q_map: Dict[int, Union[int, str]]
if source == "qobuz":
q_map = {
1: 5,
@ -89,7 +90,8 @@ def get_quality_id(bit_depth: Optional[int], sampling_rate: Optional[int]):
:param sampling_rate:
:type sampling_rate: Optional[int]
"""
if not (bit_depth or sampling_rate): # is lossy
# XXX: Should `0` quality be supported?
if bit_depth is None or sampling_rate is None: # is lossy
return 1
if bit_depth == 16:
@ -266,6 +268,9 @@ def decho(message, fg=None):
logger.debug(message)
interpreter_artist_regex = re.compile(r"getSimilarArtist\(\s*'(\w+)'")
def extract_interpreter_url(url: str) -> str:
"""Extract artist ID from a Qobuz interpreter url.
@ -275,8 +280,14 @@ def extract_interpreter_url(url: str) -> str:
"""
session = gen_threadsafe_session({"User-Agent": AGENT})
r = session.get(url)
artist_id = re.search(r"getSimilarArtist\(\s*'(\w+)'", r.text).group(1)
return artist_id
match = interpreter_artist_regex.search(r.text)
if match:
return match.group(1)
raise Exception(
"Unable to extract artist id from interpreter url. Use a "
"url that contains an artist id."
)
def get_container(quality: int, source: str) -> str: