keep user default libs creation and bulkupload endpoint

environments/review-docs-2416-j6vg8x/deployments/20780
Petitminion 2025-03-09 17:52:54 +01:00
rodzic be90a29d76
commit 57483b3f07
7 zmienionych plików z 76 dodań i 2 usunięć

Wyświetl plik

@ -49,6 +49,7 @@ def handler_create_user(
utils.logger.warn("Unknown permission %s", permission)
utils.logger.debug("Creating actor…")
user.actor = models.create_actor(user)
models.create_user_libraries(user)
user.save()
return user

Wyświetl plik

@ -12,7 +12,7 @@ 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.playlists import factories as playlist_factories
from funkwhale_api.users import serializers
from funkwhale_api.users import models, serializers
logger = logging.getLogger(__name__)
@ -39,6 +39,7 @@ def create_data(super_user_name=None):
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

Wyświetl plik

@ -537,6 +537,26 @@ class UploadForOwnerSerializer(UploadSerializer):
return f
class UploadBulkUpdateSerializer(serializers.Serializer):
uuid = serializers.UUIDField()
privacy_level = serializers.ChoiceField(
choices=models.LIBRARY_PRIVACY_LEVEL_CHOICES
)
def validate(self, data):
try:
upload = models.Upload.objects.get(uuid=data["uuid"])
except models.Upload.DoesNotExist:
raise serializers.ValidationError(
f"Upload with uuid {data['uuid']} does not exist"
)
upload.library = upload.library.actor.libraries.get(
privacy_level=data["privacy_level"]
)
return upload
class UploadActionSerializer(common_serializers.ActionSerializer):
actions = [
common_serializers.Action("delete", allow_all=True),

Wyświetl plik

@ -24,6 +24,7 @@ from funkwhale_api.common import validators as common_validators
from funkwhale_api.federation import keys
from funkwhale_api.federation import models as federation_models
from funkwhale_api.federation import utils as federation_utils
from funkwhale_api.music import models as music_models
def get_token(length=5):
@ -465,3 +466,19 @@ def create_actor(user, **kwargs):
def init_ldap_user(sender, user, ldap_user, **kwargs):
if not user.actor:
user.actor = create_actor(user)
def create_user_libraries(user):
for privacy_level, l in music_models.LIBRARY_PRIVACY_LEVEL_CHOICES:
music_models.Library.objects.create(
actor=user.actor,
privacy_level=privacy_level,
name=privacy_level,
uuid=(new_uuid := uuid.uuid4()),
fid=federation_utils.full_url(
reverse(
"federation:music:playlists-detail",
kwargs={"uuid": new_uuid},
)
),
)

Wyświetl plik

@ -114,7 +114,7 @@ class RegisterSerializer(RS):
user_request_id=user_request.pk,
new_status=user_request.status,
)
models.create_user_libraries(user)
return user

Wyświetl plik

@ -1613,3 +1613,25 @@ def test_album_create_artist_credit(factories, logged_in_api_client):
url, {"artist": artist.pk, "title": "super album"}, format="json"
)
assert response.status_code == 204
def test_can_patch_upload_list(factories, logged_in_api_client):
url = reverse("api:v1:uploads-bulk-update")
actor = logged_in_api_client.user.create_actor()
upload = factories["music.Upload"](library__actor=actor)
upload2 = factories["music.Upload"](library__actor=actor)
factories["music.Library"](actor=actor, privacy_level="everyone")
response = logged_in_api_client.patch(
url,
[
{"uuid": upload.uuid, "privacy_level": "everyone"},
{"uuid": upload2.uuid, "privacy_level": "everyone"},
],
format="json",
)
upload.refresh_from_db()
upload2.refresh_from_db()
assert response.status_code == 200
assert upload.library.privacy_level == "everyone"

Wyświetl plik

@ -4,6 +4,7 @@ import pytest
from django.urls import reverse
from funkwhale_api.federation import utils as federation_utils
from funkwhale_api.music import models as music_models
from funkwhale_api.users import models
@ -182,6 +183,18 @@ def test_creating_actor_from_user(factories, settings):
)
def test_creating_libraries_from_user(factories, settings):
user = factories["users.User"](username="Hello M. world", with_actor=True)
models.create_user_libraries(user)
for privacy_level, desc in music_models.LIBRARY_PRIVACY_LEVEL_CHOICES:
assert (
user.actor.libraries.filter(
name=privacy_level, privacy_level=privacy_level, actor=user.actor
).count()
== 1
)
def test_get_channels_groups(factories):
user = factories["users.User"](permission_library=True)