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 __future__ import annotations
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import defaultdict
 | 
					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 .parents import OuterProxy
 | 
				
			||||||
from ..utils import object_trace
 | 
					from ..utils import object_trace
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -117,14 +117,26 @@ class Collection(Generic[T]):
 | 
				
			|||||||
                if a is b:
 | 
					                if a is b:
 | 
				
			||||||
                    continue
 | 
					                    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)
 | 
					                    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:
 | 
					        else:
 | 
				
			||||||
            # merge only if the two objects are not the same
 | 
					            # merge only if the two objects are not the same
 | 
				
			||||||
            if existing_object.id == __object.id:
 | 
					            if existing_object.id == __object.id:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -45,6 +45,7 @@ class InnerData:
 | 
				
			|||||||
        for key, value in kwargs.items():
 | 
					        for key, value in kwargs.items():
 | 
				
			||||||
            if hasattr(value, "__is_collection__"):
 | 
					            if hasattr(value, "__is_collection__"):
 | 
				
			||||||
                value._collection_for[self] = key
 | 
					                value._collection_for[self] = key
 | 
				
			||||||
 | 
					                
 | 
				
			||||||
            self.__setattr__(key, value)
 | 
					            self.__setattr__(key, value)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def __hash__(self):
 | 
					    def __hash__(self):
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -89,52 +89,6 @@ class NamingDict(dict):
 | 
				
			|||||||
            return self.default_value_for_name(attribute_name)
 | 
					            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:
 | 
					class Page:
 | 
				
			||||||
    """
 | 
					    """
 | 
				
			||||||
    This is an abstract class, laying out the 
 | 
					    This is an abstract class, laying out the 
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user