From 312e26ec44f7008f60ea7639285cad56f9698e8a Mon Sep 17 00:00:00 2001 From: Hellow <74311245+HeIIow2@users.noreply.github.com> Date: Tue, 30 Apr 2024 08:11:10 +0200 Subject: [PATCH] feat: implemented push to --- music_kraken/objects/collection.py | 15 ++++++++++----- music_kraken/objects/song.py | 2 ++ 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/music_kraken/objects/collection.py b/music_kraken/objects/collection.py index 4bba8bb..7090aff 100644 --- a/music_kraken/objects/collection.py +++ b/music_kraken/objects/collection.py @@ -36,6 +36,8 @@ class Collection(Generic[T]): self.append_object_to_attribute: Dict[str, T] = append_object_to_attribute or {} self.extend_object_to_attribute: Dict[str, Collection[T]] = extend_object_to_attribute or {} self.sync_on_append: Dict[str, Collection] = sync_on_append or {} + self.pull_from: List[Collection] = [] + self.push_to: List[Collection] = [] self._id_to_index_values: Dict[int, set] = defaultdict(set) @@ -79,11 +81,16 @@ class Collection(Generic[T]): self._map_element(e) def _find_object(self, __object: T) -> Optional[T]: + for c in self.push_to: + found = c._find_object(__object) + if found is not None: + return found, c + self._remap() for name, value in __object.indexing_values: if value in self._indexed_values[name]: - return self._indexed_values[name][value] + return self._indexed_values[name][value], self def append(self, __object: Optional[T], **kwargs): """ @@ -98,7 +105,7 @@ class Collection(Generic[T]): if __object is None: return - existing_object = self._find_object(__object) + existing_object, map_to = self._find_object(__object) if existing_object is None: # append @@ -133,8 +140,6 @@ class Collection(Generic[T]): synced_with.__setattr__(key, a) a._collection_for[synced_with] = key - print(synced_with, key) - a.extend(b_data, **kwargs) else: @@ -143,7 +148,7 @@ class Collection(Generic[T]): return existing_object.merge(__object, **kwargs) - self._map_element(existing_object) + map_to._map_element(existing_object) def contains(self, __object: T) -> bool: return self._find_object(__object) is not None diff --git a/music_kraken/objects/song.py b/music_kraken/objects/song.py index 8ccbc23..687fc1a 100644 --- a/music_kraken/objects/song.py +++ b/music_kraken/objects/song.py @@ -143,6 +143,8 @@ class Song(Base): "feature_song_collection": self } + self.feature_artist_collection.push_to = [self.main_artist_collection] + def _add_other_db_objects(self, object_type: Type[OuterProxy], object_list: List[OuterProxy]): if object_type is Song: return