Compare commits

..

2 Commits

Author SHA1 Message Date
5bc8cd523a updated music and files api 2023-12-08 17:17:18 +03:00
63311d1d26 updated serializer 2023-12-08 16:35:32 +03:00
3 changed files with 48 additions and 23 deletions

View File

@ -1,5 +1,6 @@
import os import os
import elastic_transport
import structlog import structlog
from django.contrib.auth.mixins import LoginRequiredMixin from django.contrib.auth.mixins import LoginRequiredMixin
from django.core.exceptions import PermissionDenied from django.core.exceptions import PermissionDenied
@ -91,7 +92,9 @@ def get_queryset(self):
): ):
return self.filter(BaseFileItem.objects.none()) return self.filter(BaseFileItem.objects.none())
return self.filter( return self.filter(
BaseFileItem.objects.filter(user=self.request.user, parent__isnull=True) BaseFileItem.objects.cache().filter(
user=self.request.user, parent__isnull=True
)
) )
@ -313,6 +316,7 @@ def on_completion(self, uploaded_file, request):
} }
prepared = False prepared = False
if prepared and uploaded_file.size <= request.user.left_file_upload: if prepared and uploaded_file.size <= request.user.left_file_upload:
try:
f = File.objects.create( f = File.objects.create(
user=request.user, user=request.user,
file_obj=uploaded_file, file_obj=uploaded_file,
@ -325,6 +329,12 @@ def on_completion(self, uploaded_file, request):
"message": f"File {f.file.name.split('/')[-1]} successfully uploaded", "message": f"File {f.file.name.split('/')[-1]} successfully uploaded",
"status": True, "status": True,
} }
except elastic_transport.ConnectionError:
self.message = {
"message": "Service is down, please try again later or contact support",
"status": False,
}
logger.error("Elasticsearch is down")
elif prepared: elif prepared:
self.message = { self.message = {
"message": "File is too large, please increase disk space", "message": "File is too large, please increase disk space",

View File

@ -16,13 +16,13 @@
class AuthorSerializer(serializers.ModelSerializer): class AuthorSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = Author model = Author
fields = ["name", "slug", "link", "image_cropped"] fields = ["name", "slug", "image_cropped"]
class AlbumSerializer(serializers.ModelSerializer): class AlbumSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = Album model = Album
fields = ["name", "slug", "link", "image_cropped"] fields = ["name", "slug", "image_cropped"]
class SongSerializer(serializers.ModelSerializer): class SongSerializer(serializers.ModelSerializer):
@ -32,10 +32,12 @@ class SongSerializer(serializers.ModelSerializer):
@extend_schema_field(serializers.BooleanField) @extend_schema_field(serializers.BooleanField)
def get_liked(self, obj): def get_liked(self, obj):
if "request" in self.context:
if self.context["request"].user.is_authenticated: if self.context["request"].user.is_authenticated:
return SongUserRating.objects.filter( return SongUserRating.objects.filter(
song=obj, user=self.context["request"].user, like=True song=obj, user=self.context["request"].user, like=True
).exists() ).exists()
return None
class Meta: class Meta:
model = Song model = Song
@ -59,18 +61,30 @@ class Meta:
class ListSongSerializer(SetUserModelSerializer): class ListSongSerializer(SetUserModelSerializer):
album = serializers.CharField(source="album.name", read_only=True) album = AlbumSerializer(read_only=True)
authors = AuthorSerializer(many=True, read_only=True)
liked = serializers.SerializerMethodField(method_name="get_liked") liked = serializers.SerializerMethodField(method_name="get_liked")
@extend_schema_field(serializers.BooleanField) @extend_schema_field(serializers.BooleanField)
def get_liked(self, obj): def get_liked(self, obj):
if "likes" in self.context: if "likes" in self.context:
return self.context["likes"] return self.context["likes"]
if "likes_ids" in self.context:
return obj.id in self.context["likes_ids"] return obj.id in self.context["likes_ids"]
return None
class Meta: class Meta:
model = Song model = Song
fields = ["name", "slug", "file", "image_cropped", "length", "album", "liked"] fields = [
"name",
"slug",
"file",
"image_cropped",
"length",
"album",
"authors",
"liked",
]
extra_kwargs = { extra_kwargs = {
"slug": {"read_only": True}, "slug": {"read_only": True},
"image_cropped": {"read_only": True}, "image_cropped": {"read_only": True},

View File

@ -48,7 +48,8 @@ def process_file(path, user_id):
@shared_task @shared_task
def load_ym_file_meta(track, user_id): def load_ym_file_meta(track, user_id):
return yandex.load_file_meta(track, user_id) yb = yandex.load_file_meta(track, user_id)
return yb
@shared_task() @shared_task()