diff --git a/src/music_kraken/cli/main_downloader.py b/src/music_kraken/cli/main_downloader.py index 4c3a106..4c5ced2 100644 --- a/src/music_kraken/cli/main_downloader.py +++ b/src/music_kraken/cli/main_downloader.py @@ -8,7 +8,8 @@ from .options.first_config import initial_config from ..utils.config import write_config, main_settings from ..utils.regex import URL_PATTERN from ..utils.string_processing import fit_to_file_system -from ..utils.support_classes import Query, DownloadResult +from ..utils.support_classes.query import Query +from ..utils.support_classes.download_result import DownloadResult from ..utils.exception.download import UrlNotFoundException from ..download.results import Results, Option, PageResults from ..download.page_attributes import Pages diff --git a/src/music_kraken/connection/connection.py b/src/music_kraken/connection/connection.py index 44d54b7..3f294e9 100644 --- a/src/music_kraken/connection/connection.py +++ b/src/music_kraken/connection/connection.py @@ -9,7 +9,7 @@ from tqdm import tqdm from .rotating import RotatingProxy from ..utils.config import main_settings -from ..utils.support_classes import DownloadResult +from ..utils.support_classes.download_result import DownloadResult from ..objects import Target diff --git a/src/music_kraken/download/page_attributes.py b/src/music_kraken/download/page_attributes.py index f7bc619..8409660 100644 --- a/src/music_kraken/download/page_attributes.py +++ b/src/music_kraken/download/page_attributes.py @@ -5,7 +5,8 @@ from ..objects import DatabaseObject, Source from ..utils.config import youtube_settings from ..utils.enums.source import SourcePages -from ..utils.support_classes import Query, DownloadResult +from ..utils.support_classes.download_result import DownloadResult +from ..utils.support_classes.query import Query from ..utils.exception.download import UrlNotFoundException from ..utils.shared import DEBUG_PAGES diff --git a/src/music_kraken/objects/new_collection.py b/src/music_kraken/objects/new_collection.py index 58f672a..785d9d3 100644 --- a/src/music_kraken/objects/new_collection.py +++ b/src/music_kraken/objects/new_collection.py @@ -2,13 +2,13 @@ from typing import List, Iterable, Iterator, Optional, TypeVar, Generic, Dict, T from collections import defaultdict from .parents import DatabaseObject -from ..utils.functions import replace_all_refs +from ..utils.support_classes.hacking import MetaClass T = TypeVar('T', bound=DatabaseObject) -class Collection(Generic[T]): +class Collection(Generic[T], metaclass=MetaClass): _data: List[T] _indexed_values: Dict[str, set] @@ -109,7 +109,7 @@ class Collection(Generic[T]): # now the ugly part # replace all refs of the other element with this one - replace_all_refs(self, equal_collection) + self.merge(equal_collection) def contain_collection_inside(self, sub_collection: "Collection"): diff --git a/src/music_kraken/objects/parents.py b/src/music_kraken/objects/parents.py index 808cff1..f3cd41c 100644 --- a/src/music_kraken/objects/parents.py +++ b/src/music_kraken/objects/parents.py @@ -7,7 +7,7 @@ from .metadata import Metadata from .option import Options from ..utils.shared import HIGHEST_ID from ..utils.config import main_settings, logging_settings -from ..utils.functions import replace_all_refs +from ..utils.support_classes.hacking import MetaClass LOGGER = logging_settings["object_logger"] @@ -43,7 +43,7 @@ class Attribute(Generic[P]): -class DatabaseObject: +class DatabaseObject(metaclass=MetaClass): COLLECTION_STRING_ATTRIBUTES: tuple = tuple() SIMPLE_STRING_ATTRIBUTES: dict = dict() @@ -170,7 +170,7 @@ class DatabaseObject: setattr(self, simple_attribute, getattr(other, simple_attribute)) if replace_all_refs: - replace_all_refs(self, other) + self.merge(other) def strip_details(self): for collection in type(self).DOWNWARDS_COLLECTION_STRING_ATTRIBUTES: diff --git a/src/music_kraken/pages/abstract.py b/src/music_kraken/pages/abstract.py index 16d127c..bffc15c 100644 --- a/src/music_kraken/pages/abstract.py +++ b/src/music_kraken/pages/abstract.py @@ -23,7 +23,8 @@ from ..utils.enums.source import SourcePages from ..utils.enums.album import AlbumType from ..audio import write_metadata_to_target, correct_codec from ..utils.config import main_settings -from ..utils.support_classes import Query, DownloadResult +from ..utils.support_classes.query import Query +from ..utils.support_classes.download_result import DownloadResult from ..utils.string_processing import fit_to_file_system diff --git a/src/music_kraken/pages/bandcamp.py b/src/music_kraken/pages/bandcamp.py index 24eb37b..4cfb706 100644 --- a/src/music_kraken/pages/bandcamp.py +++ b/src/music_kraken/pages/bandcamp.py @@ -21,7 +21,7 @@ from ..objects import ( FormattedText ) from ..connection import Connection -from ..utils.support_classes import DownloadResult +from ..utils.support_classes.download_result import DownloadResult from ..utils.config import main_settings, logging_settings from ..utils.shared import DEBUG if DEBUG: diff --git a/src/music_kraken/pages/encyclopaedia_metallum.py b/src/music_kraken/pages/encyclopaedia_metallum.py index 289434c..d37b013 100644 --- a/src/music_kraken/pages/encyclopaedia_metallum.py +++ b/src/music_kraken/pages/encyclopaedia_metallum.py @@ -9,7 +9,7 @@ from ..utils.config import logging_settings from .abstract import Page from ..utils.enums.source import SourcePages from ..utils.enums.album import AlbumType -from ..utils.support_classes import Query +from ..utils.support_classes.query import Query from ..objects import ( Lyrics, Artist, diff --git a/src/music_kraken/pages/musify.py b/src/music_kraken/pages/musify.py index ddb1a7f..44b61d9 100644 --- a/src/music_kraken/pages/musify.py +++ b/src/music_kraken/pages/musify.py @@ -25,7 +25,8 @@ from ..objects import ( ) from ..utils.config import logging_settings from ..utils import string_processing, shared -from ..utils.support_classes import DownloadResult, Query +from ..utils.support_classes.query import Query +from ..utils.support_classes.download_result import DownloadResult """ https://musify.club/artist/ghost-bath-280348?_pjax=#bodyContent diff --git a/src/music_kraken/pages/preset.py b/src/music_kraken/pages/preset.py index 5e940ba..0755089 100644 --- a/src/music_kraken/pages/preset.py +++ b/src/music_kraken/pages/preset.py @@ -15,7 +15,8 @@ from ..objects import ( Target ) from ..connection import Connection -from ..utils.support_classes import DownloadResult +from ..utils.support_classes.query import Query +from ..utils.support_classes.download_result import DownloadResult class Preset(Page): # CHANGE diff --git a/src/music_kraken/pages/youtube.py b/src/music_kraken/pages/youtube.py index 4c420f0..4ce6633 100644 --- a/src/music_kraken/pages/youtube.py +++ b/src/music_kraken/pages/youtube.py @@ -20,7 +20,7 @@ from ..objects import ( ) from ..connection import Connection from ..utils.string_processing import clean_song_title -from ..utils.support_classes import DownloadResult +from ..utils.support_classes.download_result import DownloadResult from ..utils.config import youtube_settings, main_settings, logging_settings from .youtube_music.super_youtube import SuperYouTube, YouTubeUrl, get_invidious_url, YouTubeUrlType diff --git a/src/music_kraken/pages/youtube_music/super_youtube.py b/src/music_kraken/pages/youtube_music/super_youtube.py index a60d416..676a06e 100644 --- a/src/music_kraken/pages/youtube_music/super_youtube.py +++ b/src/music_kraken/pages/youtube_music/super_youtube.py @@ -19,7 +19,7 @@ from ...objects import ( ID3Timestamp ) from ...connection import Connection -from ...utils.support_classes import DownloadResult +from ...utils.support_classes.download_result import DownloadResult from ...utils.config import youtube_settings, logging_settings, main_settings diff --git a/src/music_kraken/pages/youtube_music/youtube_music.py b/src/music_kraken/pages/youtube_music/youtube_music.py index 851cfc3..7eb139d 100644 --- a/src/music_kraken/pages/youtube_music/youtube_music.py +++ b/src/music_kraken/pages/youtube_music/youtube_music.py @@ -25,7 +25,7 @@ from ...objects import ( Target ) from ...connection import Connection -from ...utils.support_classes import DownloadResult +from ...utils.support_classes.download_result import DownloadResult from ._list_render import parse_renderer from .super_youtube import SuperYouTube diff --git a/src/music_kraken/utils/functions.py b/src/music_kraken/utils/functions.py index 7e1362e..f773213 100644 --- a/src/music_kraken/utils/functions.py +++ b/src/music_kraken/utils/functions.py @@ -1,25 +1,5 @@ import os from datetime import datetime -import guppy -from guppy.heapy import Path - - -hp = guppy.hpy() - -def replace_all_refs(replace_with, replace): - """ - NO - I have a very good reason to use this here - DONT use this anywhere else... - - This replaces **ALL** references to replace with a reference to replace_with. - - https://benkurtovic.com/2015/01/28/python-object-replacement.html - """ - for path in hp.iso(replace).pathsin: - relation = path.path[1] - if isinstance(relation, Path.R_INDEXVAL): - path.src.theone[relation.r] = replace_with def clear_console(): diff --git a/src/music_kraken/utils/support_classes/__init__.py b/src/music_kraken/utils/support_classes/__init__.py index 4a04f30..84edf54 100644 --- a/src/music_kraken/utils/support_classes/__init__.py +++ b/src/music_kraken/utils/support_classes/__init__.py @@ -1,3 +1 @@ -from .download_result import DownloadResult -from .query import Query from .thread_classes import EndThread, FinishedSearch