WIP api stuff
This commit is contained in:
parent
d18a330135
commit
d012385088
@ -8,6 +8,7 @@ from django.db.models import Q
|
|||||||
from django.utils.translation import gettext as _
|
from django.utils.translation import gettext as _
|
||||||
from django.http import HttpResponseRedirect
|
from django.http import HttpResponseRedirect
|
||||||
from django.urls import reverse_lazy, reverse
|
from django.urls import reverse_lazy, reverse
|
||||||
|
from rest_framework import permissions
|
||||||
|
|
||||||
from cookbook.models import ShareLink
|
from cookbook.models import ShareLink
|
||||||
|
|
||||||
@ -73,8 +74,27 @@ class OwnerRequiredMixin(object):
|
|||||||
|
|
||||||
|
|
||||||
def share_link_valid(recipe, share):
|
def share_link_valid(recipe, share):
|
||||||
print(share, recipe)
|
"""
|
||||||
|
Verifies if a share uuid is valid for a given recipe
|
||||||
|
"""
|
||||||
try:
|
try:
|
||||||
return True if ShareLink.objects.filter(recipe=recipe, uuid=share).exists() else False
|
return True if ShareLink.objects.filter(recipe=recipe, uuid=share).exists() else False
|
||||||
except ValidationError:
|
except ValidationError:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
class DRFOwnerPermissions(permissions.BasePermission):
|
||||||
|
"""
|
||||||
|
Custom permission class for django rest framework views
|
||||||
|
verifies user has ownership over object
|
||||||
|
(either user or created_by or user is request user)
|
||||||
|
"""
|
||||||
|
|
||||||
|
def has_object_permission(self, request, view, obj):
|
||||||
|
if not request.user.is_authenticated:
|
||||||
|
return False
|
||||||
|
if owner := getattr(obj, 'created_by', None):
|
||||||
|
return owner == request.user
|
||||||
|
if owner := getattr(obj, 'user', None):
|
||||||
|
return owner == request.user
|
||||||
|
return False
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
|
|
||||||
from cookbook.models import MealPlan, MealType, Recipe, ViewLog
|
from cookbook.models import MealPlan, MealType, Recipe, ViewLog, UserPreference, Storage, Sync, SyncLog, Keyword, Ingredient, Unit, RecipeIngredient, Comment, RecipeImport, RecipeBook, RecipeBookEntry, ShareLink, CookLog
|
||||||
from cookbook.templatetags.custom_tags import markdown
|
from cookbook.templatetags.custom_tags import markdown
|
||||||
|
|
||||||
|
|
||||||
@ -11,6 +11,90 @@ class UserNameSerializer(serializers.ModelSerializer):
|
|||||||
fields = ('id', 'username', 'first_name', 'last_name')
|
fields = ('id', 'username', 'first_name', 'last_name')
|
||||||
|
|
||||||
|
|
||||||
|
class UserPreferenceSerializer(serializers.ModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = UserPreference
|
||||||
|
fields = '__all__'
|
||||||
|
|
||||||
|
|
||||||
|
class StorageSerializer(serializers.ModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = Storage
|
||||||
|
fields = '__all__'
|
||||||
|
|
||||||
|
|
||||||
|
class SyncSerializer(serializers.ModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = Sync
|
||||||
|
fields = '__all__'
|
||||||
|
|
||||||
|
|
||||||
|
class SyncLogSerializer(serializers.ModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = SyncLog
|
||||||
|
fields = '__all__'
|
||||||
|
|
||||||
|
|
||||||
|
class KeywordSerializer(serializers.ModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = Keyword
|
||||||
|
fields = '__all__'
|
||||||
|
|
||||||
|
|
||||||
|
class RecipeSerializer(serializers.ModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = Recipe
|
||||||
|
fields = '__all__'
|
||||||
|
|
||||||
|
|
||||||
|
class UnitSerializer(serializers.ModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = Unit
|
||||||
|
fields = '__all__'
|
||||||
|
|
||||||
|
|
||||||
|
class IngredientSerializer(serializers.ModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = Ingredient
|
||||||
|
fields = '__all__'
|
||||||
|
|
||||||
|
|
||||||
|
class RecipeIngredientSerializer(serializers.ModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = RecipeIngredient
|
||||||
|
fields = '__all__'
|
||||||
|
|
||||||
|
|
||||||
|
class CommentSerializer(serializers.ModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = Comment
|
||||||
|
fields = '__all__'
|
||||||
|
|
||||||
|
|
||||||
|
class RecipeImportSerializer(serializers.ModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = RecipeImport
|
||||||
|
fields = '__all__'
|
||||||
|
|
||||||
|
|
||||||
|
class RecipeBookSerializer(serializers.ModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = RecipeBook
|
||||||
|
fields = '__all__'
|
||||||
|
|
||||||
|
|
||||||
|
class RecipeBookEntrySerializer(serializers.ModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = RecipeBookEntry
|
||||||
|
fields = '__all__'
|
||||||
|
|
||||||
|
|
||||||
|
class MealTypeSerializer(serializers.ModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = MealType
|
||||||
|
fields = '__all__'
|
||||||
|
|
||||||
|
|
||||||
class MealPlanSerializer(serializers.ModelSerializer):
|
class MealPlanSerializer(serializers.ModelSerializer):
|
||||||
recipe_name = serializers.ReadOnlyField(source='recipe.name')
|
recipe_name = serializers.ReadOnlyField(source='recipe.name')
|
||||||
meal_type_name = serializers.ReadOnlyField(source='meal_type.name')
|
meal_type_name = serializers.ReadOnlyField(source='meal_type.name')
|
||||||
@ -24,15 +108,15 @@ class MealPlanSerializer(serializers.ModelSerializer):
|
|||||||
fields = ('id', 'title', 'recipe', 'note', 'note_markdown', 'date', 'meal_type', 'created_by', 'shared', 'recipe_name', 'meal_type_name')
|
fields = ('id', 'title', 'recipe', 'note', 'note_markdown', 'date', 'meal_type', 'created_by', 'shared', 'recipe_name', 'meal_type_name')
|
||||||
|
|
||||||
|
|
||||||
class MealTypeSerializer(serializers.ModelSerializer):
|
class ShareLinkSerializer(serializers.ModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = MealType
|
model = ShareLink
|
||||||
fields = '__all__'
|
fields = '__all__'
|
||||||
|
|
||||||
|
|
||||||
class RecipeSerializer(serializers.ModelSerializer):
|
class CookLogSerializer(serializers.ModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Recipe
|
model = CookLog
|
||||||
fields = '__all__'
|
fields = '__all__'
|
||||||
|
|
||||||
|
|
||||||
|
@ -9,6 +9,7 @@ from cookbook.views import api, import_export
|
|||||||
from cookbook.helper import dal
|
from cookbook.helper import dal
|
||||||
|
|
||||||
router = routers.DefaultRouter()
|
router = routers.DefaultRouter()
|
||||||
|
#router.register(r'user-preference', api.UserPreferenceViewSet)
|
||||||
router.register(r'recipe', api.RecipeViewSet)
|
router.register(r'recipe', api.RecipeViewSet)
|
||||||
router.register(r'meal-plan', api.MealPlanViewSet)
|
router.register(r'meal-plan', api.MealPlanViewSet)
|
||||||
router.register(r'meal-type', api.MealTypeViewSet)
|
router.register(r'meal-type', api.MealTypeViewSet)
|
||||||
|
@ -13,12 +13,13 @@ from django.utils.translation import gettext as _
|
|||||||
from icalendar import Calendar, Event
|
from icalendar import Calendar, Event
|
||||||
from rest_framework import viewsets, permissions
|
from rest_framework import viewsets, permissions
|
||||||
from rest_framework.exceptions import APIException
|
from rest_framework.exceptions import APIException
|
||||||
|
from rest_framework.mixins import RetrieveModelMixin, UpdateModelMixin
|
||||||
|
|
||||||
from cookbook.helper.permission_helper import group_required
|
from cookbook.helper.permission_helper import group_required, DRFOwnerPermissions
|
||||||
from cookbook.models import Recipe, Sync, Storage, CookLog, MealPlan, MealType, ViewLog
|
from cookbook.models import Recipe, Sync, Storage, CookLog, MealPlan, MealType, ViewLog, UserPreference
|
||||||
from cookbook.provider.dropbox import Dropbox
|
from cookbook.provider.dropbox import Dropbox
|
||||||
from cookbook.provider.nextcloud import Nextcloud
|
from cookbook.provider.nextcloud import Nextcloud
|
||||||
from cookbook.serializer import MealPlanSerializer, MealTypeSerializer, RecipeSerializer, ViewLogSerializer, UserNameSerializer
|
from cookbook.serializer import MealPlanSerializer, MealTypeSerializer, RecipeSerializer, ViewLogSerializer, UserNameSerializer, UserPreferenceSerializer
|
||||||
|
|
||||||
|
|
||||||
class UserNameViewSet(viewsets.ModelViewSet):
|
class UserNameViewSet(viewsets.ModelViewSet):
|
||||||
@ -30,7 +31,7 @@ class UserNameViewSet(viewsets.ModelViewSet):
|
|||||||
queryset = User.objects.all()
|
queryset = User.objects.all()
|
||||||
serializer_class = UserNameSerializer
|
serializer_class = UserNameSerializer
|
||||||
permission_classes = [permissions.IsAuthenticated]
|
permission_classes = [permissions.IsAuthenticated]
|
||||||
http_method_names = ['get', ]
|
http_method_names = ['get']
|
||||||
|
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
queryset = User.objects.all()
|
queryset = User.objects.all()
|
||||||
@ -44,6 +45,18 @@ class UserNameViewSet(viewsets.ModelViewSet):
|
|||||||
return queryset
|
return queryset
|
||||||
|
|
||||||
|
|
||||||
|
class UserPreferenceViewSet(RetrieveModelMixin, UpdateModelMixin, viewsets.GenericViewSet):
|
||||||
|
"""
|
||||||
|
Update user preference settings
|
||||||
|
"""
|
||||||
|
queryset = UserPreference.objects.all()
|
||||||
|
serializer_class = UserPreferenceSerializer
|
||||||
|
permission_classes = [DRFOwnerPermissions, ]
|
||||||
|
# TODO disable create view
|
||||||
|
def get_queryset(self):
|
||||||
|
return UserPreference.objects.filter(user=self.request.user).all()
|
||||||
|
|
||||||
|
|
||||||
class MealPlanViewSet(viewsets.ModelViewSet):
|
class MealPlanViewSet(viewsets.ModelViewSet):
|
||||||
"""
|
"""
|
||||||
list:
|
list:
|
||||||
|
Loading…
Reference in New Issue
Block a user