draft: the problem is in _list_renderer.py
	
		
			
	
		
	
	
		
	
		
			All checks were successful
		
		
	
	
		
			
				
	
				ci/woodpecker/push/woodpecker Pipeline was successful
				
			
		
		
	
	
				
					
				
			
		
			All checks were successful
		
		
	
	ci/woodpecker/push/woodpecker Pipeline was successful
				
			This commit is contained in:
		@@ -1,7 +1,7 @@
 | 
			
		||||
from __future__ import annotations
 | 
			
		||||
 | 
			
		||||
from collections import defaultdict
 | 
			
		||||
from typing import TypeVar, Generic, Dict, Optional, Iterable, List, Iterator, Tuple, Generator, Union, Any
 | 
			
		||||
from typing import TypeVar, Generic, Dict, Optional, Iterable, List, Iterator, Tuple, Generator, Union, Any, Set
 | 
			
		||||
from .parents import OuterProxy
 | 
			
		||||
from ..utils import object_trace
 | 
			
		||||
 | 
			
		||||
@@ -117,14 +117,26 @@ class Collection(Generic[T]):
 | 
			
		||||
                if a is b:
 | 
			
		||||
                    continue
 | 
			
		||||
 | 
			
		||||
                object_trace(f"Syncing [{a}] = [{b}]")
 | 
			
		||||
                no_sync_collection: Set[Collection] = kwargs.get("no_sync_collection", set())
 | 
			
		||||
                object_trace(f"Syncing [{a}] = [{b}]; {no_sync_collection}")
 | 
			
		||||
                if id(b) in no_sync_collection:
 | 
			
		||||
                    continue
 | 
			
		||||
 | 
			
		||||
                for synced_with, key in b._collection_for.items():
 | 
			
		||||
 | 
			
		||||
                b_data = b.data.copy()
 | 
			
		||||
                b_collection_for = b._collection_for.copy()
 | 
			
		||||
                no_sync_collection.add(id(b))
 | 
			
		||||
                kwargs["no_sync_collection"] = no_sync_collection
 | 
			
		||||
                del b
 | 
			
		||||
 | 
			
		||||
                for synced_with, key in b_collection_for.items():
 | 
			
		||||
                    synced_with.__setattr__(key, a)
 | 
			
		||||
                a._collection_for.update(b._collection_for)
 | 
			
		||||
                    a._collection_for[synced_with] = key
 | 
			
		||||
 | 
			
		||||
                a.extend(b.data, **kwargs)
 | 
			
		||||
                    print(synced_with, key)
 | 
			
		||||
 | 
			
		||||
                a.extend(b_data, **kwargs)
 | 
			
		||||
            
 | 
			
		||||
        else:
 | 
			
		||||
            # merge only if the two objects are not the same
 | 
			
		||||
            if existing_object.id == __object.id:
 | 
			
		||||
 
 | 
			
		||||
@@ -45,6 +45,7 @@ class InnerData:
 | 
			
		||||
        for key, value in kwargs.items():
 | 
			
		||||
            if hasattr(value, "__is_collection__"):
 | 
			
		||||
                value._collection_for[self] = key
 | 
			
		||||
                
 | 
			
		||||
            self.__setattr__(key, value)
 | 
			
		||||
 | 
			
		||||
    def __hash__(self):
 | 
			
		||||
 
 | 
			
		||||
@@ -89,52 +89,6 @@ class NamingDict(dict):
 | 
			
		||||
            return self.default_value_for_name(attribute_name)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def _clean_music_object(music_object: INDEPENDENT_DB_OBJECTS, collections: Dict[INDEPENDENT_DB_TYPES, Collection]):
 | 
			
		||||
    if type(music_object) == Label:
 | 
			
		||||
        return _clean_label(label=music_object, collections=collections)
 | 
			
		||||
    if type(music_object) == Artist:
 | 
			
		||||
        return _clean_artist(artist=music_object, collections=collections)
 | 
			
		||||
    if type(music_object) == Album:
 | 
			
		||||
        return _clean_album(album=music_object, collections=collections)
 | 
			
		||||
    if type(music_object) == Song:
 | 
			
		||||
        return _clean_song(song=music_object, collections=collections)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def _clean_collection(collection: Collection, collection_dict: Dict[INDEPENDENT_DB_TYPES, Collection]):
 | 
			
		||||
    if collection.element_type not in collection_dict:
 | 
			
		||||
        return
 | 
			
		||||
 | 
			
		||||
    for i, element in enumerate(collection):
 | 
			
		||||
        r = collection_dict[collection.element_type].append(element, merge_into_existing=True)
 | 
			
		||||
        collection[i] = r.current_element
 | 
			
		||||
 | 
			
		||||
        if not r.was_the_same:
 | 
			
		||||
            _clean_music_object(r.current_element, collection_dict)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def _clean_label(label: Label, collections: Dict[INDEPENDENT_DB_TYPES, Collection]):
 | 
			
		||||
    _clean_collection(label.current_artist_collection, collections)
 | 
			
		||||
    _clean_collection(label.album_collection, collections)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def _clean_artist(artist: Artist, collections: Dict[INDEPENDENT_DB_TYPES, Collection]):
 | 
			
		||||
    _clean_collection(artist.main_album_collection, collections)
 | 
			
		||||
    _clean_collection(artist.feature_song_collection, collections)
 | 
			
		||||
    _clean_collection(artist.label_collection, collections)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def _clean_album(album: Album, collections: Dict[INDEPENDENT_DB_TYPES, Collection]):
 | 
			
		||||
    _clean_collection(album.label_collection, collections)
 | 
			
		||||
    _clean_collection(album.song_collection, collections)
 | 
			
		||||
    _clean_collection(album.artist_collection, collections)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def _clean_song(song: Song, collections: Dict[INDEPENDENT_DB_TYPES, Collection]):
 | 
			
		||||
    _clean_collection(song.album_collection, collections)
 | 
			
		||||
    _clean_collection(song.feature_artist_collection, collections)
 | 
			
		||||
    _clean_collection(song.main_artist_collection, collections)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Page:
 | 
			
		||||
    """
 | 
			
		||||
    This is an abstract class, laying out the 
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user