mirror of
https://github.com/nathom/streamrip.git
synced 2025-05-18 00:54:50 -04:00
Formatting
This commit is contained in:
parent
d05bd9632d
commit
ecae32e9b8
6 changed files with 25 additions and 22 deletions
|
@ -172,11 +172,11 @@ def discover(ctx, **kwargs):
|
||||||
@cli.command()
|
@cli.command()
|
||||||
@click.option("-o", "--open", is_flag=True, help="Open the config file")
|
@click.option("-o", "--open", is_flag=True, help="Open the config file")
|
||||||
@click.option("-q", "--qobuz", is_flag=True, help="Set Qobuz credentials")
|
@click.option("-q", "--qobuz", is_flag=True, help="Set Qobuz credentials")
|
||||||
@click.option("--reset", is_flag=True, help='RESET the config file')
|
@click.option("--reset", is_flag=True, help="RESET the config file")
|
||||||
@click.pass_context
|
@click.pass_context
|
||||||
def config(ctx, **kwargs):
|
def config(ctx, **kwargs):
|
||||||
"""Manage the streamrip configuration."""
|
"""Manage the streamrip configuration."""
|
||||||
if kwargs['reset']:
|
if kwargs["reset"]:
|
||||||
config.reset()
|
config.reset()
|
||||||
|
|
||||||
if kwargs["open"]:
|
if kwargs["open"]:
|
||||||
|
|
|
@ -12,16 +12,16 @@ from typing import Generator, Sequence, Tuple, Union
|
||||||
|
|
||||||
import click
|
import click
|
||||||
import requests
|
import requests
|
||||||
from requests.packages import urllib3
|
|
||||||
from dogpile.cache import make_region
|
from dogpile.cache import make_region
|
||||||
|
from requests.packages import urllib3
|
||||||
|
|
||||||
from .constants import (
|
from .constants import (
|
||||||
AGENT,
|
AGENT,
|
||||||
|
AVAILABLE_QUALITY_IDS,
|
||||||
CACHE_DIR,
|
CACHE_DIR,
|
||||||
DEEZER_MAX_Q,
|
DEEZER_MAX_Q,
|
||||||
QOBUZ_FEATURED_KEYS,
|
QOBUZ_FEATURED_KEYS,
|
||||||
TIDAL_MAX_Q,
|
TIDAL_MAX_Q,
|
||||||
AVAILABLE_QUALITY_IDS,
|
|
||||||
)
|
)
|
||||||
from .exceptions import (
|
from .exceptions import (
|
||||||
AuthenticationError,
|
AuthenticationError,
|
||||||
|
@ -30,8 +30,8 @@ from .exceptions import (
|
||||||
InvalidAppSecretError,
|
InvalidAppSecretError,
|
||||||
InvalidQuality,
|
InvalidQuality,
|
||||||
)
|
)
|
||||||
from .utils import get_quality
|
|
||||||
from .spoofbuz import Spoofer
|
from .spoofbuz import Spoofer
|
||||||
|
from .utils import get_quality
|
||||||
|
|
||||||
urllib3.disable_warnings()
|
urllib3.disable_warnings()
|
||||||
requests.adapters.DEFAULT_RETRIES = 5
|
requests.adapters.DEFAULT_RETRIES = 5
|
||||||
|
@ -324,7 +324,9 @@ class QobuzClient(ClientInterface):
|
||||||
unix_ts = time.time()
|
unix_ts = time.time()
|
||||||
|
|
||||||
if int(quality) not in AVAILABLE_QUALITY_IDS: # Needed?
|
if int(quality) not in AVAILABLE_QUALITY_IDS: # Needed?
|
||||||
raise InvalidQuality(f"Invalid quality id {quality}. Choose from {AVAILABLE_QUALITY_IDS}")
|
raise InvalidQuality(
|
||||||
|
f"Invalid quality id {quality}. Choose from {AVAILABLE_QUALITY_IDS}"
|
||||||
|
)
|
||||||
|
|
||||||
if sec is not None:
|
if sec is not None:
|
||||||
secret = sec
|
secret = sec
|
||||||
|
@ -472,7 +474,7 @@ class TidalClient(ClientInterface):
|
||||||
self._login_new_user()
|
self._login_new_user()
|
||||||
|
|
||||||
self.logged_in = True
|
self.logged_in = True
|
||||||
click.secho("Logged into Tidal", fg='green')
|
click.secho("Logged into Tidal", fg="green")
|
||||||
|
|
||||||
def get(self, item_id, media_type):
|
def get(self, item_id, media_type):
|
||||||
return self._api_get(item_id, media_type)
|
return self._api_get(item_id, media_type)
|
||||||
|
|
|
@ -129,9 +129,9 @@ class Config:
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def tidal_creds(self):
|
def tidal_creds(self):
|
||||||
creds = dict(self.file['tidal'])
|
creds = dict(self.file["tidal"])
|
||||||
logger.debug(creds)
|
logger.debug(creds)
|
||||||
del creds['quality'] # should not be included in creds
|
del creds["quality"] # should not be included in creds
|
||||||
return creds
|
return creds
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
|
|
@ -124,12 +124,14 @@ class MusicDL(list):
|
||||||
arguments = {
|
arguments = {
|
||||||
"database": self.db,
|
"database": self.db,
|
||||||
"parent_folder": self.config.session["downloads"]["folder"],
|
"parent_folder": self.config.session["downloads"]["folder"],
|
||||||
|
"keep_cover": self.config.session['keep_cover'],
|
||||||
|
"large_cover": self.config.session['metadata']['large_cover'],
|
||||||
# TODO: fully implement this
|
# TODO: fully implement this
|
||||||
# "embed_cover": self.config.session["metadata"]["embed_cover"],
|
# "embed_cover": self.config.session["metadata"]["embed_cover"],
|
||||||
}
|
}
|
||||||
logger.debug("Arguments from config: %s", arguments)
|
logger.debug("Arguments from config: %s", arguments)
|
||||||
for item in self:
|
for item in self:
|
||||||
arguments['quality'] = self.config.session[item.client.source]['quality']
|
arguments["quality"] = self.config.session[item.client.source]["quality"]
|
||||||
if isinstance(item, Artist):
|
if isinstance(item, Artist):
|
||||||
filters_ = tuple(
|
filters_ = tuple(
|
||||||
k for k, v in self.config.session["filters"].items() if v
|
k for k, v in self.config.session["filters"].items() if v
|
||||||
|
@ -188,8 +190,8 @@ class MusicDL(list):
|
||||||
self.config.file["qobuz"]["secrets"],
|
self.config.file["qobuz"]["secrets"],
|
||||||
) = client.get_tokens()
|
) = client.get_tokens()
|
||||||
self.config.save()
|
self.config.save()
|
||||||
elif client.source == 'tidal':
|
elif client.source == "tidal":
|
||||||
self.config.file['tidal'].update(client.get_tokens())
|
self.config.file["tidal"].update(client.get_tokens())
|
||||||
self.config.save()
|
self.config.save()
|
||||||
|
|
||||||
def parse_urls(self, url: str) -> Tuple[str, str]:
|
def parse_urls(self, url: str) -> Tuple[str, str]:
|
||||||
|
|
|
@ -10,7 +10,6 @@ from tempfile import gettempdir
|
||||||
from typing import Any, Callable, Optional, Tuple, Union
|
from typing import Any, Callable, Optional, Tuple, Union
|
||||||
|
|
||||||
import click
|
import click
|
||||||
import requests
|
|
||||||
from mutagen.flac import FLAC, Picture
|
from mutagen.flac import FLAC, Picture
|
||||||
from mutagen.id3 import APIC, ID3, ID3NoHeaderError
|
from mutagen.id3 import APIC, ID3, ID3NoHeaderError
|
||||||
from pathvalidate import sanitize_filename, sanitize_filepath
|
from pathvalidate import sanitize_filename, sanitize_filepath
|
||||||
|
@ -598,8 +597,8 @@ class Tracklist(list, ABC):
|
||||||
|
|
||||||
return cover_obj
|
return cover_obj
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
|
@staticmethod
|
||||||
def _parse_get_resp(item, client):
|
def _parse_get_resp(item, client):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@ -664,7 +663,7 @@ class Album(Tracklist):
|
||||||
for k, v in self._parse_get_resp(self.meta, self.client).items():
|
for k, v in self._parse_get_resp(self.meta, self.client).items():
|
||||||
setattr(self, k, v) # prefer to __dict__.update for properties
|
setattr(self, k, v) # prefer to __dict__.update for properties
|
||||||
|
|
||||||
if not self.get("streamable", False): # Typing's sake
|
if not self.get("streamable", False):
|
||||||
raise NonStreamable(f"This album is not streamable ({self.id} ID)")
|
raise NonStreamable(f"This album is not streamable ({self.id} ID)")
|
||||||
|
|
||||||
self._load_tracks()
|
self._load_tracks()
|
||||||
|
@ -714,7 +713,7 @@ class Album(Tracklist):
|
||||||
},
|
},
|
||||||
"streamable": resp.get("allowStreaming"),
|
"streamable": resp.get("allowStreaming"),
|
||||||
"quality": TIDAL_Q_MAP[resp.get("audioQuality")],
|
"quality": TIDAL_Q_MAP[resp.get("audioQuality")],
|
||||||
"bit_depth": 24 if resp.get("audioQuality") == 'HI_RES' else 16,
|
"bit_depth": 24 if resp.get("audioQuality") == "HI_RES" else 16,
|
||||||
"sampling_rate": 44100, # always 44.1 kHz
|
"sampling_rate": 44100, # always 44.1 kHz
|
||||||
"tracktotal": resp.get("numberOfTracks"),
|
"tracktotal": resp.get("numberOfTracks"),
|
||||||
}
|
}
|
||||||
|
@ -1106,11 +1105,11 @@ class Artist(Tracklist):
|
||||||
generate album objects and append them to self.
|
generate album objects and append them to self.
|
||||||
"""
|
"""
|
||||||
if self.client.source == "qobuz":
|
if self.client.source == "qobuz":
|
||||||
self.name = self.meta['name']
|
self.name = self.meta["name"]
|
||||||
albums = self.meta["albums"]["items"]
|
albums = self.meta["albums"]["items"]
|
||||||
|
|
||||||
elif self.client.source == "tidal":
|
elif self.client.source == "tidal":
|
||||||
self.name = self.meta['items'][0]['artist']['name']
|
self.name = self.meta["items"][0]["artist"]["name"]
|
||||||
albums = self.meta["items"]
|
albums = self.meta["items"]
|
||||||
|
|
||||||
elif self.client.source == "deezer":
|
elif self.client.source == "deezer":
|
||||||
|
|
|
@ -12,7 +12,7 @@ from pathvalidate import sanitize_filename
|
||||||
from tqdm import tqdm
|
from tqdm import tqdm
|
||||||
|
|
||||||
from .constants import LOG_DIR, TIDAL_COVER_URL
|
from .constants import LOG_DIR, TIDAL_COVER_URL
|
||||||
from .exceptions import NonStreamable, InvalidSourceError
|
from .exceptions import InvalidSourceError, NonStreamable
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
@ -46,21 +46,21 @@ def get_quality(quality_id: int, source: str) -> Union[str, int]:
|
||||||
:type source: str
|
:type source: str
|
||||||
:rtype: Union[str, int]
|
:rtype: Union[str, int]
|
||||||
"""
|
"""
|
||||||
if source == 'qobuz':
|
if source == "qobuz":
|
||||||
q_map = {
|
q_map = {
|
||||||
1: 5,
|
1: 5,
|
||||||
2: 6,
|
2: 6,
|
||||||
3: 7,
|
3: 7,
|
||||||
4: 27,
|
4: 27,
|
||||||
}
|
}
|
||||||
elif source == 'tidal':
|
elif source == "tidal":
|
||||||
q_map = {
|
q_map = {
|
||||||
0: "LOW", # AAC
|
0: "LOW", # AAC
|
||||||
1: "HIGH", # AAC
|
1: "HIGH", # AAC
|
||||||
2: "LOSSLESS", # CD Quality
|
2: "LOSSLESS", # CD Quality
|
||||||
3: "HI_RES", # MQA
|
3: "HI_RES", # MQA
|
||||||
}
|
}
|
||||||
elif source == 'deezer':
|
elif source == "deezer":
|
||||||
q_map = {
|
q_map = {
|
||||||
0: 128,
|
0: 128,
|
||||||
1: 320,
|
1: 320,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue