diff --git a/cookbook/helper/recipe_raw_import.py b/cookbook/helper/recipe_raw_import.py new file mode 100644 index 000000000..07083843d --- /dev/null +++ b/cookbook/helper/recipe_raw_import.py @@ -0,0 +1,98 @@ + +# %% +import json + +from bs4 import BeautifulSoup +# from cookbook.helper.ingredient_parser import parse as parse_ingredient +from cookbook.helper import recipe_url_import as helper +from django.http import JsonResponse +from django.utils.dateparse import parse_duration + + +# %% + +# %% +def get_from_raw(raw_text): + def build_node(k, v): + if isinstance(v, dict): + node = { + 'name': k, + 'value': k, + 'children': get_children_dict(v) + } + elif isinstance(v, list): + node = { + 'name': k, + 'value': k, + 'children': get_children_list(v) + } + else: + node = { + 'name': k + ": " + str(v), + 'value': str(v) + } + return node + + def get_children_dict(children): + kid_list = [] + for k, v in children.items(): + kid_list.append(build_node(k, v)) + return kid_list + + def get_children_list(children): + kid_list = [] + for kid in children: + if type(kid) == list: + node = { + 'name': "unknown list", + 'value': "unknown list", + 'children': get_children_list(kid) + } + kid_list.append(node) + elif type(kid) == dict: + for k, v in kid.items(): + kid_list.append(build_node(k, v)) + else: + kid_list.append({ + 'name': kid, + 'value': kid + }) + return kid_list + + recipe_items = ['recipeIngredient', 'keywords', 'recipeInstructions', 'image', + 'cookTime', 'prepTime', 'servings', 'name'] + extra_items = ['recipeYield', 'title', 'recipeCategory', 'recipeCuisine'] + + soup = BeautifulSoup(raw_text, "html.parser") + recipe_json = {} + recipe_tree = [] + # first try finding ld+json as its most common + for ld in soup.find_all('script', type='application/ld+json'): + ld_json = helper.find_recipe_json(json.loads(ld.string), '') + for item in recipe_items: + if item in ld_json: + recipe_json[item] = ld_json[item] + recipe_items.remove(item) + del ld_json[item] + for k, v in ld_json.items(): + if isinstance(v, dict): + node = { + 'name': k, + 'value': k, + 'children': get_children_dict(v) + } + elif isinstance(v, list): + node = { + 'name': k, + 'value': k, + 'children': get_children_list(v) + } + else: + node = { + 'name': k + ": " + str(v), + 'value': str(v) + } + recipe_tree.append(node) + # TODO put recipe_tree and json_recipe in the JSON response + print(recipe_tree) + return recipe_json, recipe_tree diff --git a/cookbook/templates/import_json.html b/cookbook/templates/import_json.html new file mode 100644 index 000000000..e71e77d50 --- /dev/null +++ b/cookbook/templates/import_json.html @@ -0,0 +1,286 @@ +{% extends "base.html" %} +{% load crispy_forms_filters %} +{% load i18n %} +{% load static %} + +{% block title %}{% trans 'Import Recipe' %}{% endblock %} + +{% block extra_head %} + {% include 'include/vue_base.html' %} + + + + + +{% endblock %} + + +{% block content %} +
this is the recipe form +
+something terrible happened +
+ + +{% endblock %} + +{% block script %} + + + + +{% endblock %} \ No newline at end of file diff --git a/cookbook/templates/import_json_working.html b/cookbook/templates/import_json_working.html new file mode 100644 index 000000000..b1e2e2bda --- /dev/null +++ b/cookbook/templates/import_json_working.html @@ -0,0 +1,384 @@ +{% extends "base.html" %} +{% load crispy_forms_filters %} +{% load i18n %} +{% load static %} + +{% block title %}{% trans 'Import Recipe' %}{% endblock %} + +{% block extra_head %} + {% include 'include/vue_base.html' %} + + + + + +{% endblock %} + + +{% block content %} +this is the recipe form +
+something terrible happened +
+ + +{% endblock %} + +{% block script %} + + + + +{% endblock %} \ No newline at end of file diff --git a/cookbook/urls.py b/cookbook/urls.py index 925e8bfb1..a3dc663db 100644 --- a/cookbook/urls.py +++ b/cookbook/urls.py @@ -59,7 +59,7 @@ urlpatterns = [ path('test2/', views.test2, name='view_test2'), path('import/', import_export.import_recipe, name='view_import'), - path('import-response/