implemented the building/compiling of recursive structures
This commit is contained in:
parent
18bf066f77
commit
63a3dc00fd
@ -1,12 +1,15 @@
|
|||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
from typing import Optional, Dict, Type, Tuple, List
|
from typing import Optional, Dict, Type, Tuple, List, TYPE_CHECKING
|
||||||
import uuid
|
import uuid
|
||||||
|
import random
|
||||||
|
|
||||||
from ..utils.shared import (
|
from ..utils.shared import (
|
||||||
SONG_LOGGER as LOGGER
|
SONG_LOGGER as LOGGER
|
||||||
)
|
)
|
||||||
from .metadata import Metadata
|
from .metadata import Metadata
|
||||||
from .option import Options
|
from .option import Options
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from .collection import Collection
|
||||||
|
|
||||||
|
|
||||||
class DatabaseObject:
|
class DatabaseObject:
|
||||||
@ -30,6 +33,8 @@ class DatabaseObject:
|
|||||||
|
|
||||||
self.dynamic = dynamic
|
self.dynamic = dynamic
|
||||||
|
|
||||||
|
self.build_version = -1
|
||||||
|
|
||||||
def __eq__(self, other) -> bool:
|
def __eq__(self, other) -> bool:
|
||||||
if not isinstance(other, type(self)):
|
if not isinstance(other, type(self)):
|
||||||
return False
|
return False
|
||||||
@ -60,6 +65,9 @@ class DatabaseObject:
|
|||||||
return list()
|
return list()
|
||||||
|
|
||||||
def merge(self, other, override: bool = False):
|
def merge(self, other, override: bool = False):
|
||||||
|
if self is other:
|
||||||
|
return
|
||||||
|
|
||||||
if not isinstance(other, type(self)):
|
if not isinstance(other, type(self)):
|
||||||
LOGGER.warning(f"can't merge \"{type(other)}\" into \"{type(self)}\"")
|
LOGGER.warning(f"can't merge \"{type(other)}\" into \"{type(self)}\"")
|
||||||
return
|
return
|
||||||
@ -86,10 +94,10 @@ class DatabaseObject:
|
|||||||
def option_string(self) -> str:
|
def option_string(self) -> str:
|
||||||
return self.__repr__()
|
return self.__repr__()
|
||||||
|
|
||||||
def build_recursive_structures(self) -> bool:
|
def _build_recursive_structures(self, build_version: int, merge: False):
|
||||||
return False
|
pass
|
||||||
|
|
||||||
def compile(self) -> bool:
|
def compile(self, merge_into: bool = False):
|
||||||
"""
|
"""
|
||||||
compiles the recursive structures,
|
compiles the recursive structures,
|
||||||
and does depending on the object some other stuff.
|
and does depending on the object some other stuff.
|
||||||
@ -98,7 +106,7 @@ class DatabaseObject:
|
|||||||
override self.build_recursive_structures() instead
|
override self.build_recursive_structures() instead
|
||||||
"""
|
"""
|
||||||
|
|
||||||
self.build_recursive_structures()
|
self._build_recursive_structures(build_version=random.randint(0, 99999), merge=merge_into)
|
||||||
|
|
||||||
|
|
||||||
class MainObject(DatabaseObject):
|
class MainObject(DatabaseObject):
|
||||||
|
@ -96,21 +96,25 @@ class Song(MainObject):
|
|||||||
self.main_artist_collection = Collection(data=main_artist_list, element_type=Artist)
|
self.main_artist_collection = Collection(data=main_artist_list, element_type=Artist)
|
||||||
self.feature_artist_collection = Collection(data=feature_artist_list, element_type=Artist)
|
self.feature_artist_collection = Collection(data=feature_artist_list, element_type=Artist)
|
||||||
|
|
||||||
def compile(self):
|
def _build_recursive_structures(self, build_version: int, merge: bool):
|
||||||
|
if build_version == self.build_version:
|
||||||
|
return
|
||||||
|
self.build_version = build_version
|
||||||
|
|
||||||
album: Album
|
album: Album
|
||||||
for album in self.album_collection:
|
for album in self.album_collection:
|
||||||
if album.song_collection.append(self, merge_into_existing=False):
|
album.song_collection.append(self, merge_on_conflict=merge, merge_into_existing=False)
|
||||||
album.compile()
|
album._build_recursive_structures(build_version=build_version, merge=merge)
|
||||||
|
|
||||||
artist: Artist
|
artist: Artist
|
||||||
for artist in self.feature_artist_collection:
|
for artist in self.feature_artist_collection:
|
||||||
if artist.feature_song_collection.append(self, merge_into_existing=False):
|
artist.feature_song_collection.append(self, merge_on_conflict=merge, merge_into_existing=False)
|
||||||
artist.compile()
|
artist._build_recursive_structures(build_version=build_version, merge=merge)
|
||||||
|
|
||||||
for artist in self.main_artist_collection:
|
for artist in self.main_artist_collection:
|
||||||
for album in self.album_collection:
|
for album in self.album_collection:
|
||||||
if artist.main_album_collection.append(album, merge_into_existing=False):
|
artist.main_album_collection.append(self, merge_on_conflict=merge, merge_into_existing=False)
|
||||||
artist.compile()
|
artist._build_recursive_structures(build_version=build_version, merge=merge)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def indexing_values(self) -> List[Tuple[str, object]]:
|
def indexing_values(self) -> List[Tuple[str, object]]:
|
||||||
@ -260,21 +264,25 @@ class Album(MainObject):
|
|||||||
self.artist_collection: Collection = Collection(data=artist_list, element_type=Artist)
|
self.artist_collection: Collection = Collection(data=artist_list, element_type=Artist)
|
||||||
self.label_collection: Collection = Collection(data=label_list, element_type=Label)
|
self.label_collection: Collection = Collection(data=label_list, element_type=Label)
|
||||||
|
|
||||||
def compile(self):
|
def _build_recursive_structures(self, build_version: int, merge: bool):
|
||||||
|
if build_version == self.build_version:
|
||||||
|
return
|
||||||
|
self.build_version = build_version
|
||||||
|
|
||||||
song: Song
|
song: Song
|
||||||
for song in self.song_collection:
|
for song in self.song_collection:
|
||||||
if song.album_collection.append(self, merge_into_existing=False):
|
song.album_collection.append(self, merge_on_conflict=merge, merge_into_existing=False)
|
||||||
song.compile()
|
song._build_recursive_structures(build_version=build_version, merge=merge)
|
||||||
|
|
||||||
artist: Artist
|
artist: Artist
|
||||||
for artist in self.artist_collection:
|
for artist in self.artist_collection:
|
||||||
if artist.main_album_collection.append(self, merge_into_existing=False):
|
artist.main_album_collection.append(self, merge_on_conflict=merge, merge_into_existing=False)
|
||||||
artist.compile()
|
artist._build_recursive_structures(build_version=build_version, merge=merge)
|
||||||
|
|
||||||
label: Label
|
label: Label
|
||||||
for label in self.label_collection:
|
for label in self.label_collection:
|
||||||
if label.album_collection.append(self, merge_into_existing=False):
|
label.album_collection.append(self, merge_on_conflict=merge, merge_into_existing=False)
|
||||||
label.compile()
|
label._build_recursive_structures(build_version=build_version, merge=merge)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def indexing_values(self) -> List[Tuple[str, object]]:
|
def indexing_values(self) -> List[Tuple[str, object]]:
|
||||||
@ -436,21 +444,25 @@ class Artist(MainObject):
|
|||||||
self.main_album_collection: Collection = Collection(data=main_album_list, element_type=Album)
|
self.main_album_collection: Collection = Collection(data=main_album_list, element_type=Album)
|
||||||
self.label_collection: Collection = Collection(data=label_list, element_type=Label)
|
self.label_collection: Collection = Collection(data=label_list, element_type=Label)
|
||||||
|
|
||||||
def compile(self):
|
def _build_recursive_structures(self, build_version: int, merge: False):
|
||||||
song: "Song"
|
if build_version == self.build_version:
|
||||||
for song in self.feature_song_collection:
|
return
|
||||||
if song.feature_artist_collection.append(self, merge_into_existing=False):
|
self.build_version = build_version
|
||||||
song.compile()
|
|
||||||
|
|
||||||
album: "Album"
|
song: Song
|
||||||
|
for song in self.feature_song_collection:
|
||||||
|
song.feature_artist_collection.append(self, merge_on_conflict=merge, merge_into_existing=False)
|
||||||
|
song._build_recursive_structures(build_version=build_version, merge=merge)
|
||||||
|
|
||||||
|
album: Album
|
||||||
for album in self.main_album_collection:
|
for album in self.main_album_collection:
|
||||||
if album.artist_collection.append(self, merge_into_existing=False):
|
album.artist_collection.append(self, merge_on_conflict=merge, merge_into_existing=False)
|
||||||
album.compile()
|
album._build_recursive_structures(build_version=build_version, merge=merge)
|
||||||
|
|
||||||
label: Label
|
label: Label
|
||||||
for label in self.label_collection:
|
for label in self.label_collection:
|
||||||
if label.current_artist_collection.append(self, merge_into_existing=False):
|
label.current_artist_collection.append(self, merge_on_conflict=merge, merge_into_existing=False)
|
||||||
label.compile()
|
label._build_recursive_structures(build_version=build_version, merge=merge)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def indexing_values(self) -> List[Tuple[str, object]]:
|
def indexing_values(self) -> List[Tuple[str, object]]:
|
||||||
@ -580,16 +592,20 @@ class Label(MainObject):
|
|||||||
self.album_collection: Collection = Collection(data=album_list, element_type=Album)
|
self.album_collection: Collection = Collection(data=album_list, element_type=Album)
|
||||||
self.current_artist_collection: Collection = Collection(data=current_artist_list, element_type=Artist)
|
self.current_artist_collection: Collection = Collection(data=current_artist_list, element_type=Artist)
|
||||||
|
|
||||||
def compile(self) -> bool:
|
def _build_recursive_structures(self, build_version: int, merge: False):
|
||||||
|
if build_version == self.build_version:
|
||||||
|
return
|
||||||
|
self.build_version = build_version
|
||||||
|
|
||||||
album: Album
|
album: Album
|
||||||
for album in self.album_collection:
|
for album in self.album_collection:
|
||||||
if album.label_collection.append(self, merge_into_existing=False):
|
album.label_collection.append(self, merge_on_conflict=merge, merge_into_existing=False)
|
||||||
album.compile()
|
album._build_recursive_structures(build_version=build_version, merge=merge)
|
||||||
|
|
||||||
artist: Artist
|
artist: Artist
|
||||||
for artist in self.current_artist_collection:
|
for artist in self.current_artist_collection:
|
||||||
if artist.label_collection.append(self, merge_into_existing=False):
|
artist.label_collection.append(self, merge_on_conflict=merge, merge_into_existing=False)
|
||||||
artist.compile()
|
artist._build_recursive_structures(build_version=build_version, merge=merge)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def indexing_values(self) -> List[Tuple[str, object]]:
|
def indexing_values(self) -> List[Tuple[str, object]]:
|
||||||
|
@ -180,7 +180,8 @@ class Page:
|
|||||||
cls._clean_music_object(new_music_object, collections)
|
cls._clean_music_object(new_music_object, collections)
|
||||||
|
|
||||||
music_object.merge(new_music_object)
|
music_object.merge(new_music_object)
|
||||||
# music_object.compile()
|
|
||||||
|
music_object.compile(merge_into=True)
|
||||||
|
|
||||||
return music_object
|
return music_object
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user