From faf458e8efd3a5fde35d5bc9a9ad1750c4eb2fcd Mon Sep 17 00:00:00 2001 From: smilerz Date: Wed, 14 Apr 2021 10:35:52 -0500 Subject: [PATCH] Squashed commit of the following: commit 707d862e01a7497a1f22879d314b865a35e0e85b Author: smilerz Date: Wed Apr 14 10:35:00 2021 -0500 works now commit 3942a445ed4f2ccec57de25eacd86ea4e4dd6bdb Author: smilerz Date: Wed Apr 14 10:25:24 2021 -0500 updated serializer and api commit 10dc746eb175c7f805a8a8ffa7ce49977a7ce97e Author: smilerz Date: Wed Apr 14 10:20:19 2021 -0500 fixed bookmarklet commit 9779104902d3be0258c95cd2eeebcba0d5d48892 Merge: bb8262c 0cb3928 Author: smilerz Date: Wed Apr 14 09:56:27 2021 -0500 Merge branch 'bookmarklet' into json_import commit 0cb39284bb835ffc6cfee3e4306aadc4a64a25be Author: smilerz Date: Wed Apr 14 09:42:53 2021 -0500 retrieve bookmarklet ID from get commit e89e0218de684d40b2e2bfb6ba833891206c828e Author: smilerz Date: Wed Apr 14 09:29:33 2021 -0500 Revert "fixed broken tab" This reverts commit ca0a1aede3cc6cb3912bc1fe30c0aa22e3f481a6. commit bb8262ccabb93c56fbc18c407d5a0653b8b3ca79 Merge: b1e73aa 35a7f62 Author: smilerz Date: Sun Apr 11 20:35:57 2021 -0500 Merge branch 'main_fork' into json_import --- cookbook/admin.py | 14 +- cookbook/filters.py | 2 + cookbook/helper/recipe_html_import.py | 15 +- cookbook/helper/recipe_url_import.py | 14 +- cookbook/helper/scrapers/scrapers.py | 2 +- cookbook/models.py | 2 +- cookbook/serializer.py | 5 +- cookbook/templates/import_json_working.html | 385 ------------------ cookbook/templates/url_import.html | 43 +- cookbook/templatetags/custom_tags.py | 3 - cookbook/tests/api/test_api_recipe.py | 3 +- cookbook/tests/other/_recipes.py | 6 +- .../tests/other/test_data/madamedessert.json | 10 +- cookbook/tests/other/test_url_import.py | 7 +- cookbook/views/api.py | 9 +- cookbook/views/data.py | 9 +- manage.py | 0 17 files changed, 84 insertions(+), 445 deletions(-) delete mode 100644 cookbook/templates/import_json_working.html mode change 100755 => 100644 manage.py diff --git a/cookbook/admin.py b/cookbook/admin.py index d4cc533dd..e9613ec0d 100644 --- a/cookbook/admin.py +++ b/cookbook/admin.py @@ -223,15 +223,15 @@ class ImportLogAdmin(admin.ModelAdmin): admin.site.register(ImportLog, ImportLogAdmin) -class BookmarkletImportAdmin(admin.ModelAdmin): - list_display = ('id', 'url', 'created_by', 'created_at',) - - -admin.site.register(BookmarkletImport, BookmarkletImportAdmin) - - class TelegramBotAdmin(admin.ModelAdmin): list_display = ('id', 'name', 'created_by',) admin.site.register(TelegramBot, TelegramBotAdmin) + + +class BookmarkletImportAdmin(admin.ModelAdmin): + list_display = ('id', 'url', 'created_by', 'created_at',) + + +admin.site.register(BookmarkletImport, BookmarkletImportAdmin) diff --git a/cookbook/filters.py b/cookbook/filters.py index a8f5976d0..b679a79fb 100644 --- a/cookbook/filters.py +++ b/cookbook/filters.py @@ -61,6 +61,7 @@ with scopes_disabled(): model = Recipe fields = ['name', 'keywords', 'foods', 'internal'] + class FoodFilter(django_filters.FilterSet): name = django_filters.CharFilter(lookup_expr='icontains') @@ -68,6 +69,7 @@ with scopes_disabled(): model = Food fields = ['name'] + class ShoppingListFilter(django_filters.FilterSet): def __init__(self, data=None, *args, **kwargs): diff --git a/cookbook/helper/recipe_html_import.py b/cookbook/helper/recipe_html_import.py index f8ce33273..469ebd220 100644 --- a/cookbook/helper/recipe_html_import.py +++ b/cookbook/helper/recipe_html_import.py @@ -73,9 +73,11 @@ def get_recipe_from_source(text, url, space): html_data = [] images = [] - # text = normalize_string(text) try: parse_list.append(remove_graph(json.loads(text))) + if not url and 'url' in parse_list[0]: + url = parse_list[0]['url'] + scrape = text_scraper("", url=url) except JSONDecodeError: soup = BeautifulSoup(text, "html.parser") @@ -83,6 +85,8 @@ def get_recipe_from_source(text, url, space): images += get_images_from_source(soup, url) for el in soup.find_all('script', type='application/ld+json'): el = remove_graph(el) + if not url and 'url' in el: + url = el['url'] if type(el) == list: for le in el: parse_list.append(le) @@ -95,15 +99,6 @@ def get_recipe_from_source(text, url, space): parse_list.append(le) elif type(el) == dict: parse_list.append(el) - - # if a url was not provided, try to find one in the first document - if not url and len(parse_list) > 0: - if 'url' in parse_list[0]: - url = parse_list[0]['url'] - - if type(text) == dict: - scrape = text_scraper("", url=url) - elif type(text) == str: scrape = text_scraper(text, url=url) recipe_json = helper.get_from_scraper(scrape, space) diff --git a/cookbook/helper/recipe_url_import.py b/cookbook/helper/recipe_url_import.py index 2d8482759..366068e75 100644 --- a/cookbook/helper/recipe_url_import.py +++ b/cookbook/helper/recipe_url_import.py @@ -39,9 +39,9 @@ def get_from_scraper(scrape, space): pass try: - recipe_json['image'] = scrape.image() - except AttributeError: - pass + recipe_json['image'] = parse_image(scrape.image()) or '' + except (AttributeError, TypeError): + recipe_json['image'] = '' keywords = [] try: @@ -282,11 +282,11 @@ def parse_keywords(keyword_json, space): # keywords as list for kw in keyword_json: kw = normalize_string(kw) - if k := Keyword.objects.filter(name=kw, space=space).first(): - if len(k) != 0: + if len(kw) != 0: + if k := Keyword.objects.filter(name=kw, space=space).first(): keywords.append({'id': str(k.id), 'text': str(k)}) - else: - keywords.append({'id': random.randrange(1111111, 9999999, 1), 'text': kw}) + else: + keywords.append({'id': random.randrange(1111111, 9999999, 1), 'text': kw}) return keywords diff --git a/cookbook/helper/scrapers/scrapers.py b/cookbook/helper/scrapers/scrapers.py index decf81642..5e2262abe 100644 --- a/cookbook/helper/scrapers/scrapers.py +++ b/cookbook/helper/scrapers/scrapers.py @@ -30,7 +30,7 @@ def text_scraper(text, url=None): url=None ): self.wild_mode = False - self.exception_handling = _exception_handling + self.exception_handling = None self.meta_http_equiv = False self.soup = BeautifulSoup(page_data, "html.parser") self.url = url diff --git a/cookbook/models.py b/cookbook/models.py index 1f98a9e4b..0c49e1b30 100644 --- a/cookbook/models.py +++ b/cookbook/models.py @@ -684,4 +684,4 @@ class BookmarkletImport(models.Model, PermissionModelMixin): created_by = models.ForeignKey(User, on_delete=models.CASCADE) objects = ScopedManager(space='space') - space = models.ForeignKey(Space, on_delete=models.CASCADE) \ No newline at end of file + space = models.ForeignKey(Space, on_delete=models.CASCADE) diff --git a/cookbook/serializer.py b/cookbook/serializer.py index 28625b189..11591f69c 100644 --- a/cookbook/serializer.py +++ b/cookbook/serializer.py @@ -14,8 +14,8 @@ from cookbook.models import (Comment, CookLog, Food, Ingredient, Keyword, RecipeBook, RecipeBookEntry, RecipeImport, ShareLink, ShoppingList, ShoppingListEntry, ShoppingListRecipe, Step, Storage, Sync, SyncLog, - Unit, UserPreference, ViewLog, SupermarketCategory, - Supermarket, SupermarketCategoryRelation, ImportLog, BookmarkletImport) + Unit, UserPreference, ViewLog, SupermarketCategory, Supermarket, + SupermarketCategoryRelation, ImportLog, BookmarkletImport) from cookbook.templatetags.custom_tags import markdown @@ -488,6 +488,7 @@ class BookmarkletImportSerializer(serializers.ModelSerializer): fields = ('id', 'url', 'html', 'created_by', 'created_at') read_only_fields = ('created_by', 'space') + # Export/Import Serializers class KeywordExportSerializer(KeywordSerializer): diff --git a/cookbook/templates/import_json_working.html b/cookbook/templates/import_json_working.html deleted file mode 100644 index 6c2d6fce8..000000000 --- a/cookbook/templates/import_json_working.html +++ /dev/null @@ -1,385 +0,0 @@ - -{% 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 %} -
-
-

{% trans 'Import From Source' %}

-
- -
- Simply paste a web page source or JSON document into this textarea and click import. -
- -
- -
- -
-
- -
- - -
- - - - -
- -
- -{% endblock %} - -{% block script %} - - - - -{% endblock %} \ No newline at end of file diff --git a/cookbook/templates/url_import.html b/cookbook/templates/url_import.html index 81cde3cdf..0c4222490 100644 --- a/cookbook/templates/url_import.html +++ b/cookbook/templates/url_import.html @@ -1,7 +1,6 @@ {% extends "base.html" %} {% load i18n %} {% load static %} -{% load custom_tags %} {% block title %}{% trans 'URL Import' %}{% endblock %} @@ -21,15 +20,9 @@ {% endblock %} {% block content %} +
-
-

{% trans 'Import' %}

- - {% trans 'Bookmark Me!' %} -
+

{% trans 'Import' %}