From 6c9ddfbc9867d9090d0e2ce32d91898e4eacae2d Mon Sep 17 00:00:00 2001 From: michail Date: Wed, 23 Oct 2019 14:42:08 +0500 Subject: [PATCH] added transfer for recipe app --- apps/recipe/transfer_data.py | 19 ++++++++ apps/transfer/management/commands/transfer.py | 3 +- apps/transfer/serializers/recipe.py | 46 +++++++++++++++++++ 3 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 apps/recipe/transfer_data.py create mode 100644 apps/transfer/serializers/recipe.py diff --git a/apps/recipe/transfer_data.py b/apps/recipe/transfer_data.py new file mode 100644 index 00000000..4a2e97d6 --- /dev/null +++ b/apps/recipe/transfer_data.py @@ -0,0 +1,19 @@ +from django.db.models import Value, IntegerField, F +from pprint import pprint +from transfer.models import PageTexts +from transfer.serializers.recipe import RecipeSerializer + + +def transfer_recipe(): + queryset = PageTexts.objects.filter(page__type="Recipe") + + serialized_data = RecipeSerializer(data=list(queryset.values()), many=True) + if serialized_data.is_valid(): + serialized_data.save() + else: + pprint(f"News serializer errors: {serialized_data.errors}") + + +data_types = { + "recipe": [transfer_recipe] +} diff --git a/apps/transfer/management/commands/transfer.py b/apps/transfer/management/commands/transfer.py index 18e0de8d..30a87dc4 100644 --- a/apps/transfer/management/commands/transfer.py +++ b/apps/transfer/management/commands/transfer.py @@ -12,7 +12,8 @@ class Command(BaseCommand): 'dictionaries', 'news', 'account', - 'subscriber' + 'subscriber', + 'recipe' ] def handle(self, *args, **options): diff --git a/apps/transfer/serializers/recipe.py b/apps/transfer/serializers/recipe.py new file mode 100644 index 00000000..890d2b42 --- /dev/null +++ b/apps/transfer/serializers/recipe.py @@ -0,0 +1,46 @@ +from rest_framework import serializers +from recipe.models import Recipe + + +class RecipeSerializer(serializers.ModelSerializer): + body = serializers.CharField(allow_null=True) + title = serializers.CharField() + state = serializers.CharField() + created_at = serializers.DateTimeField(source="published_at", format='%m-%d-%Y %H:%M:%S') + + class Meta: + model = Recipe + fields = ( + "body", + "title", + "state", + "created_at" + ) + + def validate(self, data): + data["state"] = self.get_state(data) + data["title"] = self.get_title(data) + data["description"] = self.get_description(data) + data.pop("body") + return data + + def create(self, validated_data): + return Recipe.objects.create(**validated_data) + + def get_state(self, obj): + if obj["state"] == "published": + return Recipe.PUBLISHED + elif obj["state"] == "hidden": + return Recipe.HIDDEN + elif obj["state"] == "published_exclusive": + return Recipe.PUBLISHED_EXCLUSIVE + else: + return Recipe.WAITING + + def get_title(self, obj): + tit = obj.get("title") + return {"en-GB": tit} + + def get_description(self, obj): + desc = obj.get("body") + return {"en-GB": desc}