fixed bug

This commit is contained in:
Hellow 2023-04-04 20:58:22 +02:00
parent 0f9550ad77
commit d9d59f36a0
3 changed files with 36 additions and 55 deletions

View File

@ -1,11 +1,11 @@
from typing import Optional, List, Tuple
from pathlib import Path
from collections import defaultdict
from typing import List, Tuple
import requests
from tqdm import tqdm
from ..utils import shared
from .parents import DatabaseObject
from ..utils import shared
class Target(DatabaseObject):
@ -82,21 +82,8 @@ class Target(DatabaseObject):
for chunk in r.iter_content(chunk_size=shared.CHUNK_SIZE):
size = f.write(chunk)
t.update(size)
return True
except requests.exceptions.Timeout:
shared.DOWNLOAD_LOGGER.error("Stream timed out.")
return False
"""
# doesn't work yet due to
# https://github.com/tqdm/tqdm/issues/261
with open(self.file_path,'wb') as f, \
tqdm(desc=self._file, total=total_size, unit='iB', unit_scale=True, unit_divisor=chunk_size) as pbar:
for chunk in r.iter_content(chunk_size=chunk_size):
size = f.write(chunk)
pbar.update(size)
"""
return True

View File

@ -489,17 +489,12 @@ class Page:
file=str(random.randint(0, 999999))
)
success = True
r = cls._download_song_to_targets(source=sources[0], target=temp_target, desc=song.title)
if not cls._download_song_to_targets(source=sources[0], target=temp_target, desc=song.title):
success = False
if not r.fatal_error:
cls._post_process_targets(song, temp_target)
if not cls._post_process_targets(song, temp_target):
success = False
if success:
return DownloadResult(total=1, fail=0)
return DownloadResult(error_message=f"Error in the downloading of {song.title}.")
return r
@classmethod
def _post_process_targets(cls, song: Song, temp_target: Target):
@ -530,5 +525,5 @@ class Page:
return None
@classmethod
def _download_song_to_targets(cls, source: Source, target: Target, desc: str = None) -> bool:
return False
def _download_song_to_targets(cls, source: Source, target: Target, desc: str = None) -> DownloadResult:
return DownloadResult()

View File

@ -1,17 +1,15 @@
from collections import defaultdict
from dataclasses import dataclass
from enum import Enum
from typing import List, Optional, Type, Union
from urllib.parse import urlparse
import pycountry
import requests
from bs4 import BeautifulSoup
import pycountry
from urllib.parse import urlparse
from enum import Enum
from dataclasses import dataclass
from pathlib import Path
import random
from .abstract import Page
from ..objects import (
DatabaseObject,
Artist,
Source,
SourcePages,
@ -25,13 +23,8 @@ from ..objects import (
AlbumStatus,
Target
)
from ..utils import (
string_processing,
shared
)
from ..utils.shared import (
MUSIFY_LOGGER as LOGGER
)
from ..utils import string_processing, shared
from .support_classes.download_result import DownloadResult
"""
https://musify.club/artist/ghost-bath-280348?_pjax=#bodyContent
@ -86,7 +79,7 @@ class Musify(Page):
SOURCE_TYPE = SourcePages.MUSIFY
LOGGER = LOGGER
LOGGER = shared.MUSIFY_LOGGER
@classmethod
def parse_url(cls, url: str) -> MusifyUrl:
@ -101,7 +94,7 @@ class Musify(Page):
try:
type_enum = MusifyTypes(path[1])
except ValueError as e:
LOGGER.warning(f"{path[1]} is not yet implemented, add it to MusifyTypes")
cls.LOGGER.warning(f"{path[1]} is not yet implemented, add it to MusifyTypes")
raise e
return MusifyUrl(
@ -256,7 +249,7 @@ class Musify(Page):
track_count_soup: BeautifulSoup = small_list[1]
rating_soup: BeautifulSoup = small_list[2]
else:
LOGGER.warning("got an unequal ammount than 3 small elements")
cls.LOGGER.warning("got an unequal ammount than 3 small elements")
return Album(
_id=_id,
@ -329,8 +322,8 @@ class Musify(Page):
source_list.append(Source(cls.SOURCE_TYPE, cls.HOST + href))
else:
LOGGER.warning("there are not enough anchors (2) for artist and track")
LOGGER.warning(str(artist_list))
cls.LOGGER.debug("there are not enough anchors (2) for artist and track")
cls.LOGGER.debug(str(artist_list))
"""
artist_name = playlist_item_soup.get("data-artist")
@ -496,7 +489,7 @@ class Musify(Page):
image_url = thumbnail.get("src")
else:
LOGGER.debug("the card has no thumbnail or url")
cls.LOGGER.debug("the card has no thumbnail or url")
card_body = album_card.find("div", {"class": "card-body"})
if card_body is not None:
@ -524,13 +517,13 @@ class Musify(Page):
# parse small date
card_footer_list = album_card.find_all("div", {"class": "card-footer"})
if len(card_footer_list) != 3:
LOGGER.debug("there are not exactly 3 card footers in a card")
cls.LOGGER.debug("there are not exactly 3 card footers in a card")
if len(card_footer_list) > 0:
for any_small_soup in card_footer_list[-1].find_all("small"):
parse_small_date(any_small_soup)
else:
LOGGER.debug("there is not even 1 footer in the album card")
cls.LOGGER.debug("there is not even 1 footer in the album card")
return Album(
_id=_id,
@ -633,7 +626,7 @@ class Musify(Page):
if len(breadcrumb_list) == 3:
name = breadcrumb_list[-1].get_text(strip=True)
else:
LOGGER.debug("breadcrumb layout on artist page changed")
cls.LOGGER.debug("breadcrumb layout on artist page changed")
nav_tabs: BeautifulSoup = soup.find("ul", {"class": "nav-tabs"})
if nav_tabs is not None:
@ -671,7 +664,7 @@ class Musify(Page):
country_set: set = classes.difference(style_classes)
if len(country_set) != 1:
LOGGER.debug("the country set contains multiple values")
cls.LOGGER.debug("the country set contains multiple values")
if len(country_set) != 0:
"""
This is the css file, where all flags that can be used on musify
@ -963,7 +956,7 @@ class Musify(Page):
return None
@classmethod
def _download_song_to_targets(cls, source: Source, target: Target, desc: str = None) -> bool:
def _download_song_to_targets(cls, source: Source, target: Target, desc: str = None) -> DownloadResult:
"""
https://musify.club/track/im-in-a-coffin-life-never-was-waste-of-skin-16360302
https://musify.club/track/dl/16360302/im-in-a-coffin-life-never-was-waste-of-skin.mp3
@ -971,8 +964,14 @@ class Musify(Page):
url: MusifyUrl = cls.parse_url(source.url)
if url.source_type != MusifyTypes.SONG:
return False
return DownloadResult(error_message=f"The url is not of the type Song: {source.url}")
endpoint = f"https://musify.club/track/dl/{url.musify_id}/{url.name_without_id}.mp3"
return target.stream_into(cls.get_request(endpoint, stream=True), desc=desc)
r = cls.get_request(endpoint, stream=True)
if r is None:
return DownloadResult(error_message=f"couldn't connect to {endpoint}")
if target.stream_into(r, desc=desc):
return DownloadResult(total=1)
return DownloadResult(error_message=f"Streaming to the file went wrong: {endpoint}, {str(target.file_path)}")