diff --git a/cookbook/integration/default.py b/cookbook/integration/default.py index befe0ede7..e8554ea74 100644 --- a/cookbook/integration/default.py +++ b/cookbook/integration/default.py @@ -1,9 +1,12 @@ import json import os +import uuid from io import StringIO, BytesIO from os.path import basename from zipfile import ZipFile +from PIL import Image +from django.core.files import File from django.http import HttpResponse from rest_framework.renderers import JSONRenderer @@ -38,10 +41,28 @@ class Default(Integration): response['Content-Disposition'] = 'attachment; filename="export.zip"' return response + def do_import(self, files): + for f in files: + zip = ZipFile(f.file) + for z in zip.namelist(): + self.get_recipe_from_zip(ZipFile(BytesIO(zip.read(z)))) + + def get_recipe_from_zip(self, recipe_zip): + recipe_string = recipe_zip.read('recipe.json').decode("utf-8") + recipe = self.get_recipe(recipe_string) + for f in recipe_zip.namelist(): + if '.png' in f: + recipe.image = File(BytesIO(recipe_zip.read(f)), name=f'{uuid.uuid4()}_{recipe.pk}.png') + recipe.save() + def get_recipe(self, string): data = json.loads(string) + serialized_recipe = RecipeExportSerializer(data=data, context={'request': self.request}) + if serialized_recipe.is_valid(): + recipe = serialized_recipe.save() + return recipe - return RecipeExportSerializer(data=data, context={'request': self.request}) + return None def get_export(self, recipe): export = RecipeExportSerializer(recipe).data diff --git a/cookbook/integration/integration.py b/cookbook/integration/integration.py index 5a6441cb7..11ed10acf 100644 --- a/cookbook/integration/integration.py +++ b/cookbook/integration/integration.py @@ -1,7 +1,3 @@ -import os -import tempfile - - class Integration: request = None @@ -11,7 +7,7 @@ class Integration: def do_export(self, recipes): raise Exception('Method not implemented in storage integration') - def do_import(self): + def do_import(self, files): raise Exception('Method not implemented in storage integration') def get_recipe(self, string): diff --git a/cookbook/templates/test.html b/cookbook/templates/test.html index d133f0eaf..d36a8adc9 100644 --- a/cookbook/templates/test.html +++ b/cookbook/templates/test.html @@ -14,7 +14,7 @@

{% trans 'Import' %}

-
+ {% csrf_token %} {{ form|crispy }}