Small performance enhancements
This commit is contained in:
parent
5623b6d88b
commit
1ca7f62aab
|
@ -436,7 +436,7 @@ class TrackQuerySet(common_models.LocalFromFidQuerySet, models.QuerySet):
|
|||
return self.exclude(pk__in=matches)
|
||||
|
||||
def with_playable_uploads(self, actor):
|
||||
uploads = Upload.objects.playable_by(actor).select_related("track")
|
||||
uploads = Upload.objects.playable_by(actor)
|
||||
return self.prefetch_related(
|
||||
models.Prefetch("uploads", queryset=uploads, to_attr="playable_uploads")
|
||||
)
|
||||
|
@ -594,7 +594,8 @@ class Track(APIModelMixin):
|
|||
|
||||
@property
|
||||
def listen_url(self):
|
||||
return reverse("api:v1:listen-detail", kwargs={"uuid": self.uuid})
|
||||
# Not using reverse because this is slow
|
||||
return "/api/v1/listen/{}/".format(self.uuid)
|
||||
|
||||
@property
|
||||
def local_license(self):
|
||||
|
|
|
@ -45,26 +45,21 @@ class LicenseSerializer(serializers.Serializer):
|
|||
return obj["identifiers"][0]
|
||||
|
||||
|
||||
class ArtistAlbumSerializer(serializers.ModelSerializer):
|
||||
class ArtistAlbumSerializer(serializers.Serializer):
|
||||
tracks_count = serializers.SerializerMethodField()
|
||||
cover = cover_field
|
||||
is_playable = serializers.SerializerMethodField()
|
||||
is_local = serializers.BooleanField()
|
||||
id = serializers.IntegerField()
|
||||
fid = serializers.URLField()
|
||||
mbid = serializers.UUIDField()
|
||||
title = serializers.CharField()
|
||||
artist = serializers.SerializerMethodField()
|
||||
release_date = serializers.DateField()
|
||||
creation_date = serializers.DateTimeField()
|
||||
|
||||
class Meta:
|
||||
model = models.Album
|
||||
fields = (
|
||||
"id",
|
||||
"fid",
|
||||
"mbid",
|
||||
"title",
|
||||
"artist",
|
||||
"release_date",
|
||||
"cover",
|
||||
"creation_date",
|
||||
"tracks_count",
|
||||
"is_playable",
|
||||
"is_local",
|
||||
)
|
||||
def get_artist(self, o):
|
||||
return o.artist_id
|
||||
|
||||
def get_tracks_count(self, o):
|
||||
return o._tracks_count
|
||||
|
@ -76,26 +71,20 @@ class ArtistAlbumSerializer(serializers.ModelSerializer):
|
|||
return None
|
||||
|
||||
|
||||
class ArtistWithAlbumsSerializer(serializers.ModelSerializer):
|
||||
albums = ArtistAlbumSerializer(many=True, read_only=True)
|
||||
DATETIME_FIELD = serializers.DateTimeField()
|
||||
|
||||
|
||||
class ArtistWithAlbumsSerializer(serializers.Serializer):
|
||||
albums = ArtistAlbumSerializer(many=True)
|
||||
tags = serializers.SerializerMethodField()
|
||||
attributed_to = serializers.SerializerMethodField()
|
||||
tracks_count = serializers.SerializerMethodField()
|
||||
|
||||
class Meta:
|
||||
model = models.Artist
|
||||
fields = (
|
||||
"id",
|
||||
"fid",
|
||||
"mbid",
|
||||
"name",
|
||||
"creation_date",
|
||||
"albums",
|
||||
"is_local",
|
||||
"tags",
|
||||
"attributed_to",
|
||||
"tracks_count",
|
||||
)
|
||||
id = serializers.IntegerField()
|
||||
fid = serializers.URLField()
|
||||
mbid = serializers.UUIDField()
|
||||
name = serializers.CharField()
|
||||
creation_date = serializers.DateTimeField()
|
||||
is_local = serializers.BooleanField()
|
||||
|
||||
def get_tags(self, obj):
|
||||
tagged_items = getattr(obj, "_prefetched_tagged_items", [])
|
||||
|
@ -114,9 +103,7 @@ def serialize_artist_simple(artist):
|
|||
"fid": artist.fid,
|
||||
"mbid": str(artist.mbid),
|
||||
"name": artist.name,
|
||||
"creation_date": serializers.DateTimeField().to_representation(
|
||||
artist.creation_date
|
||||
),
|
||||
"creation_date": DATETIME_FIELD.to_representation(artist.creation_date),
|
||||
"is_local": artist.is_local,
|
||||
}
|
||||
|
||||
|
@ -129,9 +116,7 @@ def serialize_album_track(track):
|
|||
"title": track.title,
|
||||
"artist": serialize_artist_simple(track.artist),
|
||||
"album": track.album_id,
|
||||
"creation_date": serializers.DateTimeField().to_representation(
|
||||
track.creation_date
|
||||
),
|
||||
"creation_date": DATETIME_FIELD.to_representation(track.creation_date),
|
||||
"position": track.position,
|
||||
"disc_number": track.disc_number,
|
||||
"uploads": [
|
||||
|
@ -145,31 +130,22 @@ def serialize_album_track(track):
|
|||
}
|
||||
|
||||
|
||||
class AlbumSerializer(serializers.ModelSerializer):
|
||||
class AlbumSerializer(serializers.Serializer):
|
||||
tracks = serializers.SerializerMethodField()
|
||||
artist = serializers.SerializerMethodField()
|
||||
cover = cover_field
|
||||
is_playable = serializers.SerializerMethodField()
|
||||
tags = serializers.SerializerMethodField()
|
||||
attributed_to = serializers.SerializerMethodField()
|
||||
|
||||
class Meta:
|
||||
model = models.Album
|
||||
fields = (
|
||||
"id",
|
||||
"fid",
|
||||
"mbid",
|
||||
"title",
|
||||
"artist",
|
||||
"tracks",
|
||||
"release_date",
|
||||
"cover",
|
||||
"creation_date",
|
||||
"is_playable",
|
||||
"is_local",
|
||||
"tags",
|
||||
"attributed_to",
|
||||
)
|
||||
id = serializers.IntegerField()
|
||||
fid = serializers.URLField()
|
||||
mbid = serializers.UUIDField()
|
||||
title = serializers.CharField()
|
||||
artist = serializers.SerializerMethodField()
|
||||
release_date = serializers.DateField()
|
||||
creation_date = serializers.DateTimeField()
|
||||
is_local = serializers.BooleanField()
|
||||
is_playable = serializers.SerializerMethodField()
|
||||
|
||||
get_attributed_to = serialize_attributed_to
|
||||
|
||||
|
@ -227,7 +203,7 @@ def serialize_upload(upload):
|
|||
}
|
||||
|
||||
|
||||
class TrackSerializer(serializers.ModelSerializer):
|
||||
class TrackSerializer(serializers.Serializer):
|
||||
artist = serializers.SerializerMethodField()
|
||||
album = TrackAlbumSerializer(read_only=True)
|
||||
uploads = serializers.SerializerMethodField()
|
||||
|
@ -235,26 +211,17 @@ class TrackSerializer(serializers.ModelSerializer):
|
|||
tags = serializers.SerializerMethodField()
|
||||
attributed_to = serializers.SerializerMethodField()
|
||||
|
||||
class Meta:
|
||||
model = models.Track
|
||||
fields = (
|
||||
"id",
|
||||
"fid",
|
||||
"mbid",
|
||||
"title",
|
||||
"album",
|
||||
"artist",
|
||||
"creation_date",
|
||||
"position",
|
||||
"disc_number",
|
||||
"uploads",
|
||||
"listen_url",
|
||||
"copyright",
|
||||
"license",
|
||||
"is_local",
|
||||
"tags",
|
||||
"attributed_to",
|
||||
)
|
||||
id = serializers.IntegerField()
|
||||
fid = serializers.URLField()
|
||||
mbid = serializers.UUIDField()
|
||||
title = serializers.CharField()
|
||||
artist = serializers.SerializerMethodField()
|
||||
creation_date = serializers.DateTimeField()
|
||||
is_local = serializers.BooleanField()
|
||||
position = serializers.IntegerField()
|
||||
disc_number = serializers.IntegerField()
|
||||
copyright = serializers.CharField()
|
||||
license = serializers.SerializerMethodField()
|
||||
|
||||
get_attributed_to = serialize_attributed_to
|
||||
|
||||
|
@ -271,6 +238,9 @@ class TrackSerializer(serializers.ModelSerializer):
|
|||
tagged_items = getattr(obj, "_prefetched_tagged_items", [])
|
||||
return [ti.tag.name for ti in tagged_items]
|
||||
|
||||
def get_license(self, o):
|
||||
return o.license_id
|
||||
|
||||
|
||||
@common_serializers.track_fields_for_update("name", "description", "privacy_level")
|
||||
class LibraryForOwnerSerializer(serializers.ModelSerializer):
|
||||
|
|
Loading…
Reference in New Issue