Merge branch 'master' into develop
This commit is contained in:
commit
17996ca936
|
@ -44,12 +44,14 @@ class ManageUserSimpleSerializer(serializers.ModelSerializer):
|
|||
class ManageUserSerializer(serializers.ModelSerializer):
|
||||
permissions = PermissionsSerializer(source="*")
|
||||
upload_quota = serializers.IntegerField(allow_null=True)
|
||||
actor = serializers.SerializerMethodField()
|
||||
|
||||
class Meta:
|
||||
model = users_models.User
|
||||
fields = (
|
||||
"id",
|
||||
"username",
|
||||
"actor",
|
||||
"email",
|
||||
"name",
|
||||
"is_active",
|
||||
|
@ -82,6 +84,10 @@ class ManageUserSerializer(serializers.ModelSerializer):
|
|||
)
|
||||
return instance
|
||||
|
||||
def get_actor(self, obj):
|
||||
if obj.actor:
|
||||
return ManageBaseActorSerializer(obj.actor).data
|
||||
|
||||
|
||||
class ManageInvitationSerializer(serializers.ModelSerializer):
|
||||
users = ManageUserSimpleSerializer(many=True, required=False)
|
||||
|
|
|
@ -291,7 +291,7 @@ class ManageUserViewSet(
|
|||
mixins.UpdateModelMixin,
|
||||
viewsets.GenericViewSet,
|
||||
):
|
||||
queryset = users_models.User.objects.all().order_by("-id")
|
||||
queryset = users_models.User.objects.all().select_related("actor").order_by("-id")
|
||||
serializer_class = serializers.ManageUserSerializer
|
||||
filterset_class = filters.ManageUserFilterSet
|
||||
required_scope = "instance:users"
|
||||
|
|
|
@ -13,6 +13,8 @@ from rest_framework.compat import Mapping
|
|||
|
||||
logger = logging.getLogger(__name__)
|
||||
NODEFAULT = object()
|
||||
# default title used when imported tracks miss the `Album` tag, see #122
|
||||
UNKWOWN_ALBUM = "[Unknown Album]"
|
||||
|
||||
|
||||
class TagNotFound(KeyError):
|
||||
|
@ -425,9 +427,11 @@ class AlbumField(serializers.Field):
|
|||
|
||||
def to_internal_value(self, data):
|
||||
try:
|
||||
title = data.get("album")
|
||||
title = data.get("album") or ""
|
||||
except TagNotFound:
|
||||
raise serializers.ValidationError("Missing album tag")
|
||||
title = ""
|
||||
|
||||
title = title.strip() or UNKWOWN_ALBUM
|
||||
final = {
|
||||
"title": title,
|
||||
"release_date": data.get("date", None),
|
||||
|
|
|
@ -31,6 +31,7 @@ def compute_status(jobs):
|
|||
|
||||
AUDIO_EXTENSIONS_AND_MIMETYPE = [
|
||||
("ogg", "audio/ogg"),
|
||||
("opus", "audio/opus"),
|
||||
("mp3", "audio/mpeg"),
|
||||
("flac", "audio/x-flac"),
|
||||
("flac", "audio/flac"),
|
||||
|
|
|
@ -539,6 +539,34 @@ def test_serializer_album_artist_missing():
|
|||
assert serializer.validated_data == expected
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"data",
|
||||
[
|
||||
# no album tag
|
||||
{"title": "Track", "artist": "Artist"},
|
||||
# empty/null values
|
||||
{"title": "Track", "artist": "Artist", "album": ""},
|
||||
{"title": "Track", "artist": "Artist", "album": " "},
|
||||
{"title": "Track", "artist": "Artist", "album": None},
|
||||
],
|
||||
)
|
||||
def test_serializer_album_default_title_when_missing_or_empty(data):
|
||||
expected = {
|
||||
"title": "Track",
|
||||
"artists": [{"name": "Artist", "mbid": None}],
|
||||
"album": {
|
||||
"title": metadata.UNKWOWN_ALBUM,
|
||||
"mbid": None,
|
||||
"release_date": None,
|
||||
"artists": [],
|
||||
},
|
||||
"cover_data": None,
|
||||
}
|
||||
serializer = metadata.TrackMetadataSerializer(data=metadata.FakeMetadata(data))
|
||||
assert serializer.is_valid(raise_exception=True) is True
|
||||
assert serializer.validated_data == expected
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"field_name", ["copyright", "license", "mbid", "position", "disc_number"]
|
||||
)
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
Support for importing files with no album tag (#122)
|
|
@ -0,0 +1 @@
|
|||
Added opus to the list of supported mimetypes and extensions (#868)
|
|
@ -0,0 +1 @@
|
|||
Fixed broken user admin for users with non-digit or letters in their username (#869)
|
|
@ -45,7 +45,8 @@
|
|||
</template>
|
||||
<template slot="row-cells" slot-scope="scope">
|
||||
<td>
|
||||
<router-link :to="{name: 'manage.moderation.accounts.detail', params: {id: scope.obj.full_username }}">{{ scope.obj.username }}</router-link>
|
||||
<router-link v-if="scope.obj.actor" :to="{name: 'manage.moderation.accounts.detail', params: {id: scope.obj.actor.full_username }}">{{ scope.obj.username }}</router-link>
|
||||
<router-link v-else :to="{name: 'manage.moderation.accounts.detail', params: {id: scope.obj.full_username }}">{{ scope.obj.username }}</router-link>
|
||||
</td>
|
||||
<td>
|
||||
<span>{{ scope.obj.email }}</span>
|
||||
|
|
Loading…
Reference in New Issue