This commit is contained in:
Petitminion 2025-03-18 18:15:19 +01:00
parent 85206166c5
commit 3df80b30f4
3 changed files with 40 additions and 28 deletions

View File

@ -47,7 +47,7 @@ def create_data(super_user_name=None):
library = federation_factories.MusicLibraryFactory( library = federation_factories.MusicLibraryFactory(
actor=(super_user.actor if super_user else federation_factories.ActorFactory()), actor=(super_user.actor if super_user else federation_factories.ActorFactory()),
local=True, local=True if super_user else False,
) )
uploads = music_factories.UploadFactory.create_batch( uploads = music_factories.UploadFactory.create_batch(
size=random.randint(3, 18), size=random.randint(3, 18),
@ -113,7 +113,7 @@ def create_data(super_user_name=None):
# my artist channel # my artist channel
my_artist_library = federation_factories.MusicLibraryFactory( my_artist_library = federation_factories.MusicLibraryFactory(
actor=(super_user.actor if super_user else federation_factories.ActorFactory()), actor=(super_user.actor if super_user else federation_factories.ActorFactory()),
local=True, local=True if super_user else False,
) )
my_artist_channel = audio_factories.ChannelFactory( my_artist_channel = audio_factories.ChannelFactory(
library=my_artist_library, library=my_artist_library,

View File

@ -99,6 +99,7 @@ def migrate_libraries_to_playlist(apps, schema_editor):
to_public_libs.append(library) to_public_libs.append(library)
library.privacy_level = "me" library.privacy_level = "me"
library.playlist = playlist
library.save() library.save()
except Exception as e: except Exception as e:
print(f"An error occurred during library.playlist creation : {e}") print(f"An error occurred during library.playlist creation : {e}")
@ -161,8 +162,7 @@ def check_succefull_migration(apps, schema_editor):
elif actor.playlists.filter(library__isnull=True).count() > 0: elif actor.playlists.filter(library__isnull=True).count() > 0:
raise Exception( raise Exception(
f"Incoherent playlist database state : all playlists do not have lib or too many libs\ f"Incoherent playlist database state : all local playlists do not have lib or too many libs"
actor.playlists.filter(library__isnull=True).count() = {actor.playlists.filter(library__isnull=True).count()} "
) )
elif actor.libraries.count() - 3 != not_build_in_libs or ( elif actor.libraries.count() - 3 != not_build_in_libs or (
hasattr(actor, "channel") and actor.libraries.count() > 1 hasattr(actor, "channel") and actor.libraries.count() > 1
@ -171,7 +171,7 @@ def check_succefull_migration(apps, schema_editor):
f"Incoherent library database state, check for errors in log and share them to the funkwhale team. Migration was abordted to prevent data loss.\ f"Incoherent library database state, check for errors in log and share them to the funkwhale team. Migration was abordted to prevent data loss.\
actor libs = {actor.libraries.count()} and acto not built-in lib = {not_build_in_libs} \ actor libs = {actor.libraries.count()} and acto not built-in lib = {not_build_in_libs} \
and acto pl ={actor.playlists.count()} and not channel lib = {actor.libraries.filter(channel__isnull=False).count()} \ and acto pl ={actor.playlists.count()} and not channel lib = {actor.libraries.filter(channel__isnull=False).count()} \
and {actor.name} actor_playlist_lib {actor_playlist_lib}" and actor.nae = {actor.name}"
) )
for playlist in Playlist.objects.all(): for playlist in Playlist.objects.all():
if not federation_utils.is_local(playlist.fid): if not federation_utils.is_local(playlist.fid):

View File

@ -104,7 +104,6 @@ def test_migrate_libraries_to_playlist(migrator):
Library = music_apps.get_model("music", "Library") Library = music_apps.get_model("music", "Library")
Upload = music_apps.get_model("music", "Upload") Upload = music_apps.get_model("music", "Upload")
Playlist = music_apps.get_model("playlists", "Playlist") Playlist = music_apps.get_model("playlists", "Playlist")
Plt = music_apps.get_model("playlists", "PlaylistTrack")
# Create data # Create data
d = settings.FEDERATION_HOSTNAME d = settings.FEDERATION_HOSTNAME
@ -125,6 +124,15 @@ def test_migrate_libraries_to_playlist(migrator):
uuid=uuid4(), uuid=uuid4(),
description="This is a description", description="This is a description",
) )
Library.objects.create(
name="me",
actor=actor,
creation_date=now(),
privacy_level="me",
uuid=uuid4(),
description="This is a description",
fid=f"http://{d}/mylocallob",
)
library_not_local = Library.objects.create( library_not_local = Library.objects.create(
name="This should not becane playlist name", name="This should not becane playlist name",
@ -136,22 +144,6 @@ def test_migrate_libraries_to_playlist(migrator):
description="This is a description recalling to eat the rich", description="This is a description recalling to eat the rich",
) )
playlist = Playlist.objects.create(
name="This should becane a library name",
fid="https://asupernotlocal.acab/federation/music/playlist/8505207e-45da-449a-9ec8-ed12a848fcea",
actor=actor,
creation_date=now(),
privacy_level="everyone",
uuid=uuid4(),
)
playlist_not_local = Playlist.objects.create(
name="This should not becane a library name",
actor=target_actor,
creation_date=now(),
privacy_level="everyone",
uuid=uuid4(),
)
Track.objects.create() Track.objects.create()
Track.objects.create() Track.objects.create()
track = Track.objects.create() track = Track.objects.create()
@ -167,13 +159,29 @@ def test_migrate_libraries_to_playlist(migrator):
Upload.objects.create(library=library_not_local, track=track), Upload.objects.create(library=library_not_local, track=track),
Upload.objects.create(library=library_not_local, track=track2), Upload.objects.create(library=library_not_local, track=track2),
Upload.objects.create(library=library_not_local, track=track3), Upload.objects.create(library=library_not_local, track=track3),
# Plt = music_apps.get_model("playlists", "PlaylistTrack")
# playlist = Playlist.objects.create(
# name="This should becane a library name",
# fid="https://asupernotlocal.acab/federation/music/playlist/8505207e-45da-449a-9ec8-ed12a848fcea",
# actor=actor,
# creation_date=now(),
# privacy_level="everyone",
# uuid=uuid4(),
# )
Plt.objects.create(playlist=playlist, track=track) # playlist_not_local = Playlist.objects.create(
Plt.objects.create( # name="This should not becane a library name",
playlist=playlist_not_local, # actor=target_actor,
track=track, # creation_date=now(),
fid="https://asupernotlocal.acab/federation/music/playlistttrack/8505207e-", # privacy_level="everyone",
) # uuid=uuid4(),
# )
# Plt.objects.create(playlist=playlist, track=track)
# Plt.objects.create(
# playlist=playlist_not_local,
# track=track,
# fid="https://asupernotlocal.acab/federation/music/playlistttrack/8505207e-",
# )
library_follow = LibraryFollow.objects.create( library_follow = LibraryFollow.objects.create(
uuid=uuid4(), uuid=uuid4(),
@ -204,6 +212,10 @@ def test_migrate_libraries_to_playlist(migrator):
assert playlist.privacy_level == library.privacy_level assert playlist.privacy_level == library.privacy_level
assert playlist.description == library.description assert playlist.description == library.description
# Verify Playlist me creation skipped
assert not Playlist.objects.filter(name="me")
assert playlist.actor.libraries.filter(name="me").count() == 1
# Verify PlaylistTrack creation # Verify PlaylistTrack creation
playlist_tracks = PlaylistTrack.objects.filter(playlist=playlist).order_by("index") playlist_tracks = PlaylistTrack.objects.filter(playlist=playlist).order_by("index")
assert playlist_tracks.count() == 3 assert playlist_tracks.count() == 3