diff --git a/src/music_kraken/__init__.py b/src/music_kraken/__init__.py index 3e6d260..f4debe2 100644 --- a/src/music_kraken/__init__.py +++ b/src/music_kraken/__init__.py @@ -13,8 +13,6 @@ from .utils.shared import MUSIC_DIR, MODIFY_GC, NOT_A_GENRE_REGEX, get_random_me from .utils.string_processing import fit_to_file_system -import sys; sys.setrecursionlimit(100) - if MODIFY_GC: """ At the start I modify the garbage collector to run a bit fewer times. diff --git a/src/music_kraken/objects/__init__.py b/src/music_kraken/objects/__init__.py index 2018550..f458303 100644 --- a/src/music_kraken/objects/__init__.py +++ b/src/music_kraken/objects/__init__.py @@ -1,32 +1,18 @@ -from ..utils.enums import album from .option import Options -from . import ( - song, - metadata, - source, - parents, - formatted_text, - option, - collection +from .parents import DatabaseObject + +from .metadata import Metadata, Mapping as ID3Mapping, ID3Timestamp + +from .source import Source, SourcePages, SourceTypes + +from .song import ( + Song, + Album, + Artist, + Target, + Lyrics, + Label ) -DatabaseObject = parents.DatabaseObject - -Metadata = metadata.Metadata -ID3Mapping = metadata.Mapping -ID3Timestamp = metadata.ID3Timestamp - -Source = source.Source - -Song = song.Song -Artist = song.Artist -Source = source.Source -Target = song.Target -Lyrics = song.Lyrics -Label = song.Label - -Album = song.Album - -FormattedText = formatted_text.FormattedText - -Collection = collection.Collection +from .formatted_text import FormattedText +from .collection import Collection diff --git a/src/music_kraken/objects/parents.py b/src/music_kraken/objects/parents.py index bf0ad54..f692dea 100644 --- a/src/music_kraken/objects/parents.py +++ b/src/music_kraken/objects/parents.py @@ -65,6 +65,9 @@ class DatabaseObject: return list() def merge(self, other, override: bool = False): + if other is None: + return + if self is other: return diff --git a/src/music_kraken/pages/abstract.py b/src/music_kraken/pages/abstract.py index ef7fab0..d5cd8fa 100644 --- a/src/music_kraken/pages/abstract.py +++ b/src/music_kraken/pages/abstract.py @@ -117,7 +117,7 @@ class Page(threading.Thread): def run(self) -> None: pass - def get_source_type(self, source: Source) -> Optional[INDEPENDENT_DB_TYPES]: + def get_source_type(self, source: Source) -> Optional[Type[DatabaseObject]]: return None def get_soup_from_response(self, r: requests.Response) -> BeautifulSoup: @@ -186,7 +186,13 @@ class Page(threading.Thread): source: Source for source in music_object.source_collection.get_sources_from_page(self.SOURCE_TYPE): new_music_object.merge( - self.fetch_object_from_source(source=source, enforce_type=type(music_object), stop_at_level=stop_at_level, post_process=False)) + self.fetch_object_from_source( + source=source, + enforce_type=type(music_object), + stop_at_level=stop_at_level, + post_process=False + ) + ) return merge_together(music_object, new_music_object) diff --git a/src/music_kraken/pages/preset.py b/src/music_kraken/pages/preset.py index 333b265..b2af7fd 100644 --- a/src/music_kraken/pages/preset.py +++ b/src/music_kraken/pages/preset.py @@ -1,13 +1,9 @@ -from collections import defaultdict -from dataclasses import dataclass -from enum import Enum -from typing import List, Optional, Type, Union +from typing import List, Optional, Type from urllib.parse import urlparse +import logging -import pycountry -import requests -from bs4 import BeautifulSoup +from music_kraken.objects import Source, DatabaseObject from .abstract import Page from ..objects import ( Artist, @@ -15,61 +11,49 @@ from ..objects import ( SourcePages, Song, Album, - ID3Timestamp, - FormattedText, Label, - Options, - AlbumType, - AlbumStatus, - Target ) -from ..utils import string_processing, shared -from .support_classes.download_result import DownloadResult +from ..connection import Connection +class Preset(Page): + # CHANGE + SOURCE_TYPE = SourcePages.PRESET + LOGGER = logging.getLogger("preset") -class YouTube(Page): - API_SESSION: requests.Session = requests.Session() - API_SESSION.headers = { - "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:106.0) Gecko/20100101 Firefox/106.0", - "Connection": "keep-alive", - "Referer": "https://www.youtube.com/" - } - API_SESSION.proxies = shared.proxies - TIMEOUT = 7 - POST_TIMEOUT = 15 - TRIES = 5 - HOST = "https://www.youtube.com" + def __init__(self): + self.connection: Connection = Connection( + host="https://www.preset.cum/", + logger=self.LOGGER + ) + + super().__init__() - SOURCE_TYPE = SourcePages.YOUTUBE + def get_source_type(self, source: Source) -> Optional[Type[DatabaseObject]]: + return super().get_source_type(source) + + def general_search(self, search_query: str) -> List[DatabaseObject]: + return [] + + def label_search(self, label: Label) -> List[Label]: + return [] + + def artist_search(self, artist: Artist) -> List[Artist]: + return [] + + def album_search(self, album: Album) -> List[Album]: + return [] + + def song_search(self, song: Song) -> List[Song]: + return [] + + def fetch_song(self, source: Source, stop_at_level: int = 1) -> Song: + return Song() - LOGGER = shared.YOUTUBE_LOGGER + def fetch_album(self, source: Source, stop_at_level: int = 1) -> Album: + return Album() + def fetch_artist(self, source: Source, stop_at_level: int = 1) -> Artist: + return Artist() - @classmethod - def _raw_search(cls, query: str) -> Options: - return Options() - - @classmethod - def plaintext_search(cls, query: str) -> Options: - search_results = [] - - return Options(search_results) - - @classmethod - def _fetch_artist_from_source(cls, source: Source, stop_at_level: int = 1) -> Artist: - artist: Artist = Artist(source_list=[source]) - - return artist - - @classmethod - def _fetch_album_from_source(cls, source: Source, stop_at_level: int = 1) -> Album: - album: Album = Album(source_list=[source]) - return album - - @classmethod - def _get_type_of_url(cls, url: str) -> Optional[Union[Type[Song], Type[Album], Type[Artist], Type[Label]]]: - return None - - @classmethod - def _download_song_to_targets(cls, source: Source, target: Target, desc: str = None) -> DownloadResult: - return DownloadResult() + def fetch_label(self, source: Source, stop_at_level: int = 1) -> Label: + return Label() diff --git a/src/music_kraken/utils/enums/source.py b/src/music_kraken/utils/enums/source.py index b324f8d..964de00 100644 --- a/src/music_kraken/utils/enums/source.py +++ b/src/music_kraken/utils/enums/source.py @@ -26,6 +26,8 @@ class SourcePages(Enum): MYSPACE = "myspace" # Yes somehow this ancient site is linked EVERYWHERE MANUAL = "manual" + + PRESET = "preset" @classmethod def get_homepage(cls, attribute) -> str: