Skip to content
Snippets Groups Projects
Commit c1dfe2bd authored by borzechof99's avatar borzechof99 :whale2:
Browse files

Merge branch 'api-fixes-snacks' into 'master'

API Fixes for Snacks and Activities

See merge request swp-unisport/team-warumkeinrust/unisport-o-mat!61
parents 4800a157 36ab4251
No related branches found
No related tags found
No related merge requests found
......@@ -190,9 +190,11 @@ class CallToMove(models.Model):
new_image = convert_base64_to_image(image_data, image_type, "activity_img")
if new_image is None:
self.image.delete()
self.image.delete() # pylint: disable=no-member
self.image = None
self.image = new_image
class KnowledgeSnack(models.Model):
"""Defines text and image that are used to show a KnowledgeSnack between questions"""
......@@ -210,9 +212,11 @@ class KnowledgeSnack(models.Model):
new_image = convert_base64_to_image(image_data, image_type, "snack_image")
if new_image is None:
self.image.delete()
self.image.delete() # pylint: disable=no-member
self.image = None
self.image = new_image
def convert_base64_to_image(image_data, image_type, image_name):
"""
......@@ -226,6 +230,9 @@ def convert_base64_to_image(image_data, image_type, image_name):
image_name += "." + ext
if image_data.startswith("data:image"):
image_data = image_data.split(",")[1]
image = SimpleUploadedFile(
content=base64.b64decode(image_data),
name=image_name,
......
......@@ -330,7 +330,7 @@ class SingleSnackTivitySerializer(serializers.BaseSerializer):
return validated_data
def to_representation(self, obj):
def to_representation(self, obj, request=None):
"""
Converts a SnackTivity Model
"""
......@@ -338,14 +338,16 @@ class SingleSnackTivitySerializer(serializers.BaseSerializer):
# bug https://code.djangoproject.com/ticket/25528
has_image = obj.image not in [None, ""]
if has_image:
if has_image and request is not None:
image_base64 = base64.b64encode(obj.image.file.read())
# Maybe rethink this? Dunno if unsafe.
image_type = "image/" + obj.image.file.name.split(".")[-1]
image_url = request.build_absolute_uri(obj.image.url)
else:
image_base64 = ""
image_type = ""
image_url = None
data = {
"id": obj.pk,
......@@ -354,6 +356,7 @@ class SingleSnackTivitySerializer(serializers.BaseSerializer):
"has_image": has_image,
"image_type": image_type,
"image": image_base64,
"image_url": image_url,
}
return data
......
......@@ -584,7 +584,10 @@ class SnackTivityView(viewsets.ViewSet):
if "text_de" in data.keys():
new_object.text_de = data["text_de"]
else:
raise ValueError("Das Feld text_de ist für Erstellung benötigt!")
return Response(
status=400,
data={"message": "Das Feld text_de ist für Erstellung benötigt!"},
)
if "text_en" in data.keys():
new_object.text_en = data["text_en"]
......@@ -594,7 +597,9 @@ class SnackTivityView(viewsets.ViewSet):
new_object.save()
return Response(SingleSnackTivitySerializer(new_object).data)
return Response(
SingleSnackTivitySerializer().to_representation(new_object, request=request)
)
def retrieve(self, request, pk=None):
"""
......@@ -604,7 +609,9 @@ class SnackTivityView(viewsets.ViewSet):
obj = get_object_or_404(self.used_objects, pk=pk)
return Response(SingleSnackTivitySerializer(obj).data)
return Response(
SingleSnackTivitySerializer().to_representation(obj, request=request)
)
def update(self, request, pk=None):
"""
......@@ -623,7 +630,9 @@ class SnackTivityView(viewsets.ViewSet):
obj.save()
return Response(SingleSnackTivitySerializer(obj).data)
return Response(
SingleSnackTivitySerializer().to_representation(obj, request=request)
)
def partial_update(self, request, pk=None):
"""
......@@ -645,7 +654,9 @@ class SnackTivityView(viewsets.ViewSet):
obj.save()
return Response(SingleSnackTivitySerializer(obj).data)
return Response(
SingleSnackTivitySerializer().to_representation(obj, request=request)
)
def destroy(self, request, pk=None):
"""
......@@ -660,7 +671,7 @@ class SnackTivityView(viewsets.ViewSet):
obj.delete()
return Response(status=200)
return Response(status=200, data={"message": "Erfolgreich Gelöscht!"})
class SnackListView(SnackTivityView):
......@@ -1020,9 +1031,15 @@ class QuizView(APIView):
# Get random Snack:
random_snack = random.choice(list(KnowledgeSnack.objects.all()))
entry_dict["text_de"] = random_snack.text_de
entry_dict["text_en"] = random_snack.text_en
entry_dict["url"] = request.build_absolute_uri(random_snack.image.url)
if random_snack.image:
entry_dict["url"] = request.build_absolute_uri(
random_snack.image.url
)
else:
entry_dict["url"] = None
else:
......@@ -1030,11 +1047,16 @@ class QuizView(APIView):
# Get random Activity:
random_activity = random.choice(list(CallToMove.objects.all()))
entry_dict["text_de"] = random_activity.text_de
entry_dict["text_en"] = random_activity.text_en
entry_dict["url"] = request.build_absolute_uri(
random_activity.image.url
)
if random_activity.image:
entry_dict["url"] = request.build_absolute_uri(
random_activity.image.url
)
else:
entry_dict["url"] = None
order_list.append(entry_dict)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment