From d3564efbb97a49829442f8c16a698bfcee186ffc Mon Sep 17 00:00:00 2001 From: abutalib-kiwi Date: Tue, 1 Aug 2023 20:13:35 +0530 Subject: [PATCH] change in update api, added method to upload and get image url --- web_admin/serializers/article_serializer.py | 42 +++++++-------------- web_admin/utils.py | 11 ++++++ 2 files changed, 24 insertions(+), 29 deletions(-) diff --git a/web_admin/serializers/article_serializer.py b/web_admin/serializers/article_serializer.py index e374679..6945880 100644 --- a/web_admin/serializers/article_serializer.py +++ b/web_admin/serializers/article_serializer.py @@ -11,7 +11,7 @@ from base.constants import (ARTICLE_SURVEY_POINTS, MAX_ARTICLE_CARD, MIN_ARTICLE from base.messages import ERROR_CODE from guardian.utils import upload_image_to_alibaba from web_admin.models import Article, ArticleCard, SurveyOption, ArticleSurvey, DefaultArticleCardImage -from web_admin.utils import pop_id +from web_admin.utils import pop_id, get_image_url USER = get_user_model() @@ -32,11 +32,7 @@ class ArticleCardSerializer(serializers.ModelSerializer): fields = ('id', 'title', 'description', 'image', 'image_url') def create(self, validated_data): - if 'image' in validated_data and validated_data['image'] is not None: - image = validated_data.pop('image') - filename = f"{ARTICLE_CARD_IMAGE_FOLDER}/{image.name}" - # upload image on ali baba - validated_data['image_url'] = upload_image_to_alibaba(image, filename) + validated_data['image_url'] = get_image_url(validated_data) article_card = ArticleCard.objects.create(article_id='1', **validated_data) return article_card @@ -111,11 +107,7 @@ class ArticleSerializer(serializers.ModelSerializer): for card in article_cards: card = pop_id(card) - if 'image' in card and card['image'] is not None: - image = card.pop('image') - filename = f"{ARTICLE_CARD_IMAGE_FOLDER}/{image.name}" - # upload image on ali baba - card['image_url'] = upload_image_to_alibaba(image, filename) + card['image_url'] = get_image_url(card) ArticleCard.objects.create(article=article, **card) for survey in article_survey: @@ -139,28 +131,22 @@ class ArticleSerializer(serializers.ModelSerializer): instance.title = validated_data.get('title', instance.title) instance.description = validated_data.get('description', instance.description) instance.save() - + prev_card = list(ArticleCard.objects.filter(article=instance).values_list('id', flat=True)) # Update or create cards for card_data in article_cards: card_id = card_data.get('id', None) if card_id: + prev_card.remove(card_id) card = ArticleCard.objects.get(id=card_id, article=instance) card.title = card_data.get('title', card.title) card.description = card_data.get('description', card.description) - if 'image' in card_data and card_data['image'] is not None: - image = card_data.pop('image') - filename = f"{ARTICLE_CARD_IMAGE_FOLDER}/{image.name}" - # upload image on ali baba - card.image_url = upload_image_to_alibaba(image, filename) + card.image_url = get_image_url(card_data) card.save() else: card_data = pop_id(card_data) - if 'image' in card_data and card_data['image'] is not None: - image = card_data.pop('image') - filename = f"{ARTICLE_CARD_IMAGE_FOLDER}/{image.name}" - # upload image on ali baba - card_data['image_url'] = upload_image_to_alibaba(image, filename) + card_data['image_url'] = get_image_url(card_data) ArticleCard.objects.create(article=instance, **card_data) + ArticleCard.objects.filter(id__in=prev_card, article=instance).delete() # Update or create survey sections for survey_data in article_survey: @@ -172,7 +158,7 @@ class ArticleSerializer(serializers.ModelSerializer): survey.save() else: survey_data = pop_id(survey_data) - survey = ArticleSurvey.objects.create(article=instance, **survey_data) + survey = ArticleSurvey.objects.create(article=instance, points=ARTICLE_SURVEY_POINTS, **survey_data) # Update or create survey options for option_data in options_data: @@ -210,6 +196,9 @@ class DefaultArticleCardImageSerializer(serializers.ModelSerializer): """ if 'image' not in attrs and attrs.get('image') is None: raise serializers.ValidationError({'details': ERROR_CODE['2061']}) + image = attrs.get('image') + if image and image.size == NUMBER['zero']: + raise serializers.ValidationError(ERROR_CODE['2035']) return attrs def create(self, validated_data): @@ -217,12 +206,7 @@ class DefaultArticleCardImageSerializer(serializers.ModelSerializer): to create and upload image :return: card_image object """ - image = validated_data.pop('image') - filename = f"{ARTICLE_CARD_IMAGE_FOLDER}/{image.name}" - if image and image.size == NUMBER['zero']: - raise serializers.ValidationError(ERROR_CODE['2035']) - # upload image on ali baba - validated_data['image_url'] = upload_image_to_alibaba(image, filename) + validated_data['image_url'] = get_image_url(validated_data) card_image = DefaultArticleCardImage.objects.create(**validated_data) return card_image diff --git a/web_admin/utils.py b/web_admin/utils.py index 2e09e2f..aea72e8 100644 --- a/web_admin/utils.py +++ b/web_admin/utils.py @@ -1,6 +1,8 @@ """ web_utils file """ +from base.constants import ARTICLE_CARD_IMAGE_FOLDER +from guardian.utils import upload_image_to_alibaba def pop_id(data): @@ -11,3 +13,12 @@ def pop_id(data): """ data.pop('id') if 'id' in data else data return data + + +def get_image_url(data): + if 'image' in data and data['image'] is not None: + image = data.pop('image') + filename = f"{ARTICLE_CARD_IMAGE_FOLDER}/{image.name}" + # upload image on ali baba + image_url = upload_image_to_alibaba(image, filename) + return image_url