added bookmarklet model and api
This commit is contained in:
parent
f80c44bca3
commit
9a62b6e4e7
@ -7,7 +7,8 @@ from .models import (Comment, CookLog, Food, Ingredient, InviteLink, Keyword,
|
|||||||
RecipeBook, RecipeBookEntry, RecipeImport, ShareLink,
|
RecipeBook, RecipeBookEntry, RecipeImport, ShareLink,
|
||||||
ShoppingList, ShoppingListEntry, ShoppingListRecipe,
|
ShoppingList, ShoppingListEntry, ShoppingListRecipe,
|
||||||
Space, Step, Storage, Sync, SyncLog, Unit, UserPreference,
|
Space, Step, Storage, Sync, SyncLog, Unit, UserPreference,
|
||||||
ViewLog, Supermarket, SupermarketCategory, SupermarketCategoryRelation, ImportLog, TelegramBot)
|
ViewLog, Supermarket, SupermarketCategory, SupermarketCategoryRelation,
|
||||||
|
ImportLog, TelegramBot, BookmarkletImport)
|
||||||
|
|
||||||
|
|
||||||
class CustomUserAdmin(UserAdmin):
|
class CustomUserAdmin(UserAdmin):
|
||||||
@ -222,6 +223,12 @@ class ImportLogAdmin(admin.ModelAdmin):
|
|||||||
admin.site.register(ImportLog, ImportLogAdmin)
|
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):
|
class TelegramBotAdmin(admin.ModelAdmin):
|
||||||
list_display = ('id', 'name', 'created_by',)
|
list_display = ('id', 'name', 'created_by',)
|
||||||
|
|
||||||
|
29
cookbook/migrations/0117_bookmarkletimport.py
Normal file
29
cookbook/migrations/0117_bookmarkletimport.py
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
# Generated by Django 3.1.7 on 2021-03-26 17:42
|
||||||
|
|
||||||
|
import cookbook.models
|
||||||
|
from django.conf import settings
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||||
|
('cookbook', '0116_auto_20210319_0012'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='BookmarkletImport',
|
||||||
|
fields=[
|
||||||
|
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
|
('html', models.TextField()),
|
||||||
|
('url', models.CharField(blank=True, max_length=128, null=True)),
|
||||||
|
('created_at', models.DateTimeField(auto_now_add=True)),
|
||||||
|
('created_by', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
|
||||||
|
('space', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='cookbook.space')),
|
||||||
|
],
|
||||||
|
bases=(models.Model, cookbook.models.PermissionModelMixin),
|
||||||
|
),
|
||||||
|
]
|
@ -671,3 +671,13 @@ class ImportLog(models.Model, PermissionModelMixin):
|
|||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return f"{self.created_at}:{self.type}"
|
return f"{self.created_at}:{self.type}"
|
||||||
|
|
||||||
|
|
||||||
|
class BookmarkletImport(models.Model, PermissionModelMixin):
|
||||||
|
html = models.TextField()
|
||||||
|
url = models.CharField(max_length=128, null=True, blank=True)
|
||||||
|
created_at = models.DateTimeField(auto_now_add=True)
|
||||||
|
created_by = models.ForeignKey(User, on_delete=models.CASCADE)
|
||||||
|
|
||||||
|
objects = ScopedManager(space='space')
|
||||||
|
space = models.ForeignKey(Space, on_delete=models.CASCADE)
|
@ -14,7 +14,8 @@ from cookbook.models import (Comment, CookLog, Food, Ingredient, Keyword,
|
|||||||
RecipeBook, RecipeBookEntry, RecipeImport,
|
RecipeBook, RecipeBookEntry, RecipeImport,
|
||||||
ShareLink, ShoppingList, ShoppingListEntry,
|
ShareLink, ShoppingList, ShoppingListEntry,
|
||||||
ShoppingListRecipe, Step, Storage, Sync, SyncLog,
|
ShoppingListRecipe, Step, Storage, Sync, SyncLog,
|
||||||
Unit, UserPreference, ViewLog, SupermarketCategory, Supermarket, SupermarketCategoryRelation, ImportLog)
|
Unit, UserPreference, ViewLog, SupermarketCategory,
|
||||||
|
Supermarket, SupermarketCategoryRelation, ImportLog, BookmarkletImport)
|
||||||
from cookbook.templatetags.custom_tags import markdown
|
from cookbook.templatetags.custom_tags import markdown
|
||||||
|
|
||||||
|
|
||||||
@ -466,6 +467,17 @@ class ImportLogSerializer(serializers.ModelSerializer):
|
|||||||
read_only_fields = ('created_by',)
|
read_only_fields = ('created_by',)
|
||||||
|
|
||||||
|
|
||||||
|
class BookmarkletImportSerializer(serializers.ModelSerializer):
|
||||||
|
def create(self, validated_data):
|
||||||
|
validated_data['created_by'] = self.context['request'].user
|
||||||
|
validated_data['space'] = self.context['request'].space
|
||||||
|
return super().create(validated_data)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = BookmarkletImport
|
||||||
|
fields = ('id', 'url', 'html', 'created_by', 'created_at')
|
||||||
|
read_only_fields = ('created_by',)
|
||||||
|
|
||||||
# Export/Import Serializers
|
# Export/Import Serializers
|
||||||
|
|
||||||
class KeywordExportSerializer(KeywordSerializer):
|
class KeywordExportSerializer(KeywordSerializer):
|
||||||
|
@ -36,6 +36,7 @@ router.register(r'recipe-book', api.RecipeBookViewSet)
|
|||||||
router.register(r'recipe-book-entry', api.RecipeBookEntryViewSet)
|
router.register(r'recipe-book-entry', api.RecipeBookEntryViewSet)
|
||||||
router.register(r'supermarket', api.SupermarketViewSet)
|
router.register(r'supermarket', api.SupermarketViewSet)
|
||||||
router.register(r'import-log', api.ImportLogViewSet)
|
router.register(r'import-log', api.ImportLogViewSet)
|
||||||
|
router.register(r'bookmarklet-import', api.BookmarkletImportViewSet)
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path('', views.index, name='index'),
|
path('', views.index, name='index'),
|
||||||
@ -96,7 +97,6 @@ urlpatterns = [
|
|||||||
path('api/recipe-from-source/', api.recipe_from_source, name='api_recipe_from_source'),
|
path('api/recipe-from-source/', api.recipe_from_source, name='api_recipe_from_source'),
|
||||||
path('api/backup/', api.get_backup, name='api_backup'),
|
path('api/backup/', api.get_backup, name='api_backup'),
|
||||||
path('api/ingredient-from-string/', api.ingredient_from_string, name='api_ingredient_from_string'),
|
path('api/ingredient-from-string/', api.ingredient_from_string, name='api_ingredient_from_string'),
|
||||||
path('api/bookmarklet/', api.bookmarklet, name='api_bookmarklet'),
|
|
||||||
|
|
||||||
path('dal/keyword/', dal.KeywordAutocomplete.as_view(), name='dal_keyword'),
|
path('dal/keyword/', dal.KeywordAutocomplete.as_view(), name='dal_keyword'),
|
||||||
path('dal/food/', dal.IngredientsAutocomplete.as_view(), name='dal_food'),
|
path('dal/food/', dal.IngredientsAutocomplete.as_view(), name='dal_food'),
|
||||||
|
@ -36,7 +36,7 @@ from cookbook.models import (CookLog, Food, Ingredient, Keyword, MealPlan,
|
|||||||
MealType, Recipe, RecipeBook, ShoppingList,
|
MealType, Recipe, RecipeBook, ShoppingList,
|
||||||
ShoppingListEntry, ShoppingListRecipe, Step,
|
ShoppingListEntry, ShoppingListRecipe, Step,
|
||||||
Storage, Sync, SyncLog, Unit, UserPreference,
|
Storage, Sync, SyncLog, Unit, UserPreference,
|
||||||
ViewLog, RecipeBookEntry, Supermarket, ImportLog)
|
ViewLog, RecipeBookEntry, Supermarket, ImportLog, BookmarkletImport)
|
||||||
from cookbook.provider.dropbox import Dropbox
|
from cookbook.provider.dropbox import Dropbox
|
||||||
from cookbook.provider.local import Local
|
from cookbook.provider.local import Local
|
||||||
from cookbook.provider.nextcloud import Nextcloud
|
from cookbook.provider.nextcloud import Nextcloud
|
||||||
@ -51,7 +51,9 @@ from cookbook.serializer import (FoodSerializer, IngredientSerializer,
|
|||||||
StorageSerializer, SyncLogSerializer,
|
StorageSerializer, SyncLogSerializer,
|
||||||
SyncSerializer, UnitSerializer,
|
SyncSerializer, UnitSerializer,
|
||||||
UserNameSerializer, UserPreferenceSerializer,
|
UserNameSerializer, UserPreferenceSerializer,
|
||||||
ViewLogSerializer, CookLogSerializer, RecipeBookEntrySerializer, RecipeOverviewSerializer, SupermarketSerializer, ImportLogSerializer)
|
ViewLogSerializer, CookLogSerializer,
|
||||||
|
RecipeBookEntrySerializer, RecipeOverviewSerializer,
|
||||||
|
SupermarketSerializer, ImportLogSerializer, BookmarkletImportSerializer)
|
||||||
from recipes.settings import DEMO
|
from recipes.settings import DEMO
|
||||||
from recipe_scrapers import scrape_me, WebsiteNotImplementedError, NoSchemaFoundInWildMode
|
from recipe_scrapers import scrape_me, WebsiteNotImplementedError, NoSchemaFoundInWildMode
|
||||||
|
|
||||||
@ -412,6 +414,15 @@ class ImportLogViewSet(viewsets.ModelViewSet):
|
|||||||
return self.queryset.filter(space=self.request.space).all()
|
return self.queryset.filter(space=self.request.space).all()
|
||||||
|
|
||||||
|
|
||||||
|
class BookmarkletImportViewSet(viewsets.ModelViewSet):
|
||||||
|
queryset = BookmarkletImport.objects
|
||||||
|
serializer_class = BookmarkletImportSerializer
|
||||||
|
permission_classes = [CustomIsUser]
|
||||||
|
|
||||||
|
def get_queryset(self):
|
||||||
|
return self.queryset.filter(space=self.request.space).all()
|
||||||
|
|
||||||
|
|
||||||
# -------------- non django rest api views --------------------
|
# -------------- non django rest api views --------------------
|
||||||
|
|
||||||
def get_recipe_provider(recipe):
|
def get_recipe_provider(recipe):
|
||||||
@ -657,13 +668,3 @@ def ingredient_from_string(request):
|
|||||||
},
|
},
|
||||||
status=200
|
status=200
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@group_required('user')
|
|
||||||
@csrf_exempt
|
|
||||||
def bookmarklet(request):
|
|
||||||
if request.method == "POST":
|
|
||||||
if 'recipe' in request.POST:
|
|
||||||
recipe_json, recipe_tree, recipe_html, images = get_recipe_from_source(request.POST['recipe'], request.POST['url'], request.space)
|
|
||||||
return render(request, 'url_import.html', {'recipe_json': recipe_json, 'recipe_tree': recipe_tree, 'recipe_html': recipe_html, 'preview': 'true'})
|
|
||||||
return HttpResponseRedirect(reverse('view_search'))
|
|
||||||
|
Loading…
Reference in New Issue
Block a user