kopia lustrzana https://dev.funkwhale.audio/funkwhale/funkwhale
keep user default libs creation and bulkupload endpoint
rodzic
be90a29d76
commit
57483b3f07
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -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},
|
||||
)
|
||||
),
|
||||
)
|
||||
|
|
|
@ -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
|
||||
|
||||
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
Ładowanie…
Reference in New Issue