From f5646276d4c41250c9cfa83a8b6b8db1bd0ba224 Mon Sep 17 00:00:00 2001 From: Hellow2 Date: Mon, 27 Mar 2023 16:28:34 +0200 Subject: [PATCH] layed out better methods for fetching data --- src/music_kraken/pages/abstract.py | 40 ++++++++++++++++++++++-------- src/music_kraken/pages/musify.py | 6 ++--- 2 files changed, 33 insertions(+), 13 deletions(-) diff --git a/src/music_kraken/pages/abstract.py b/src/music_kraken/pages/abstract.py index 9ca0afa..4a743ad 100644 --- a/src/music_kraken/pages/abstract.py +++ b/src/music_kraken/pages/abstract.py @@ -1,4 +1,5 @@ from typing import Optional, Union, Type, Dict +from bs4 import BeautifulSoup import requests import logging @@ -70,6 +71,10 @@ class Page: return cls.post_request(url, accepted_response_codes, trie + 1) + @classmethod + def get_soup_from_response(cls, r: requests.Response) -> BeautifulSoup: + return BeautifulSoup(r.content, "html.parser") + class Query: def __init__(self, query: str): self.query = query @@ -178,16 +183,16 @@ class Page: @classmethod def _fetch_object_from_source(cls, source: Source, obj_type: Union[Type[Song], Type[Album], Type[Artist], Type[Label]], stop_at_level: int = 1): if obj_type == Artist: - return cls.fetch_artist_from_source(source=source, stop_at_level=stop_at_level) + return cls._fetch_artist_from_source(source=source, stop_at_level=stop_at_level) if obj_type == Song: - return cls.fetch_song_from_source(source=source, stop_at_level=stop_at_level) + return cls._fetch_song_from_source(source=source, stop_at_level=stop_at_level) if obj_type == Album: - return cls.fetch_album_from_source(source=source, stop_at_level=stop_at_level) + return cls._fetch_album_from_source(source=source, stop_at_level=stop_at_level) if obj_type == Label: - return cls.fetch_label_from_source(source=source, stop_at_level=stop_at_level) + return cls._fetch_label_from_source(source=source, stop_at_level=stop_at_level) @classmethod def _clean_music_object(cls, music_object: Union[Label, Album, Artist, Song], collections: Dict[Union[Type[Song], Type[Album], Type[Artist], Type[Label]], Collection]): @@ -238,18 +243,33 @@ class Page: cls._clean_collection(song.main_artist_collection, collections) @classmethod - def fetch_song_from_source(cls, source: Source, stop_at_level: int = 1) -> Song: + def _parse_song(cls, song_soup: BeautifulSoup) -> Song: return Song() @classmethod - def fetch_album_from_source(cls, source: Source, stop_at_level: int = 1) -> Album: - return Album() - + def _fetch_song_from_source(cls, source: Source, stop_at_level: int = 1) -> Song: + return Song() @classmethod - def fetch_artist_from_source(cls, source: Source, stop_at_level: int = 1) -> Artist: + def _parse_artist(cls, album_soup: BeautifulSoup) -> Album: + return Album() + + @classmethod + def _fetch_album_from_source(cls, source: Source, stop_at_level: int = 1) -> Album: + return Album() + + @classmethod + def _parse_artist(cls, artist_soup: BeautifulSoup) -> Artist: return Artist() @classmethod - def fetch_label_from_source(cls, source: Source, stop_at_level: int = 1) -> Label: + def _fetch_artist_from_source(cls, source: Source, stop_at_level: int = 1) -> Artist: + return Artist() + + @classmethod + def _parse_label(cls, label_soup: BeautifulSoup) -> Label: + return Label() + + @classmethod + def _fetch_label_from_source(cls, source: Source, stop_at_level: int = 1) -> Label: return Label() diff --git a/src/music_kraken/pages/musify.py b/src/music_kraken/pages/musify.py index f73926d..066ebac 100644 --- a/src/music_kraken/pages/musify.py +++ b/src/music_kraken/pages/musify.py @@ -572,7 +572,7 @@ class Musify(Page): album_source: Source if stop_at_level > 1: for album_source in new_album.source_collection.get_sources_from_page(cls.SOURCE_TYPE): - new_album.merge(cls.fetch_album_from_source(album_source, stop_at_level=stop_at_level-1)) + new_album.merge(cls._fetch_album_from_source(album_source, stop_at_level=stop_at_level-1)) discography.append(new_album) @@ -709,7 +709,7 @@ class Musify(Page): ) @classmethod - def fetch_artist_from_source(cls, source: Source, stop_at_level: int = 1) -> Artist: + def _fetch_artist_from_source(cls, source: Source, stop_at_level: int = 1) -> Artist: """ fetches artist from source @@ -851,7 +851,7 @@ class Musify(Page): ) @classmethod - def fetch_album_from_source(cls, source: Source, stop_at_level: int = 1) -> Album: + def _fetch_album_from_source(cls, source: Source, stop_at_level: int = 1) -> Album: """ fetches album from source: eg. 'https://musify.club/release/linkin-park-hybrid-theory-2000-188'