nathom / streamrip

A scriptable music downloader for Qobuz, Tidal, SoundCloud, and Deezer
GNU General Public License v3.0
2.34k stars 209 forks source link

[BUG] With long lastfm playlist rip crash #672

Open yodatak opened 2 months ago

yodatak commented 2 months ago

Describe the bug

Thanks again for your awsome app

with this command rip lastfm https://www.last.fm/fr/user/yodatak/playlists/12954131

after a long time i got this error

╭─────────────────────────────── Traceback (most recent call last) ────────────────────────────────╮ │ /var/home/yodatak/.local/bin/rip:8 in │ │ │ │ 5 from streamrip.rip import rip │ │ 6 if name == 'main': │ │ 7 │ sys.argv[0] = re.sub(r'(-script.pyw|.exe)?$', '', sys.argv[0]) │ │ ❱ 8 │ sys.exit(rip()) │ │ 9 │ │ │ │ /var/home/yodatak/.local/lib/python3.12/site-packages/click/core.py:1157 in call │ │ │ │ ... 15 frames hidden ... │ │ │ │ /var/home/yodatak/.local/lib/python3.12/site-packages/streamrip/metadata/album.py:496 in │ │ from_track_resp │ │ │ │ 493 │ @classmethod │ │ 494 │ def from_track_resp(cls, resp: dict, source: str) -> AlbumMetadata | None: │ │ 495 │ │ if source == "qobuz": │ │ ❱ 496 │ │ │ return cls.from_qobuz(resp["album"]) │ │ 497 │ │ if source == "tidal": │ │ 498 │ │ │ return cls.from_tidal_playlist_track_resp(resp) │ │ 499 │ │ if source == "soundcloud": │ │ │ │ /var/home/yodatak/.local/lib/python3.12/site-packages/streamrip/metadata/album.py:95 in │ │ from_qobuz │ │ │ │ 92 │ │ _copyright = resp.get("copyright", "") │ │ 93 │ │ │ │ 94 │ │ if artists := resp.get("artists"): │ │ ❱ 95 │ │ │ albumartist = ", ".join(a["name"] for a in artists) │ │ 96 │ │ else: │ │ 97 │ │ │ albumartist = typed(safe_get(resp, "artist", "name"), str) │ │ 98 │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────╯ TypeError: sequence item 0: expected str instance, NoneType found sys:1: RuntimeWarning: coroutine 'Playlist.download.._resolve_download' was never awaited

Command Used

rip --version                                                                                                                                                                                            
rip, version 2.0.5

rip lastfm https://www.last.fm/fr/user/yodatak/playlists/12954131

Debug Traceback

