From d30e5f90530f1d55f236c87aa279920269317047 Mon Sep 17 00:00:00 2001 From: "Phyks (Lucas Verney)" Date: Sun, 11 Mar 2018 16:49:05 +0100 Subject: [PATCH] Allow to edit a recipe --- cuizin/db.py | 29 +++++---- cuizin/js_src/api.js | 9 +++ cuizin/js_src/components/EditForm.vue | 88 +++++++++++++++++++++++---- cuizin/js_src/i18n/en/index.js | 7 +++ cuizin/js_src/i18n/fr/index.js | 7 +++ cuizin/js_src/router/index.js | 7 +++ cuizin/js_src/views/Edit.vue | 72 ++++++++++++++++++++++ cuizin/js_src/views/Home.vue | 18 ++++-- cuizin/js_src/views/Recipe.vue | 19 ++++-- cuizin/web.py | 26 ++++++++ 10 files changed, 245 insertions(+), 37 deletions(-) create mode 100644 cuizin/js_src/views/Edit.vue diff --git a/cuizin/db.py b/cuizin/db.py index 4f32cef..3a52af8 100644 --- a/cuizin/db.py +++ b/cuizin/db.py @@ -40,7 +40,7 @@ class Recipe(Model): # Author author = CharField(null=True) # Picture as a binary blob - picture = BlobField(null=True) + picture = TextField(null=True) # Short description short_description = TextField(null=True) # Number of persons as text, as it can be either "N persons" or "N parts" @@ -69,7 +69,18 @@ class Recipe(Model): setattr(self, field, value) # Download picture and save it as a blob if d.get('picture_url', None): - self.picture = requests.get(d['picture_url']).content + try: + picture = requests.get(d['picture_url']).content + picture_mime = ( + 'data:%s;base64' % magic.from_buffer(picture, + mime=True) + ) + self.picture = '%s,%s' % ( + picture_mime, + base64.b64encode(picture).decode('utf-8') + ) + except requests.exceptions.InvalidSchema: + self.picture = d['picture_url'] def update_from_weboob(self, weboob_obj): """ @@ -86,16 +97,4 @@ class Recipe(Model): """ Dict conversion function, for serialization in the API. """ - serialized = model_to_dict(self) - # Dump picture as a base64 string, compatible with HTML `src` attribute - # for images. - if serialized['picture']: - picture_mime = ( - 'data:%s;base64' % magic.from_buffer(serialized['picture'], - mime=True) - ) - serialized['picture'] = '%s,%s' % ( - picture_mime, - base64.b64encode(serialized['picture']).decode('utf-8') - ) - return serialized + return model_to_dict(self) diff --git a/cuizin/js_src/api.js b/cuizin/js_src/api.js index 049b20d..d37085b 100644 --- a/cuizin/js_src/api.js +++ b/cuizin/js_src/api.js @@ -66,6 +66,15 @@ export function postRecipeManually(recipe) { } +export function editRecipe(id, recipe) { + return fetch(`${constants.API_URL}api/v1/recipe/${id}`, { + method: 'POST', + body: JSON.stringify(recipe), + }) + .then(_postProcessRecipes); +} + + export function deleteRecipe(id) { return fetch(`${constants.API_URL}api/v1/recipe/${id}`, { method: 'DELETE', diff --git a/cuizin/js_src/components/EditForm.vue b/cuizin/js_src/components/EditForm.vue index 3dce31f..aea9f42 100644 --- a/cuizin/js_src/components/EditForm.vue +++ b/cuizin/js_src/components/EditForm.vue @@ -1,7 +1,11 @@