155 lines
5.4 KiB
Python
155 lines
5.4 KiB
Python
"""
|
|
Populates the database with fake data
|
|
"""
|
|
|
|
import logging
|
|
import random
|
|
|
|
from funkwhale_api.audio import factories as audio_factories
|
|
from funkwhale_api.cli import users
|
|
from funkwhale_api.favorites import factories as favorites_factories
|
|
from funkwhale_api.federation import factories as federation_factories
|
|
from funkwhale_api.history import factories as history_factories
|
|
from funkwhale_api.music import factories as music_factories
|
|
from funkwhale_api.music import models as music_models
|
|
from funkwhale_api.playlists import factories as playlist_factories
|
|
from funkwhale_api.users import models, serializers
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
def create_data(super_user_name=None):
|
|
super_user = None
|
|
if super_user_name:
|
|
try:
|
|
super_user = users.handler_create_user(
|
|
username=str(super_user_name),
|
|
password="funkwhale",
|
|
email=f"{super_user_name}eat@the.rich",
|
|
is_superuser=True,
|
|
is_staff=True,
|
|
upload_quota=None,
|
|
)
|
|
except serializers.ValidationError as e:
|
|
for field, errors in e.detail.items():
|
|
if (
|
|
"A user with that username already exists"
|
|
or "A user is already registered with this e-mail address"
|
|
in errors[0]
|
|
):
|
|
print(
|
|
f"Superuser {super_user_name} already in db. Skipping superuser creation"
|
|
)
|
|
super_user = models.User.objects.get(username=super_user_name)
|
|
continue
|
|
else:
|
|
raise e
|
|
print(f"Superuser with username {super_user_name} and password `funkwhale`")
|
|
|
|
library = federation_factories.MusicLibraryFactory(
|
|
actor=(super_user.actor if super_user else federation_factories.ActorFactory()),
|
|
local=True,
|
|
)
|
|
uploads = music_factories.UploadFactory.create_batch(
|
|
size=random.randint(3, 18),
|
|
playable=True,
|
|
library=library,
|
|
local=True,
|
|
)
|
|
for upload in uploads[:2]:
|
|
history_factories.ListeningFactory(
|
|
track=upload.track, actor=upload.library.actor
|
|
)
|
|
favorites_factories.TrackFavorite(
|
|
track=upload.track, actor=upload.library.actor
|
|
)
|
|
|
|
if artist_credit := music_models.ArtistCredit.objects.filter(artist__name="vald"):
|
|
artist_credit = artist_credit[0]
|
|
else:
|
|
artist_credit = music_factories.ArtistCreditFactory(artist__name="vald")
|
|
|
|
music_factories.TrackFactory(title="shoot un ministre", artist_credit=artist_credit)
|
|
|
|
playlist = playlist_factories.PlaylistFactory(
|
|
name="playlist test public",
|
|
privacy_level="everyone",
|
|
actor=(super_user.actor if super_user else federation_factories.ActorFactory()),
|
|
)
|
|
playlist_factories.PlaylistTrackFactory(playlist=playlist, track=upload.track)
|
|
federation_factories.LibraryFollowFactory.create_batch(
|
|
size=random.randint(3, 18), actor=super_user.actor
|
|
)
|
|
|
|
# my podcast
|
|
my_podcast_library = federation_factories.MusicLibraryFactory(
|
|
actor=(super_user.actor if super_user else federation_factories.ActorFactory()),
|
|
local=True,
|
|
)
|
|
my_podcast_channel = audio_factories.ChannelFactory(
|
|
library=my_podcast_library,
|
|
attributed_to=super_user.actor,
|
|
artist__content_category="podcast",
|
|
)
|
|
my_podcast_channel_serie = music_factories.AlbumFactory(
|
|
artist_credit__artist=my_podcast_channel.artist
|
|
)
|
|
music_factories.TrackFactory.create_batch(
|
|
size=random.randint(3, 6),
|
|
artist_credit__artist=my_podcast_channel.artist,
|
|
album=my_podcast_channel_serie,
|
|
)
|
|
|
|
# podcast
|
|
podcast_channel = audio_factories.ChannelFactory(artist__content_category="podcast")
|
|
podcast_channel_serie = music_factories.AlbumFactory(
|
|
artist_credit__artist=podcast_channel.artist
|
|
)
|
|
music_factories.TrackFactory.create_batch(
|
|
size=random.randint(3, 6),
|
|
artist_credit__artist=podcast_channel.artist,
|
|
album=podcast_channel_serie,
|
|
)
|
|
|
|
audio_factories.SubscriptionFactory(
|
|
approved=True, target=podcast_channel.actor, actor=super_user.actor
|
|
)
|
|
|
|
# my artist channel
|
|
my_artist_library = federation_factories.MusicLibraryFactory(
|
|
actor=(super_user.actor if super_user else federation_factories.ActorFactory()),
|
|
local=True,
|
|
)
|
|
my_artist_channel = audio_factories.ChannelFactory(
|
|
library=my_artist_library,
|
|
attributed_to=super_user.actor,
|
|
artist__content_category="music",
|
|
)
|
|
my_artist_channel_serie = music_factories.AlbumFactory(
|
|
artist_credit__artist=my_artist_channel.artist
|
|
)
|
|
music_factories.TrackFactory.create_batch(
|
|
size=random.randint(3, 6),
|
|
artist_credit__artist=my_artist_channel.artist,
|
|
album=my_artist_channel_serie,
|
|
)
|
|
|
|
# artist channel
|
|
artist_channel = audio_factories.ChannelFactory(artist__content_category="artist")
|
|
artist_channel_serie = music_factories.AlbumFactory(
|
|
artist_credit__artist=artist_channel.artist
|
|
)
|
|
music_factories.TrackFactory.create_batch(
|
|
size=random.randint(3, 6),
|
|
artist_credit__artist=artist_channel.artist,
|
|
album=artist_channel_serie,
|
|
)
|
|
|
|
audio_factories.SubscriptionFactory(
|
|
approved=True, target=artist_channel.actor, actor=super_user.actor
|
|
)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
create_data()
|