artwork.py:19
╭─────────────────────────────── Traceback (most recent call last) ────────────────────────────────╮
│ /var/home/yodatak/.local/bin/rip:8 in <module>                                                   │
│                                                                                                  │
│   5 from streamrip.rip import rip                                                                │
│   6 if __name__ == '__main__':                                                                   │
│   7 │   sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])                         │
│ ❱ 8 │   sys.exit(rip())                                                                          │
│   9                                                                                              │
│                                                                                                  │
│ ╭──────────────────────────── locals ─────────────────────────────╮                              │
│ │  re = <module 're' from '/usr/lib64/python3.12/re/__init__.py'> │                              │
│ │ rip = <HelpColorsGroup rip>                                     │                              │
│ │ sys = <module 'sys' (built-in)>                                 │                              │
│ ╰─────────────────────────────────────────────────────────────────╯                              │
│                                                                                                  │
│ /var/home/yodatak/.local/lib/python3.12/site-packages/click/core.py:1157 in __call__             │
│                                                                                                  │
│ /var/home/yodatak/.local/lib/python3.12/site-packages/click/core.py:1078 in main                 │
│                                                                                                  │
│ /var/home/yodatak/.local/lib/python3.12/site-packages/click/core.py:1688 in invoke               │
│                                                                                                  │
│ /var/home/yodatak/.local/lib/python3.12/site-packages/click/core.py:1434 in invoke               │
│                                                                                                  │
│ /var/home/yodatak/.local/lib/python3.12/site-packages/click/core.py:783 in invoke                │
│                                                                                                  │
│ /var/home/yodatak/.local/lib/python3.12/site-packages/click/decorators.py:33 in new_func         │
│                                                                                                  │
│ /var/home/yodatak/.local/lib/python3.12/site-packages/streamrip/rip/cli.py:28 in wrapper         │
│                                                                                                  │
│    25 def coro(f):                                                                               │
│    26 │   @wraps(f)                                                                              │
│    27 │   def wrapper(*args, **kwargs):                                                          │
│ ❱  28 │   │   return asyncio.run(f(*args, **kwargs))                                             │
│    29 │                                                                                          │
│    30 │   return wrapper                                                                         │
│    31                                                                                            │
│                                                                                                  │
│ ╭─────────────────────────────────── locals ────────────────────────────────────╮                │
│ │   args = (<click.core.Context object at 0x7fcceb1cca40>,)                     │                │
│ │      f = <function lastfm at 0x7fcce9209620>                                  │                │
│ │ kwargs = {                                                                    │                │
│ │          │   'url': 'https://www.last.fm/fr/user/yodatak/playlists/12954131', │                │
│ │          │   'source': None,                                                  │                │
│ │          │   'fallback_source': None                                          │                │
│ │          }                                                                    │                │
│ ╰───────────────────────────────────────────────────────────────────────────────╯                │
│                                                                                                  │
│ /usr/lib64/python3.12/asyncio/runners.py:194 in run                                              │
│                                                                                                  │
│   191 │   │   │   "asyncio.run() cannot be called from a running event loop")                    │
│   192 │                                                                                          │
│   193 │   with Runner(debug=debug, loop_factory=loop_factory) as runner:                         │
│ ❱ 194 │   │   return runner.run(main)                                                            │
│   195                                                                                            │
│   196                                                                                            │
│   197 def _cancel_all_tasks(loop):                                                               │
│                                                                                                  │
│ ╭───────────────────────────── locals ─────────────────────────────╮                             │
│ │        debug = None                                              │                             │
│ │ loop_factory = None                                              │                             │
│ │         main = <coroutine object lastfm at 0x7fcce9359ea0>       │                             │
│ │       runner = <asyncio.runners.Runner object at 0x7fcce9210aa0> │                             │
│ ╰──────────────────────────────────────────────────────────────────╯                             │
│                                                                                                  │
│ /usr/lib64/python3.12/asyncio/runners.py:118 in run                                              │
│                                                                                                  │
│   115 │   │                                                                                      │
│   116 │   │   self._interrupt_count = 0                                                          │
│   117 │   │   try:                                                                               │
│ ❱ 118 │   │   │   return self._loop.run_until_complete(task)                                     │
│   119 │   │   except exceptions.CancelledError:                                                  │
│   120 │   │   │   if self._interrupt_count > 0:                                                  │
│   121 │   │   │   │   uncancel = getattr(task, "uncancel", None)                                 │
│                                                                                                  │
│ ╭─────────────────────────────────────────── locals ───────────────────────────────────────────╮ │
│ │        context = <_contextvars.Context object at 0x7fccea3ebb00>                             │ │
│ │           coro = <coroutine object lastfm at 0x7fcce9359ea0>                                 │ │
│ │           self = <asyncio.runners.Runner object at 0x7fcce9210aa0>                           │ │
│ │ sigint_handler = functools.partial(<bound method Runner._on_sigint of                        │ │
│ │                  <asyncio.runners.Runner object at 0x7fcce9210aa0>>, main_task=<Task         │ │
│ │                  finished name='Task-1' coro=<lastfm() done, defined at                      │ │
│ │                  /var/home/yodatak/.local/lib/python3.12/site-packages/streamrip/rip/cli.py… │ │
│ │                  exception=TypeError('sequence item 0: expected str instance, NoneType       │ │
│ │                  found')>)                                                                   │ │
│ │           task = <Task finished name='Task-1' coro=<lastfm() done, defined at                │ │
│ │                  /var/home/yodatak/.local/lib/python3.12/site-packages/streamrip/rip/cli.py… │ │
│ │                  exception=TypeError('sequence item 0: expected str instance, NoneType       │ │
│ │                  found')>                                                                    │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ │
│                                                                                                  │
│ /usr/lib64/python3.12/asyncio/base_events.py:685 in run_until_complete                           │
│                                                                                                  │
│    682 │   │   if not future.done():                                                             │
│    683 │   │   │   raise RuntimeError('Event loop stopped before Future completed.')             │
│    684 │   │                                                                                     │
│ ❱  685 │   │   return future.result()                                                            │
│    686 │                                                                                         │
│    687 │   def stop(self):                                                                       │
│    688 │   │   """Stop running the event loop.                                                   │
│                                                                                                  │
│ ╭─────────────────────────────────────────── locals ───────────────────────────────────────────╮ │
│ │   future = <Task finished name='Task-1' coro=<lastfm() done, defined at                      │ │
│ │            /var/home/yodatak/.local/lib/python3.12/site-packages/streamrip/rip/cli.py:376>   │ │
│ │            exception=TypeError('sequence item 0: expected str instance, NoneType found')>    │ │
│ │ new_task = False                                                                             │ │
│ │     self = <_UnixSelectorEventLoop running=False closed=True debug=False>                    │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ │
│                                                                                                  │
│ /var/home/yodatak/.local/lib/python3.12/site-packages/streamrip/rip/cli.py:396 in lastfm         │
│                                                                                                  │
│   393 │   with config as cfg:                                                                    │
│   394 │   │   async with Main(cfg) as main:                                                      │
│   395 │   │   │   await main.resolve_lastfm(url)                                                 │
│ ❱ 396 │   │   │   await main.rip()                                                               │
│   397                                                                                            │
│   398                                                                                            │
│   399 @rip.command()                                                                             │
│                                                                                                  │
│ ╭────────────────────────────────── locals ──────────────────────────────────╮                   │
│ │             cfg = <streamrip.config.Config object at 0x7fcce93ab950>       │                   │
│ │          config = <streamrip.config.Config object at 0x7fcce93ab950>       │                   │
│ │             ctx = <click.core.Context object at 0x7fcceb1cca40>            │                   │
│ │ fallback_source = None                                                     │                   │
│ │            main = <streamrip.rip.main.Main object at 0x7fcce93a8380>       │                   │
│ │          source = None                                                     │                   │
│ │             url = 'https://www.last.fm/fr/user/yodatak/playlists/12954131' │                   │
│ ╰────────────────────────────────────────────────────────────────────────────╯                   │
│                                                                                                  │
│ /var/home/yodatak/.local/lib/python3.12/site-packages/streamrip/rip/main.py:165 in rip           │
│                                                                                                  │
│   162 │                                                                                          │
│   163 │   async def rip(self):                                                                   │
│   164 │   │   """Download all resolved items."""                                                 │
│ ❱ 165 │   │   await asyncio.gather(*[item.rip() for item in self.media])                         │
│   166 │                                                                                          │
│   167 │   async def search_interactive(self, source: str, media_type: str, query: str):          │
│   168 │   │   client = await self.get_logged_in_client(source)                                   │
│                                                                                                  │
│ ╭───────────────────────── locals ──────────────────────────╮                                    │
│ │ self = <streamrip.rip.main.Main object at 0x7fcce93a8380> │                                    │
│ ╰───────────────────────────────────────────────────────────╯                                    │
│                                                                                                  │
│ /var/home/yodatak/.local/lib/python3.12/site-packages/streamrip/media/media.py:7 in rip          │
│                                                                                                  │
│    4 class Media(ABC):                                                                           │
│    5 │   async def rip(self):                                                                    │
│    6 │   │   await self.preprocess()                                                             │
│ ❱  7 │   │   await self.download()                                                               │
│    8 │   │   await self.postprocess()                                                            │
│    9 │                                                                                           │
│   10 │   @abstractmethod                                                                         │
│                                                                                                  │
│                                                                                                  │
│ /var/home/yodatak/.local/lib/python3.12/site-packages/streamrip/metadata/album.py:95 in          │
│ from_qobuz                                                                                       │
│                                                                                                  │
│    92 │   │   _copyright = resp.get("copyright", "")                                             │
│    93 │   │                                                                                      │
│    94 │   │   if artists := resp.get("artists"):                                                 │
│ ❱  95 │   │   │   albumartist = ", ".join(a["name"] for a in artists)                            │
│    96 │   │   else:                                                                              │
│    97 │   │   │   albumartist = typed(safe_get(resp, "artist", "name"), str)                     │
│    98                                                                                            │
│                                                                                                  │
│ ╭─────────────────────────────────────────── locals ───────────────────────────────────────────╮ │
│ │ _copyright = '2015 AWR Records 2015 AWR Records'                                             │ │
│ │      album = 'XXXXX'                             │ │
│ │    artists = [{'id': 1224203, 'name': None, 'roles': ['main-artist']}]                       │ │
│ │        cls = <class 'streamrip.metadata.album.AlbumMetadata'>                                │ │
│ │       date = '2015-03-31'                                                                    │ │
│ │      genre = ['Film', 'Film→Bandes originales de films']                                     │ │
│ │     genres = ['Bandes originales de films', 'Film']                                          │ │
│ │       resp = {                                                                               │ │
│ │              │   'maximum_bit_depth': 16,                                                    │ │
│ │              │   'image': {                                                                  │ │
│ │              │   │   'small':                                                                │ │
│ │              'https://static.qobuz.com/images/covers/zb/ad/dpognys4zadzb_230.jpg',           │ │
│ │              │   │   'thumbnail':                                                            │ │
│ │              'https://static.qobuz.com/images/covers/zb/ad/dpognys4zadzb_50.jpg',            │ │
│ │              │   │   'large':                                                                │ │
│ │              'https://static.qobuz.com/images/covers/zb/ad/dpognys4zadzb_600.jpg',           │ │
│ │              │   │   'back': None                                                            │ │
│ │              │   },                                                                          │ │
│ │              │   'media_count': 1,                                                           │ │
│ │              │   'artist': {                                                                 │ │
│ │              │   │   'image': None,                                                          │ │
│ │              │   │   'name': 'Various Artists',                                              │ │
│ │              │   │   'id': 145383,                                                           │ │
│ │              │   │   'albums_count': 1313843,                                                │ │
│ │              │   │   'slug': 'various-artists',                                              │ │
│ │              │   │   'picture': None                                                         │ │
│ │              │   },                                                                          │ │
│ │              │   'artists': [{'id': 1224203, 'name': None, 'roles': ['main-artist']}],       │ │
│ │              │   'upc': '0892360002073',                                                     │ │
│ │              │   'released_at': 1427752800,                                                  │ │
│ │              │   'label': {                                                                  │ │
│ │              │   │   'name': 'AWR Records',                                                  │ │
│ │              │   │   'id': 1744163,                                                          │ │
│ │              │   │   'albums_count': 9,                                                      │ │
│ │              │   │   'supplier_id': 95,                                                      │ │
│ │              │   │   'slug': 'awr-records-1'                                                 │ │
│ │              │   },                                                                          │ │
│ │              │   'title': 'XXXX',               │ │
│ │              │   'qobuz_id': 123205449,                                                      │ │
│ │              │   ... +46                                                                     │ │
│ │              }                                                                               │ │
│ │ tracktotal = 13                                                                              │ │
│ │       year = '2015'                                                                          │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
TypeError: sequence item 0: expected str instance, NoneType found
sys:1: RuntimeWarning: coroutine 'Playlist.download.<locals>._resolve_download' was never awaited

### Config File

```toml
[downloads]
# Folder where tracks are downloaded to
folder = "/mnt/XXX/XXXX"
# Put Qobuz albums in a 'Qobuz' folder, Tidal albums in 'Tidal' etc.
source_subdirectories = false

# Download (and convert) tracks all at once, instead of sequentially. 
# If you are converting the tracks, or have fast internet, this will 
# substantially improve processing speed.
concurrency = true
# The maximum number of tracks to download at once
# If you have very fast internet, you will benefit from a higher value,
# A value that is too high for your bandwidth may cause slowdowns
# Set to -1 for no limit
max_connections = 6
# Max number of API requests per source to handle per minute
# Set to -1 for no limit
requests_per_minute = 60

[qobuz]
# 1: 320kbps MP3, 2: 16/44.1, 3: 24/<=96, 4: 24/>=96
quality = 3
# This will download booklet pdfs that are included with some albums
download_booklets = false

# Authenticate to Qobuz using auth token? Value can be true/false only
use_auth_token = true
# Enter your userid if the above use_auth_token is set to true, else enter your email
email_or_userid = "992824"
# Enter your auth token if the above use_auth_token is set to true, else enter the md5 hash of your plaintext password
password_or_token = "XXXX"
# Do not change
app_id = "XXXX"
# Do not change
secrets = ["XXX", "XXX"]

[tidal]
# 0: 256kbps AAC, 1: 320kbps AAC, 2: 16/44.1 "HiFi" FLAC, 3: 24/44.1 "MQA" FLAC
quality = 3
# This will download videos included in Video Albums.
download_videos = true

# Do not change any of the fields below
user_id = ""
country_code = ""
access_token = ""
refresh_token = ""
# Tokens last 1 week after refresh. This is the Unix timestamp of the expiration
# time. If you haven't used streamrip in more than a week, you may have to log
# in again using `rip config --tidal`
token_expiry = ""

[deezer]
# 0, 1, or 2
# This only applies to paid Deezer subscriptions. Those using deezloader
# are automatically limited to quality = 1
quality = 2
# An authentication cookie that allows streamrip to use your Deezer account
# See https://github.com/nathom/streamrip/wiki/Finding-Your-Deezer-ARL-Cookie
# for instructions on how to find this
arl = "XXXXXXXXXX"
# This allows for free 320kbps MP3 downloads from Deezer
# If an arl is provided, deezloader is never used
use_deezloader = false
# This warns you when the paid deezer account is not logged in and rip falls
# back to deezloader, which is unreliable
deezloader_warnings = true

[soundcloud]
# Only 0 is available for now
quality = 0
# This changes periodically, so it needs to be updated
client_id = ""
app_version = ""

[youtube]
# Only 0 is available for now
quality = 0
# Download the video along with the audio
download_videos = false
# The path to download the videos to
video_downloads_folder = "/var/home/yodatak/XXXX/XXXX"

[database]
# Create a database that contains all the track IDs downloaded so far
# Any time a track logged in the database is requested, it is skipped
# This can be disabled temporarily with the --no-db flag
downloads_enabled = true
# Path to the downloads database 
downloads_path = "/var/home/yodatak/.config/streamrip/downloads.db"
# If a download fails, the item ID is stored here. Then, `rip repair` can be
# called to retry the downloads
failed_downloads_enabled = true
failed_downloads_path = "/var/home/yodatak/.config/streamrip/failed_downloads.db"

# Convert tracks to a codec after downloading them.
[conversion]
enabled = false
# FLAC, ALAC, OPUS, MP3, VORBIS, or AAC
codec = "ALAC"
# In Hz. Tracks are downsampled if their sampling rate is greater than this. 
# Value of 48000 is recommended to maximize quality and minimize space
sampling_rate = 48000
# Only 16 and 24 are available. It is only applied when the bit depth is higher
# than this value.
bit_depth = 24
# Only applicable for lossy codecs
lossy_bitrate = 320

# Filter a Qobuz artist's discography. Set to 'true' to turn on a filter.
# This will also be applied to other sources, but is not guaranteed to work correctly
[qobuz_filters]
# Remove Collectors Editions, live recordings, etc.
extras = true
# Picks the highest quality out of albums with identical titles.
repeats = true
# Remove EPs and Singles
non_albums = false
# Remove albums whose artist is not the one requested
features = false
# Skip non studio albums
non_studio_albums = true
# Only download remastered albums
non_remaster = false

[artwork]
# Write the image to the audio file
embed = true
# The size of the artwork to embed. Options: thumbnail, small, large, original.
# "original" images can be up to 30MB, and may fail embedding. 
# Using "large" is recommended.
embed_size = "large"
# If this is set to a value > 0, max(width, height) of the embedded art will be set to this value in pixels
# Proportions of the image will remain the same
embed_max_width = -1
# Save the cover image at the highest quality as a seperate jpg file
save_artwork = true
# If this is set to a value > 0, max(width, height) of the saved art will be set to this value in pixels
# Proportions of the image will remain the same
saved_max_width = -1

[metadata]
# Sets the value of the 'ALBUM' field in the metadata to the playlist's name. 
# This is useful if your music library software organizes tracks based on album name.
set_playlist_to_album = true
# If part of a playlist, sets the `tracknumber` field in the metadata to the track's 
# position in the playlist instead of its position in its album
renumber_playlist_tracks = true
# The following metadata tags won't be applied
# See https://github.com/nathom/streamrip/wiki/Metadata-Tag-Names for more info
exclude = []

# Changes the folder and file names generated by streamrip.
[filepaths]
# Create folders for single tracks within the downloads directory using the folder_format
# template
add_singles_to_folder = true
# Available keys: "albumartist", "title", "year", "bit_depth", "sampling_rate",
# "id", and "albumcomposer"
folder_format = "{albumartist}/{albumartist} - {title} ({year}) [{container}] [{bit_depth}B-{sampling_rate}kHz]"
# Available keys: "tracknumber", "artist", "albumartist", "composer", "title",
# and "albumcomposer", "explicit"
track_format = "{tracknumber:02}. {artist} - {title}{explicit}"
# Only allow printable ASCII characters in filenames.
restrict_characters = false
# Truncate the filename if it is greater than this number of characters
# Setting this to false may cause downloads to fail on some systems
truncate_to = 120

# Last.fm playlists are downloaded by searching for the titles of the tracks
[lastfm]
# The source on which to search for the tracks.
source = "qobuz"
# If no results were found with the primary source, the item is searched for 
# on this one.
fallback_source = ""

[cli]
# Print "Downloading {Album name}" etc. to screen
text_output = true
# Show resolve, download progress bars
progress_bars = true
# The maximum number of search results to show in the interactive menu
max_search_results = 100

[misc]
# Metadata to identify this config file. Do not change.
version = "2.0.3"
# Print a message if a new version of streamrip is available 
check_for_updates = true

Operating System

linux

streamrip version

2.0.5

Screenshots and recordings

No response

Additional context

No response

yodatak commented 2 months ago

I cannot post the full debug log so there is

yodatak commented 2 months ago
rip -vvv lastfm https://www.last.fm/fr/user/yodatak/playlists/12954131                                                                                                                                    ⬢ [fedora-toolbox:39] 
[21:47:58] DEBUG    Showing all debug logs                                                                                                                                                                                         cli.py:102
           DEBUG    Raw request signature: X.X                                                                              qobuz.py:414
           DEBUG    Hashed request signature: X                                                                                                                                                   qobuz.py:416
           DEBUG    api_request: endpoint=track/getFileUrl, params={'request_ts': 1713901678X9773104, 'request_sig': 'X', 'track_id': '19512574', 'format_id': 27, 'intent': 'stream'}            qobuz.py:431
           DEBUG    Raw request signature: XXX.X                                                                              qobuz.py:414
           DEBUG    Hashed request signature: XXX                                                                                                                                                   qobuz.py:416
⠸ Logging into qobuz                         

                    'inapp_purchase_subscripton': True, 'opt_in': True, 'pre_register_opt_in': True, 'pre_register_zipcode': False, 'music_import': True, 'radio': True}, 'player_settings': [], 'externals': {}},                           
                    'user_auth_token': 'XXX'}                                                                                                             
           DEBUG    Logged in to Qobuz                                                                                                                                                                                           qobuz.py:190
           DEBUG    Fetching lastfm playlist                                                                                                                                                                                  playlist.py:329
[21:48:02] DEBUG    api_request: endpoint=track/search, params={'query': 'XXXXX', 'limit': 1}         
Searching for last.fm tracks (169 found, 0 failed, 1782 total)[21:49:53] DEBUG    paginate: initial request made with status 200

22:17:00] DEBUG    Raw request signature: trackgetFileUrlformat_id7intentstreamtrack_id1781581121713903420.4448311979549437fcc4a3faad4867b5cd25dcb                                                                              qobuz.py:414
           DEBUG    Hashed request signature: d019b671e2483bf47e0a7f00c2f7b7d0                                                                                                                                                   qobuz.py:416
           DEBUG    api_request: endpoint=track/getFileUrl, params={'request_ts': 1713903420.4448311, 'request_sig': 'd019b671e2483bf47e0a7f00c2f7b7d0', 'track_id': '178158112', 'format_id': 7, 'intent': 'stream'}            qobuz.py:431
[22:17:01] DEBUG    Removing dirs {'/mnt/XXXX/Weak/__artwork'}                                                                                                                                                        artwork.py:19
╭─────────────────────────────── Traceback (most recent call last) ────────────────────────────────╮
│ /var/home/yodatak/.local/bin/rip:8 in <module>                                                   │
│                                                                                                  │
│   5 from streamrip.rip import rip                                                                │
│   6 if __name__ == '__main__':                                                                   │
│   7 │   sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])                         │
│ ❱ 8 │   sys.exit(rip())                                                                          │
│   9                                                                                              │
│                                                                                                  │
│ ╭──────────────────────────── locals ─────────────────────────────╮                              │
│ │  re = <module 're' from '/usr/lib64/python3.12/re/__init__.py'> │                              │
│ │ rip = <HelpColorsGroup rip>                                     │                              │
│ │ sys = <module 'sys' (built-in)>                                 │                              │
│ ╰─────────────────────────────────────────────────────────────────╯                              │
│                                                                                                  │
│ /var/home/yodatak/.local/lib/python3.12/site-packages/click/core.py:1157 in __call__             │
│                                                                                                  │
│ /var/home/yodatak/.local/lib/python3.12/site-packages/click/core.py:1078 in main                 │
│                                                                                                  │
│ /var/home/yodatak/.local/lib/python3.12/site-packages/click/core.py:1688 in invoke               │
│                                                                                                  │
│ /var/home/yodatak/.local/lib/python3.12/site-packages/click/core.py:1434 in invoke               │
│                                                                                                  │
│ /var/home/yodatak/.local/lib/python3.12/site-packages/click/core.py:783 in invoke                │
│                                                                                                  │
│ /var/home/yodatak/.local/lib/python3.12/site-packages/click/decorators.py:33 in new_func         │
│                                                                                                  │
│ /var/home/yodatak/.local/lib/python3.12/site-packages/streamrip/rip/cli.py:28 in wrapper         │
│                                                                                                  │
│    25 def coro(f):                                                                               │
│    26 │   @wraps(f)                                                                              │
│    27 │   def wrapper(*args, **kwargs):                                                          │
│ ❱  28 │   │   return asyncio.run(f(*args, **kwargs))                                             │
│    29 │                                                                                          │
│    30 │   return wrapper                                                                         │
│    31                                                                                            │
│                                                                                                  │
│ ╭─────────────────────────────────── locals ────────────────────────────────────╮                │
│ │   args = (<click.core.Context object at 0x7fcceb1cca40>,)                     │                │
│ │      f = <function lastfm at 0x7fcce9209620>                                  │                │
│ │ kwargs = {                                                                    │                │
│ │          │   'url': 'https://www.last.fm/fr/user/yodatak/playlists/12954131', │                │
│ │          │   'source': None,                                                  │                │
│ │          │   'fallback_source': None                                          │                │
│ │          }                                                                    │                │
│ ╰───────────────────────────────────────────────────────────────────────────────╯                │
│                                                                                                  │
│ /usr/lib64/python3.12/asyncio/runners.py:194 in run                                              │
│                                                                                                  │
│   191 │   │   │   "asyncio.run() cannot be called from a running event loop")                    │
│   192 │                                                                                          │
│   193 │   with Runner(debug=debug, loop_factory=loop_factory) as runner:                         │
│ ❱ 194 │   │   return runner.run(main)                                                            │
│   195                                                                                            │
│   196                                                                                            │
│   197 def _cancel_all_tasks(loop):                                                               │
│                                                                                                  │
│ ╭───────────────────────────── locals ─────────────────────────────╮                             │
│ │        debug = None                                              │                             │
│ │ loop_factory = None                                              │                             │
│ │         main = <coroutine object lastfm at 0x7fcce9359ea0>       │                             │
│ │       runner = <asyncio.runners.Runner object at 0x7fcce9210aa0> │                             │
│ ╰──────────────────────────────────────────────────────────────────╯                             │
│                                                                                                  │
│ /usr/lib64/python3.12/asyncio/runners.py:118 in run                                              │
│                                                                                                  │
│   115 │   │                                                                                      │
│   116 │   │   self._interrupt_count = 0                                                          │
│   117 │   │   try:                                                                               │
│ ❱ 118 │   │   │   return self._loop.run_until_complete(task)                                     │
│   119 │   │   except exceptions.CancelledError:                                                  │
│   120 │   │   │   if self._interrupt_count > 0:                                                  │
│   121 │   │   │   │   uncancel = getattr(task, "uncancel", None)                                 │
│                                                                                                  │
│ ╭─────────────────────────────────────────── locals ───────────────────────────────────────────╮ │
│ │        context = <_contextvars.Context object at 0x7fccea3ebb00>                             │ │
│ │           coro = <coroutine object lastfm at 0x7fcce9359ea0>                                 │ │
│ │           self = <asyncio.runners.Runner object at 0x7fcce9210aa0>                           │ │
│ │ sigint_handler = functools.partial(<bound method Runner._on_sigint of                        │ │
│ │                  <asyncio.runners.Runner object at 0x7fcce9210aa0>>, main_task=<Task         │ │
│ │                  finished name='Task-1' coro=<lastfm() done, defined at                      │ │
│ │                  /var/home/yodatak/.local/lib/python3.12/site-packages/streamrip/rip/cli.py… │ │
│ │                  exception=TypeError('sequence item 0: expected str instance, NoneType       │ │
│ │                  found')>)                                                                   │ │
│ │           task = <Task finished name='Task-1' coro=<lastfm() done, defined at                │ │
│ │                  /var/home/yodatak/.local/lib/python3.12/site-packages/streamrip/rip/cli.py… │ │
│ │                  exception=TypeError('sequence item 0: expected str instance, NoneType       │ │
│ │                  found')>                                                                    │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ │
│                                                                                                  │
│ /usr/lib64/python3.12/asyncio/base_events.py:685 in run_until_complete                           │
│                                                                                                  │
│    682 │   │   if not future.done():                                                             │
│    683 │   │   │   raise RuntimeError('Event loop stopped before Future completed.')             │
│    684 │   │                                                                                     │
│ ❱  685 │   │   return future.result()                                                            │
│    686 │                                                                                         │
│    687 │   def stop(self):                                                                       │
│    688 │   │   """Stop running the event loop.                                                   │
│                                                                                                  │
│ ╭─────────────────────────────────────────── locals ───────────────────────────────────────────╮ │
│ │   future = <Task finished name='Task-1' coro=<lastfm() done, defined at                      │ │
│ │            /var/home/yodatak/.local/lib/python3.12/site-packages/streamrip/rip/cli.py:376>   │ │
│ │            exception=TypeError('sequence item 0: expected str instance, NoneType found')>    │ │
│ │ new_task = False                                                                             │ │
│ │     self = <_UnixSelectorEventLoop running=False closed=True debug=False>                    │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ │
│                                                                                                  │
│ /var/home/yodatak/.local/lib/python3.12/site-packages/streamrip/rip/cli.py:396 in lastfm         │
│                                                                                                  │
│   393 │   with config as cfg:                                                                    │
│   394 │   │   async with Main(cfg) as main:                                                      │
│   395 │   │   │   await main.resolve_lastfm(url)                                                 │
│ ❱ 396 │   │   │   await main.rip()                                                               │
│   397                                                                                            │
│   398                                                                                            │
│   399 @rip.command()                                                                             │
│                                                                                                  │
│ ╭────────────────────────────────── locals ──────────────────────────────────╮                   │
│ │             cfg = <streamrip.config.Config object at 0x7fcce93ab950>       │                   │
│ │          config = <streamrip.config.Config object at 0x7fcce93ab950>       │                   │
│ │             ctx = <click.core.Context object at 0x7fcceb1cca40>            │                   │
│ │ fallback_source = None                                                     │                   │
│ │            main = <streamrip.rip.main.Main object at 0x7fcce93a8380>       │                   │
│ │          source = None                                                     │                   │
│ │             url = 'https://www.last.fm/fr/user/yodatak/playlists/12954131' │                   │
│ ╰────────────────────────────────────────────────────────────────────────────╯                   │
│                                                                                                  │
│ /var/home/yodatak/.local/lib/python3.12/site-packages/streamrip/rip/main.py:165 in rip           │
│                                                                                                  │
│   162 │                                                                                          │
│   163 │   async def rip(self):                                                                   │
│   164 │   │   """Download all resolved items."""                                                 │
│ ❱ 165 │   │   await asyncio.gather(*[item.rip() for item in self.media])                         │
│   166 │                                                                                          │
│   167 │   async def search_interactive(self, source: str, media_type: str, query: str):          │
│   168 │   │   client = await self.get_logged_in_client(source)                                   │
│                                                                                                  │
│ ╭───────────────────────── locals ──────────────────────────╮                                    │
│ │ self = <streamrip.rip.main.Main object at 0x7fcce93a8380> │                                    │
│ ╰───────────────────────────────────────────────────────────╯                                    │
│                                                                                                  │
│ /var/home/yodatak/.local/lib/python3.12/site-packages/streamrip/media/media.py:7 in rip          │
│                                                                                                  │
│    4 class Media(ABC):                                                                           │
│    5 │   async def rip(self):                                                                    │
│    6 │   │   await self.preprocess()                                                             │
│ ❱  7 │   │   await self.download()                                                               │
│    8 │   │   await self.postprocess()                                                            │
│    9 │                                                                                           │
│   10 │   @abstractmethod                                                                         │
│                                                                                                  │
│ ╭───────────────────────────────────────── locals ─────────────────────────────────────────╮     │
│ │ self = Playlist(                                                                         │     │
│ │        │   name='Weak',                                                                  │     │
│ │        │   config=<streamrip.config.Config object at 0x7fcce93ab950>,                    │     │
│ │        │   client=<streamrip.client.qobuz.QobuzClient object at 0x7fcce928a360>,         │     │
│ │        │   tracks=[                                                                      │     │
│ │        │   │   PendingPlaylistTrack(                                                     │     │
│ │        │   │   │   id='41501679',                                                        │     │
│ │        │   │   │   client=<streamrip.client.qobuz.QobuzClient object at 0x7fcce928a360>, │     │
│ │        │   │   │   config=<streamrip.config.Config object at 0x7fcce93ab950>,            │     │
│ │        │   │   │   folder='/mnt/XXXX/Weak',                                    │     │
│ │        │   │   │   playlist_name='Weak',                                                 │     │
│ │        │   │   │   position=1,                                                           │     │
│ │        │   │   │   db=Database(                                                          │     │
│ │        │   │   │   │   downloads=<streamrip.db.Downloads object at 0x7fcce928a720>,      │     │
│ │        │   │   │   │   failed=<streamrip.db.Failed object at 0x7fcce928a7e0>             │     │
│ │        │   │   │   )                                                                     │     │
│ │        │   │   ),                                                                        │     │
│ │        │   │   PendingPlaylistTrack(                                                     │     │
│ │        │   │   │   id='183578',                                                          │     │
│ │        │   │   │   client=<streamrip.client.qobuz.QobuzClient object at 0x7fcce928a360>, │     │
│ │        │   │   │   config=<streamrip.config.Config object at 0x7fcce93ab950>,            │     │
│ │        │   │   │   folder='/mnt/XXXX/Weak',                                    │     │
│ │        │   │   │   playlist_name='Weak',                                                 │     │
│ │        │   │   │   position=2,                                                           │     │
│ │        │   │   │   db=Database(                                                          │     │
│ │        │   │   │   │   downloads=<streamrip.db.Downloads object at 0x7fcce928a720>,      │     │
│ │        │   │   │   │   failed=<streamrip.db.Failed object at 0x7fcce928a7e0>             │     │
│ │        │   │   │   )                                                                     │     │
│ │        │   │   ),                                                                        │     │
│ │        │   │   PendingPlaylistTrack(                                                     │     │
│ │        │   │   │   id='44808867',                                                        │     │
│ │        │   │   │   client=<streamrip.client.qobuz.QobuzClient object at 0x7fcce928a360>, │     │
│ │        │   │   │   config=<streamrip.config.Config object at 0x7fcce93ab950>,            │     │
│ │        │   │   │   folder='/mnt/XXXX/Weak',                                    │     │
│ │        │   │   │   playlist_name='Weak',                                                 │     │
│ │        │   │   │   position=3,                                                           │     │
│ │        │   │   │   db=Database(                                                          │     │
│ │        │   │   │   │   downloads=<streamrip.db.Downloads object at 0x7fcce928a720>,      │     │
│ │        │   │   │   │   failed=<streamrip.db.Failed object at 0x7fcce928a7e0>             │     │
│ │        │   │   │   )                                                                     │     │
│ │        │   │   ),                                                                        │     │
│ │        │   │   PendingPlaylistTrack(                                                     │     │
│ │        │   │   │   id='27606067',                                                        │     │
│ │        │   │   │   client=<streamrip.client.qobuz.QobuzClient object at 0x7fcce928a360>, │     │
│ │        │   │   │   config=<streamrip.config.Config object at 0x7fcce93ab950>,            │     │
│ │        │   │   │   folder='/mnt/XXXX/Weak',                                    │     │
│ │        │   │   │   playlist_name='Weak',                                                 │     │
│ │        │   │   │   position=4,                                                           │     │
│ │        │   │   │   db=Database(                                                          │     │
│ │        │   │   │   │   downloads=<streamrip.db.Downloads object at 0x7fcce928a720>,      │     │
│ │        │   │   │   │   failed=<streamrip.db.Failed object at 0x7fcce928a7e0>             │     │
│ │        │   │   │   )                                                                     │     │
│ │        │   │   ),                                                                        │     │
│ │        │   │   PendingPlaylistTrack(                                                     │     │
│ │        │   │   │   id='5122217',                                                         │     │
│ │        │   │   │   client=<streamrip.client.qobuz.QobuzClient object at 0x7fcce928a360>, │     │
│ │        │   │   │   config=<streamrip.config.Config object at 0x7fcce93ab950>,            │     │
│ │        │   │   │   folder='/mnt/XXXX/Weak',                                    │     │
│ │        │   │   │   playlist_name='Weak',                                                 │     │
│ │        │   │   │   position=5,                                                           │     │
│ │        │   │   │   db=Database(                                                          │     │
│ │        │   │   │   │   downloads=<streamrip.db.Downloads object at 0x7fcce928a720>,      │     │
│ │        │   │   │   │   failed=<streamrip.db.Failed object at 0x7fcce928a7e0>             │     │
│ │        │   │   │   )                                                                     │     │
│ │        │   │   ),                                                                        │     │
│ │        │   │   PendingPlaylistTrack(                                                     │     │
│ │        │   │   │   id='38572082',                                                        │     │
│ │        │   │   │   client=<streamrip.client.qobuz.QobuzClient object at 0x7fcce928a360>, │     │
│ │        │   │   │   config=<streamrip.config.Config object at 0x7fcce93ab950>,            │     │
│ │        │   │   │   folder='/mnt/XXXX/Weak',                                    │     │
│ │        │   │   │   playlist_name='Weak',                                                 │     │
│ │        │   │   │   position=6,                                                           │     │
│ │        │   │   │   db=Database(                                                          │     │
│ │        │   │   │   │   downloads=<streamrip.db.Downloads object at 0x7fcce928a720>,      │     │
│ │        │   │   │   │   failed=<streamrip.db.Failed object at 0x7fcce928a7e0>             │     │
│ │        │   │   │   )                                                                     │     │
│ │        │   │   ),                                                                        │     │
│ │        │   │   PendingPlaylistTrack(                                                     │     │
│ │        │   │   │   id='24222945',                                                        │     │
│ │        │   │   │   client=<streamrip.client.qobuz.QobuzClient object at 0x7fcce928a360>, │     │
│ │        │   │   │   config=<streamrip.config.Config object at 0x7fcce93ab950>,            │     │
│ │        │   │   │   folder='/mnt/XXXX/Weak',                                    │     │
│ │        │   │   │   playlist_name='Weak',                                                 │     │
│ │        │   │   │   position=7,                                                           │     │
│ │        │   │   │   db=Database(                                                          │     │
│ │        │   │   │   │   downloads=<streamrip.db.Downloads object at 0x7fcce928a720>,      │     │
│ │        │   │   │   │   failed=<streamrip.db.Failed object at 0x7fcce928a7e0>             │     │
│ │        │   │   │   )                                                                     │     │
│ │        │   │   ),                                                                        │     │
│ │        │   │   PendingPlaylistTrack(                                                     │     │
│ │        │   │   │   id='22515876',                                                        │     │
│ │        │   │   │   client=<streamrip.client.qobuz.QobuzClient object at 0x7fcce928a360>, │     │
│ │        │   │   │   config=<streamrip.config.Config object at 0x7fcce93ab950>,            │     │
│ │        │   │   │   folder='/mnt/XXXX/Weak',                                    │     │
│ │        │   │   │   playlist_name='Weak',                                                 │     │
│ │        │   │   │   position=8,                                                           │     │
│ │        │   │   │   db=Database(                                                          │     │
│ │        │   │   │   │   downloads=<streamrip.db.Downloads object at 0x7fcce928a720>,      │     │
│ │        │   │   │   │   failed=<streamrip.db.Failed object at 0x7fcce928a7e0>             │     │
│ │        │   │   │   )                                                                     │     │
│ │        │   │   ),                                                                        │     │
│ │        │   │   PendingPlaylistTrack(                                                     │     │
│ │        │   │   │   id='3147381',                                                         │     │
│ │        │   │   │   client=<streamrip.client.qobuz.QobuzClient object at 0x7fcce928a360>, │     │
│ │        │   │   │   config=<streamrip.config.Config object at 0x7fcce93ab950>,            │     │
│ │        │   │   │   folder='/mnt/XXXX/Weak',                                    │     │
│ │        │   │   │   playlist_name='Weak',                                                 │     │
│ │        │   │   │   position=9,                                                           │     │
│ │        │   │   │   db=Database(                                                          │     │
│ │        │   │   │   │   downloads=<streamrip.db.Downloads object at 0x7fcce928a720>,      │     │
│ │        │   │   │   │   failed=<streamrip.db.Failed object at 0x7fcce928a7e0>             │     │
│ │        │   │   │   )                                                                     │     │
│ │        │   │   ),                                                                        │     │
│ │        │   │   PendingPlaylistTrack(                                                     │     │
│ │        │   │   │   id='77469846',                                                        │     │
│ │        │   │   │   client=<streamrip.client.qobuz.QobuzClient object at 0x7fcce928a360>, │     │
│ │        │   │   │   config=<streamrip.config.Config object at 0x7fcce93ab950>,            │     │
│ │        │   │   │   folder='/mnt/XXXX/Weak',                                    │     │
│ │        │   │   │   playlist_name='Weak',                                                 │     │
│ │        │   │   │   position=10,                                                          │     │
│ │        │   │   │   db=Database(                                                          │     │
│ │        │   │   │   │   downloads=<streamrip.db.Downloads object at 0x7fcce928a720>,      │     │
│ │        │   │   │   │   failed=<streamrip.db.Failed object at 0x7fcce928a7e0>             │     │
│ │        │   │   │   )                                                                     │     │
│ │        │   │   ),                                                                        │     │
│ │        │   │   ... +1772                                                                 │     │
│ │        │   ]                                                                             │     │
│ │        )                                                                                 │     │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────╯     │
│                                                                                                  │
│ /var/home/yodatak/.local/lib/python3.12/site-packages/streamrip/media/playlist.py:133 in         │
│ download                                                                                         │
│                                                                                                  │
│   130 │   │   │   track_resolve_chunk_size,                                                      │
│   131 │   │   )                                                                                  │
│   132 │   │   for batch in batches:                                                              │
│ ❱ 133 │   │   │   await asyncio.gather(*batch)                                                   │
│   134 │                                                                                          │
│   135 │   @staticmethod                                                                          │
│   136 │   def batch(iterable, n=1):                                                              │
│                                                                                                  │
│ ╭─────────────────────────────────────────── locals ───────────────────────────────────────────╮ │
│ │        _resolve_download = <function Playlist.download.<locals>._resolve_download at         │ │
│ │                            0x7fcce8fbb560>                                                   │ │
│ │                    batch = [                                                                 │ │
│ │                            │   <coroutine object                                             │ │
│ │                            Playlist.download.<locals>._resolve_download at 0x7fcce9116a80>,  │ │
│ │                            │   <coroutine object                                             │ │
│ │                            Playlist.download.<locals>._resolve_download at 0x7fcce9116b50>,  │ │
│ │                            │   <coroutine object                                             │ │
│ │                            Playlist.download.<locals>._resolve_download at 0x7fcce9116c20>,  │ │
│ │                            │   <coroutine object                                             │ │
│ │                            Playlist.download.<locals>._resolve_download at 0x7fcce9116cf0>,  │ │
│ │                            │   <coroutine object                                             │ │
│ │                            Playlist.download.<locals>._resolve_download at 0x7fcce9116dc0>,  │ │
│ │                            │   <coroutine object                                             │ │
│ │                            Playlist.download.<locals>._resolve_download at 0x7fcce9116e90>,  │ │
│ │                            │   <coroutine object                                             │ │
│ │                            Playlist.download.<locals>._resolve_download at 0x7fcce9116f60>,  │ │
│ │                            │   <coroutine object                                             │ │
│ │                            Playlist.download.<locals>._resolve_download at 0x7fcce9117030>,  │ │
│ │                            │   <coroutine object                                             │ │
│ │                            Playlist.download.<locals>._resolve_download at 0x7fcce9117100>,  │ │
│ │                            │   <coroutine object                                             │ │
│ │                            Playlist.download.<locals>._resolve_download at 0x7fcce91171d0>,  │ │
│ │                            │   ... +10                                                       │ │
│ │                            ]                                                                 │ │
│ │                  batches = <generator object Playlist.batch at 0x7fcce83b1040>               │ │
│ │                     self = Playlist(                                                         │ │
│ │                            │   name='Weak',                                                  │ │
│ │                            │   config=<streamrip.config.Config object at 0x7fcce93ab950>,    │ │
│ │                            │   client=<streamrip.client.qobuz.QobuzClient object at          │ │
│ │                            0x7fcce928a360>,                                                  │ │
│ │                            │   tracks=[                                                      │ │
│ │                            │   │   PendingPlaylistTrack(                                     │ │
│ │                            │   │   │   id='41501679',                                        │ │
│ │                            │   │   │   client=<streamrip.client.qobuz.QobuzClient object at  │ │
│ │                            0x7fcce928a360>,                                                  │ │
│ │                            │   │   │   config=<streamrip.config.Config object at             │ │
│ │                            0x7fcce93ab950>,                                                  │ │
│ │                            │   │   │   folder='/mnt/XXXX/Weak',                    │ │
│ │                            │   │   │   playlist_name='Weak',                                 │ │
│ │                            │   │   │   position=1,                                           │ │
│ │                            │   │   │   db=Database(                                          │ │
│ │                            │   │   │   │   downloads=<streamrip.db.Downloads object at       │ │
│ │                            0x7fcce928a720>,                                                  │ │
│ │                            │   │   │   │   failed=<streamrip.db.Failed object at             │ │
│ │                            0x7fcce928a7e0>                                                   │ │
│ │                            │   │   │   )                                                     │ │
│ │                            │   │   ),                                                        │ │
│ │                            │   │   PendingPlaylistTrack(                                     │ │
│ │                            │   │   │   id='183578',                                          │ │
│ │                            │   │   │   client=<streamrip.client.qobuz.QobuzClient object at  │ │
│ │                            0x7fcce928a360>,                                                  │ │
│ │                            │   │   │   config=<streamrip.config.Config object at             │ │
│ │                            0x7fcce93ab950>,                                                  │ │
│ │                            │   │   │   folder='/mnt/XXXX/Weak',                    │ │
│ │                            │   │   │   playlist_name='Weak',                                 │ │
│ │                            │   │   │   position=2,                                           │ │
│ │                            │   │   │   db=Database(                                          │ │
│ │                            │   │   │   │   downloads=<streamrip.db.Downloads object at       │ │
│ │                            0x7fcce928a720>,                                                  │ │
│ │                            │   │   │   │   failed=<streamrip.db.Failed object at             │ │
│ │                            0x7fcce928a7e0>                                                   │ │
│ │                            │   │   │   )                                                     │ │
│ │                            │   │   ),                                                        │ │
│ │                            │   │   PendingPlaylistTrack(                                     │ │
│ │                            │   │   │   id='44808867',                                        │ │
│ │                            │   │   │   client=<streamrip.client.qobuz.QobuzClient object at  │ │
│ │                            0x7fcce928a360>,                                                  │ │
│ │                            │   │   │   config=<streamrip.config.Config object at             │ │
│ │                            0x7fcce93ab950>,                                                  │ │
│ │                            │   │   │   folder='/mnt/XXXX/Weak',                    │ │
│ │                            │   │   │   playlist_name='Weak',                                 │ │
│ │                            │   │   │   position=3,                                           │ │
│ │                            │   │   │   db=Database(                                          │ │
│ │                            │   │   │   │   downloads=<streamrip.db.Downloads object at       │ │
│ │                            0x7fcce928a720>,                                                  │ │
│ │                            │   │   │   │   failed=<streamrip.db.Failed object at             │ │
│ │                            0x7fcce928a7e0>                                                   │ │
│ │                            │   │   │   )                                                     │ │
│ │                            │   │   ),                                                        │ │
│ │                            │   │   PendingPlaylistTrack(                                     │ │
│ │                            │   │   │   id='27606067',                                        │ │
│ │                            │   │   │   client=<streamrip.client.qobuz.QobuzClient object at  │ │
│ │                            0x7fcce928a360>,                                                  │ │
│ │                            │   │   │   config=<streamrip.config.Config object at             │ │
│ │                            0x7fcce93ab950>,                                                  │ │
│ │                            │   │   │   folder='/mnt/XXXX/Weak',                    │ │
│ │                            │   │   │   playlist_name='Weak',                                 │ │
│ │                            │   │   │   position=4,                                           │ │
│ │                            │   │   │   db=Database(                                          │ │
│ │                            │   │   │   │   downloads=<streamrip.db.Downloads object at       │ │
│ │                            0x7fcce928a720>,                                                  │ │
│ │                            │   │   │   │   failed=<streamrip.db.Failed object at             │ │
│ │                            0x7fcce928a7e0>                                                   │ │
│ │                            │   │   │   )                                                     │ │
│ │                            │   │   ),                                                        │ │
│ │                            │   │   PendingPlaylistTrack(                                     │ │
│ │                            │   │   │   id='5122217',                                         │ │
│ │                            │   │   │   client=<streamrip.client.qobuz.QobuzClient object at  │ │
│ │                            0x7fcce928a360>,                                                  │ │
│ │                            │   │   │   config=<streamrip.config.Config object at             │ │
│ │                            0x7fcce93ab950>,                                                  │ │
│ │                            │   │   │   folder='/mnt/XXXX/Weak',                    │ │
│ │                            │   │   │   playlist_name='Weak',                                 │ │
│ │                            │   │   │   position=5,                                           │ │
│ │                            │   │   │   db=Database(                                          │ │
│ │                            │   │   │   │   downloads=<streamrip.db.Downloads object at       │ │
│ │                            0x7fcce928a720>,                                                  │ │
│ │                            │   │   │   │   failed=<streamrip.db.Failed object at             │ │
│ │                            0x7fcce928a7e0>                                                   │ │
│ │                            │   │   │   )                                                     │ │
│ │                            │   │   ),                                                        │ │
│ │                            │   │   PendingPlaylistTrack(                                     │ │
│ │                            │   │   │   id='38572082',                                        │ │
│ │                            │   │   │   client=<streamrip.client.qobuz.QobuzClient object at  │ │
│ │                            0x7fcce928a360>,                                                  │ │
│ │                            │   │   │   config=<streamrip.config.Config object at             │ │
│ │                            0x7fcce93ab950>,                                                  │ │
│ │                            │   │   │   folder='/mnt/XXXX/Weak',                    │ │
│ │                            │   │   │   playlist_name='Weak',                                 │ │
│ │                            │   │   │   position=6,                                           │ │
│ │                            │   │   │   db=Database(                                          │ │
│ │                            │   │   │   │   downloads=<streamrip.db.Downloads object at       │ │
│ │                            0x7fcce928a720>,                                                  │ │
│ │                            │   │   │   │   failed=<streamrip.db.Failed object at             │ │
│ │                            0x7fcce928a7e0>                                                   │ │
│ │                            │   │   │   )                                                     │ │
│ │                            │   │   ),                                                        │ │
│ │                            │   │   PendingPlaylistTrack(                                     │ │
│ │                            │   │   │   id='24222945',                                        │ │
│ │                            │   │   │   client=<streamrip.client.qobuz.QobuzClient object at  │ │
│ │                            0x7fcce928a360>,                                                  │ │
│ │                            │   │   │   config=<streamrip.config.Config object at             │ │
│ │                            0x7fcce93ab950>,                                                  │ │
│ │                            │   │   │   folder='/mnt/XXXX/Weak',                    │ │
│ │                            │   │   │   playlist_name='Weak',                                 │ │
│ │                            │   │   │   position=7,                                           │ │
│ │                            │   │   │   db=Database(                                          │ │
│ │                            │   │   │   │   downloads=<streamrip.db.Downloads object at       │ │
│ │                            0x7fcce928a720>,                                                  │ │
│ │                            │   │   │   │   failed=<streamrip.db.Failed object at             │ │
│ │                            0x7fcce928a7e0>                                                   │ │
│ │                            │   │   │   )                                                     │ │
│ │                            │   │   ),                                                        │ │
│ │                            │   │   PendingPlaylistTrack(                                     │ │
│ │                            │   │   │   id='22515876',                                        │ │
│ │                            │   │   │   client=<streamrip.client.qobuz.QobuzClient object at  │ │
│ │                            0x7fcce928a360>,                                                  │ │
│ │                            │   │   │   config=<streamrip.config.Config object at             │ │
│ │                            0x7fcce93ab950>,                                                  │ │
│ │                            │   │   │   folder='/mnt/XXXX/Weak',                    │ │
│ │                            │   │   │   playlist_name='Weak',                                 │ │
│ │                            │   │   │   position=8,                                           │ │
│ │                            │   │   │   db=Database(                                          │ │
│ │                            │   │   │   │   downloads=<streamrip.db.Downloads object at       │ │
│ │                            0x7fcce928a720>,                                                  │ │
│ │                            │   │   │   │   failed=<streamrip.db.Failed object at             │ │
│ │                            0x7fcce928a7e0>                                                   │ │
│ │                            │   │   │   )                                                     │ │
│ │                            │   │   ),                                                        │ │
│ │                            │   │   PendingPlaylistTrack(                                     │ │
│ │                            │   │   │   id='3147381',                                         │ │
│ │                            │   │   │   client=<streamrip.client.qobuz.QobuzClient object at  │ │
│ │                            0x7fcce928a360>,                                                  │ │
│ │                            │   │   │   config=<streamrip.config.Config object at             │ │
│ │                            0x7fcce93ab950>,                                                  │ │
│ │                            │   │   │   folder='/mnt/XXXX/Weak',                    │ │
│ │                            │   │   │   playlist_name='Weak',                                 │ │
│ │                            │   │   │   position=9,                                           │ │
│ │                            │   │   │   db=Database(                                          │ │
│ │                            │   │   │   │   downloads=<streamrip.db.Downloads object at       │ │
│ │                            0x7fcce928a720>,                                                  │ │
│ │                            │   │   │   │   failed=<streamrip.db.Failed object at             │ │
│ │                            0x7fcce928a7e0>                                                   │ │
│ │                            │   │   │   )                                                     │ │
│ │                            │   │   ),                                                        │ │
│ │                            │   │   PendingPlaylistTrack(                                     │ │
│ │                            │   │   │   id='77469846',                                        │ │
│ │                            │   │   │   client=<streamrip.client.qobuz.QobuzClient object at  │ │
│ │                            0x7fcce928a360>,                                                  │ │
│ │                            │   │   │   config=<streamrip.config.Config object at             │ │
│ │                            0x7fcce93ab950>,                                                  │ │
│ │                            │   │   │   folder='/mnt/XXXX/Weak',                    │ │
│ │                            │   │   │   playlist_name='Weak',                                 │ │
│ │                            │   │   │   position=10,                                          │ │
│ │                            │   │   │   db=Database(                                          │ │
│ │                            │   │   │   │   downloads=<streamrip.db.Downloads object at       │ │
│ │                            0x7fcce928a720>,                                                  │ │
│ │                            │   │   │   │   failed=<streamrip.db.Failed object at             │ │
│ │                            0x7fcce928a7e0>                                                   │ │
│ │                            │   │   │   )                                                     │ │
│ │                            │   │   ),                                                        │ │
│ │                            │   │   ... +1772                                                 │ │
│ │                            │   ]                                                             │ │
│ │                            )                                                                 │ │
│ │ track_resolve_chunk_size = 20                                                                │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ │
│                                                                                                  │
│ /var/home/yodatak/.local/lib/python3.12/site-packages/streamrip/media/playlist.py:123 in         │
│ _resolve_download                                                                                │
│                                                                                                  │
│   120 │   │   track_resolve_chunk_size = 20                                                      │
│   121 │   │                                                                                      │
│   122 │   │   async def _resolve_download(item: PendingPlaylistTrack):                           │
│ ❱ 123 │   │   │   track = await item.resolve()                                                   │
│   124 │   │   │   if track is None:                                                              │
│   125 │   │   │   │   return                                                                     │
│   126 │   │   │   await track.rip()                                                              │
│                                                                                                  │
│ ╭───────────────────────────────────── locals ─────────────────────────────────────╮             │
│ │ item = PendingPlaylistTrack(                                                     │             │
│ │        │   id='123205459',                                                       │             │
│ │        │   client=<streamrip.client.qobuz.QobuzClient object at 0x7fcce928a360>, │             │
│ │        │   config=<streamrip.config.Config object at 0x7fcce93ab950>,            │             │
│ │        │   folder='/mnt/XXXX/Weak',                                    │             │
│ │        │   playlist_name='Weak',                                                 │             │
│ │        │   position=677,                                                         │             │
│ │        │   db=Database(                                                          │             │
│ │        │   │   downloads=<streamrip.db.Downloads object at 0x7fcce928a720>,      │             │
│ │        │   │   failed=<streamrip.db.Failed object at 0x7fcce928a7e0>             │             │
│ │        │   )                                                                     │             │
│ │        )                                                                         │             │
│ ╰──────────────────────────────────────────────────────────────────────────────────╯             │
│                                                                                                  │
│ /var/home/yodatak/.local/lib/python3.12/site-packages/streamrip/media/playlist.py:54 in resolve  │
│                                                                                                  │
│    51 │   │   │   logger.error(f"Could not stream track {self.id}: {e}")                         │
│    52 │   │   │   return None                                                                    │
│    53 │   │                                                                                      │
│ ❱  54 │   │   album = AlbumMetadata.from_track_resp(resp, self.client.source)                    │
│    55 │   │   if album is None:                                                                  │
│    56 │   │   │   logger.error(                                                                  │
│    57 │   │   │   │   f"Track ({self.id}) not available for stream on {self.client.source}",     │
│                                                                                                  │
│ ╭─────────────────────────────────────────── locals ───────────────────────────────────────────╮ │
│ │ resp = {                                                                                     │ │
│ │        │   'maximum_bit_depth': 16,                                                          │ │
│ │        │   'copyright': '2015 AWR Records 2015 AWR Records',                                 │ │
│ │        │   'performers': 'Nobuo Uematsu, MainArtist',                                        │ │
│ │        │   'audio_info': {                                                                   │ │
│ │        │   │   'replaygain_track_gain': -5.7,                                                │ │
│ │        │   │   'replaygain_track_peak': 0.992554                                             │ │
│ │        │   },                                                                                │ │
│ │        │   'performer': {'id': 178818, 'name': 'Nobuo Uematsu'},                             │ │
│ │        │   'album': {                                                                        │ │
│ │        │   │   'maximum_bit_depth': 16,                                                      │ │
│ │        │   │   'image': {                                                                    │ │
│ │        │   │   │   'small':                                                                  │ │
│ │        'https://static.qobuz.com/images/covers/zb/ad/dpognys4zadzb_230.jpg',                 │ │
│ │        │   │   │   'thumbnail':                                                              │ │
│ │        'https://static.qobuz.com/images/covers/zb/ad/dpognys4zadzb_50.jpg',                  │ │
│ │        │   │   │   'large':                                                                  │ │
│ │        'https://static.qobuz.com/images/covers/zb/ad/dpognys4zadzb_600.jpg',                 │ │
│ │        │   │   │   'back': None                                                              │ │
│ │        │   │   },                                                                            │ │
│ │        │   │   'media_count': 1,                                                             │ │
│ │        │   │   'artist': {                                                                   │ │
│ │        │   │   │   'image': None,                                                            │ │
│ │        │   │   │   'name': 'Various Artists',                                                │ │
│ │        │   │   │   'id': 145383,                                                             │ │
│ │        │   │   │   'albums_count': 1313843,                                                  │ │
│ │        │   │   │   'slug': 'various-artists',                                                │ │
│ │        │   │   │   'picture': None                                                           │ │
│ │        │   │   },                                                                            │ │
│ │        │   │   'artists': [{'id': 1224203, 'name': None, 'roles': ['main-artist']}],         │ │
│ │        │   │   'upc': '0892360002073',                                                       │ │
│ │        │   │   'released_at': 1427752800,                                                    │ │
│ │        │   │   'label': {                                                                    │ │
│ │        │   │   │   'name': 'AWR Records',                                                    │ │
│ │        │   │   │   'id': 1744163,                                                            │ │
│ │        │   │   │   'albums_count': 9,                                                        │ │
│ │        │   │   │   'supplier_id': 95,                                                        │ │
│ │        │   │   │   'slug': 'awr-records-1'                                                   │ │
│ │        │   │   },                                                                            │ │
│ │        │   │   'title': 'Distant Worlds III: More Music from Final Fantasy',                 │ │
│ │        │   │   'qobuz_id': 123205449,                                                        │ │
│ │        │   │   ... +46                                                                       │ │
│ │        │   },                                                                                │ │
│ │        │   'work': None,                                                                     │ │
│ │        │   'isrc': 'USBVN1510810',                                                           │ │
│ │        │   'title': 'Roses of May (From "Final Fantasy IX")',                                │ │
│ │        │   'version': None,                                                                  │ │
│ │        │   ... +22                                                                           │ │
│ │        }                                                                                     │ │
│ │ self = PendingPlaylistTrack(                                                                 │ │
│ │        │   id='123205459',                                                                   │ │
│ │        │   client=<streamrip.client.qobuz.QobuzClient object at 0x7fcce928a360>,             │ │
│ │        │   config=<streamrip.config.Config object at 0x7fcce93ab950>,                        │ │
│ │        │   folder='/mnt/XXXX/Weak',                                                │ │
│ │        │   playlist_name='Weak',                                                             │ │
│ │        │   position=677,                                                                     │ │
│ │        │   db=Database(                                                                      │ │
│ │        │   │   downloads=<streamrip.db.Downloads object at 0x7fcce928a720>,                  │ │
│ │        │   │   failed=<streamrip.db.Failed object at 0x7fcce928a7e0>                         │ │
│ │        │   )                                                                                 │ │
│ │        )                                                                                     │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ │
│                                                                                                  │
│ /var/home/yodatak/.local/lib/python3.12/site-packages/streamrip/metadata/album.py:496 in         │
│ from_track_resp                                                                                  │
│                                                                                                  │
│   493 │   @classmethod                                                                           │
│   494 │   def from_track_resp(cls, resp: dict, source: str) -> AlbumMetadata | None:             │
│   495 │   │   if source == "qobuz":                                                              │
│ ❱ 496 │   │   │   return cls.from_qobuz(resp["album"])                                           │
│   497 │   │   if source == "tidal":                                                              │
│   498 │   │   │   return cls.from_tidal_playlist_track_resp(resp)                                │
│   499 │   │   if source == "soundcloud":                                                         │
│                                                                                                  │
│ ╭─────────────────────────────────────────── locals ───────────────────────────────────────────╮ │
│ │    cls = <class 'streamrip.metadata.album.AlbumMetadata'>                                    │ │
│ │   resp = {                                                                                   │ │
│ │          │   'maximum_bit_depth': 16,                                                        │ │
│ │          │   'copyright': '2015 AWR Records 2015 AWR Records',                               │ │
│ │          │   'performers': 'Nobuo Uematsu, MainArtist',                                      │ │
│ │          │   'audio_info': {                                                                 │ │
│ │          │   │   'replaygain_track_gain': -5.7,                                              │ │
│ │          │   │   'replaygain_track_peak': 0.992554                                           │ │
│ │          │   },                                                                              │ │
│ │          │   'performer': {'id': 178818, 'name': 'Nobuo Uematsu'},                           │ │
│ │          │   'album': {                                                                      │ │
│ │          │   │   'maximum_bit_depth': 16,                                                    │ │
│ │          │   │   'image': {                                                                  │ │
│ │          │   │   │   'small':                                                                │ │
│ │          'https://static.qobuz.com/images/covers/zb/ad/dpognys4zadzb_230.jpg',               │ │
│ │          │   │   │   'thumbnail':                                                            │ │
│ │          'https://static.qobuz.com/images/covers/zb/ad/dpognys4zadzb_50.jpg',                │ │
│ │          │   │   │   'large':                                                                │ │
│ │          'https://static.qobuz.com/images/covers/zb/ad/dpognys4zadzb_600.jpg',               │ │
│ │          │   │   │   'back': None                                                            │ │
│ │          │   │   },                                                                          │ │
│ │          │   │   'media_count': 1,                                                           │ │
│ │          │   │   'artist': {                                                                 │ │
│ │          │   │   │   'image': None,                                                          │ │
│ │          │   │   │   'name': 'Various Artists',                                              │ │
│ │          │   │   │   'id': 145383,                                                           │ │
│ │          │   │   │   'albums_count': 1313843,                                                │ │
│ │          │   │   │   'slug': 'various-artists',                                              │ │
│ │          │   │   │   'picture': None                                                         │ │
│ │          │   │   },                                                                          │ │
│ │          │   │   'artists': [{'id': 1224203, 'name': None, 'roles': ['main-artist']}],       │ │
│ │          │   │   'upc': '0892360002073',                                                     │ │
│ │          │   │   'released_at': 1427752800,                                                  │ │
│ │          │   │   'label': {                                                                  │ │
│ │          │   │   │   'name': 'AWR Records',                                                  │ │
│ │          │   │   │   'id': 1744163,                                                          │ │
│ │          │   │   │   'albums_count': 9,                                                      │ │
│ │          │   │   │   'supplier_id': 95,                                                      │ │
│ │          │   │   │   'slug': 'awr-records-1'                                                 │ │
│ │          │   │   },                                                                          │ │
│ │          │   │   'title': 'Distant Worlds III: More Music from Final Fantasy',               │ │
│ │          │   │   'qobuz_id': 123205449,                                                      │ │
│ │          │   │   ... +46                                                                     │ │
│ │          │   },                                                                              │ │
│ │          │   'work': None,                                                                   │ │
│ │          │   'isrc': 'USBVN1510810',                                                         │ │
│ │          │   'title': 'Roses of May (From "Final Fantasy IX")',                              │ │
│ │          │   'version': None,                                                                │ │
│ │          │   ... +22                                                                         │ │
│ │          }                                                                                   │ │
│ │ source = 'qobuz'                                                                             │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ │
│                                                                                                  │
│ /var/home/yodatak/.local/lib/python3.12/site-packages/streamrip/metadata/album.py:95 in          │
│ from_qobuz                                                                                       │
│                                                                                                  │
│    92 │   │   _copyright = resp.get("copyright", "")                                             │
│    93 │   │                                                                                      │
│    94 │   │   if artists := resp.get("artists"):                                                 │
│ ❱  95 │   │   │   albumartist = ", ".join(a["name"] for a in artists)                            │
│    96 │   │   else:                                                                              │
│    97 │   │   │   albumartist = typed(safe_get(resp, "artist", "name"), str)                     │
│    98                                                                                            │
│                                                                                                  │
│ ╭─────────────────────────────────────────── locals ───────────────────────────────────────────╮ │
│ │ _copyright = '2015 AWR Records 2015 AWR Records'                                             │ │
│ │      album = 'Distant Worlds III: More Music from Final Fantasy'                             │ │
│ │    artists = [{'id': 1224203, 'name': None, 'roles': ['main-artist']}]                       │ │
│ │        cls = <class 'streamrip.metadata.album.AlbumMetadata'>                                │ │
│ │       date = '2015-03-31'                                                                    │ │
│ │      genre = ['Film', 'Film→Bandes originales de films']                                     │ │
│ │     genres = ['Bandes originales de films', 'Film']                                          │ │
│ │       resp = {                                                                               │ │
│ │              │   'maximum_bit_depth': 16,                                                    │ │
│ │              │   'image': {                                                                  │ │
│ │              │   │   'small':                                                                │ │
│ │              'https://static.qobuz.com/images/covers/zb/ad/dpognys4zadzb_230.jpg',           │ │
│ │              │   │   'thumbnail':                                                            │ │
│ │              'https://static.qobuz.com/images/covers/zb/ad/dpognys4zadzb_50.jpg',            │ │
│ │              │   │   'large':                                                                │ │
│ │              'https://static.qobuz.com/images/covers/zb/ad/dpognys4zadzb_600.jpg',           │ │
│ │              │   │   'back': None                                                            │ │
│ │              │   },                                                                          │ │
│ │              │   'media_count': 1,                                                           │ │
│ │              │   'artist': {                                                                 │ │
│ │              │   │   'image': None,                                                          │ │
│ │              │   │   'name': 'Various Artists',                                              │ │
│ │              │   │   'id': 145383,                                                           │ │
│ │              │   │   'albums_count': 1313843,                                                │ │
│ │              │   │   'slug': 'various-artists',                                              │ │
│ │              │   │   'picture': None                                                         │ │
│ │              │   },                                                                          │ │
│ │              │   'artists': [{'id': 1224203, 'name': None, 'roles': ['main-artist']}],       │ │
│ │              │   'upc': '0892360002073',                                                     │ │
│ │              │   'released_at': 1427752800,                                                  │ │
│ │              │   'label': {                                                                  │ │
│ │              │   │   'name': 'AWR Records',                                                  │ │
│ │              │   │   'id': 1744163,                                                          │ │
│ │              │   │   'albums_count': 9,                                                      │ │
│ │              │   │   'supplier_id': 95,                                                      │ │
│ │              │   │   'slug': 'awr-records-1'                                                 │ │
│ │              │   },                                                                          │ │
│ │              │   'title': 'Distant Worlds III: More Music from Final Fantasy',               │ │
│ │              │   'qobuz_id': 123205449,                                                      │ │
│ │              │   ... +46                                                                     │ │
│ │              }                                                                               │ │
│ │ tracktotal = 13                                                                              │ │
│ │       year = '2015'                                                                          │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
TypeError: sequence item 0: expected str instance, NoneType found
sys:1: RuntimeWarning: coroutine 'Playlist.download.<locals>._resolve_download' was never awaited