diff --git a/music_kraken/objects/parents.py b/music_kraken/objects/parents.py index a90576b..7b71269 100644 --- a/music_kraken/objects/parents.py +++ b/music_kraken/objects/parents.py @@ -164,15 +164,7 @@ class OuterProxy: self._add_other_db_objects(key, value) def __hash__(self): - """ - :raise: IsDynamicException - :return: - """ - - if self.dynamic: - return id(self._inner) - - return self.id + return id(self) def __eq__(self, other: Any): return self.__hash__() == other.__hash__() @@ -189,7 +181,6 @@ class OuterProxy: if __other is None: return - object_trace(f"merging {type(self).__name__} [{self.title_string} | {self.id}] with {type(__other).__name__} [{__other.title_string} | {__other.id}] called by [{' | '.join(f'{s.function} {Path(s.filename).name}:{str(s.lineno)}' for s in inspect.stack()[1:4])}]") a = self b = __other @@ -201,7 +192,8 @@ class OuterProxy: if len(b._inner._refers_to_instances) > len(a._inner._refers_to_instances): a, b = b, a - a._inner.__merge__(b._inner, override=override) + object_trace(f"merging {type(a).__name__} [{a.title_string} | {a.id}] with {type(b).__name__} [{b.title_string} | {b.id}] called by [{' | '.join(f'{s.function} {Path(s.filename).name}:{str(s.lineno)}' for s in inspect.stack()[1:5])}]") + for collection, child_collection in b._inner._is_collection_child.items(): try: collection.children.remove(child_collection) @@ -213,13 +205,14 @@ class OuterProxy: collection.parents.remove(parent_collection) except ValueError: pass - + old_inner = b._inner - a._inner._refers_to_instances.update(b._inner._refers_to_instances) - for instance in b._inner._refers_to_instances: + for instance in b._inner._refers_to_instances.copy(): instance._inner = a._inner + a._inner._refers_to_instances.add(instance) + a._inner.__merge__(old_inner, override=override) del old_inner def __merge__(self, __other: Optional[OuterProxy], override: bool = False): diff --git a/music_kraken/objects/source.py b/music_kraken/objects/source.py index 5a8a560..bb2e9e3 100644 --- a/music_kraken/objects/source.py +++ b/music_kraken/objects/source.py @@ -104,14 +104,7 @@ class Source(OuterProxy): ('url', self.url), ('audio_url', self.audio_url), ] - - def __merge__(self, __other: Source, override: bool = False): - if override: - self.audio_url = __other.audio_url - - if self.audio_url is None or (override and __other.audio_url is not None): - self.audio_url = __other.audio_url - + def __str__(self): return self.__repr__()