summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSunil Shetye2025-01-24 17:39:13 +0530
committerSunil Shetye2025-01-24 22:18:57 +0530
commitaae8d4a7111a228907d96161fb8248b753517787 (patch)
tree4bac185aa0ae1bfa348ea7071dacc5d5622b1993
parent3968120a63a3e31272ab175d2036608d31db0d94 (diff)
downloadCommon-Interface-Project-aae8d4a7111a228907d96161fb8248b753517787.tar.gz
Common-Interface-Project-aae8d4a7111a228907d96161fb8248b753517787.tar.bz2
Common-Interface-Project-aae8d4a7111a228907d96161fb8248b753517787.zip
split GalleryView into GalleryListView and GalleryDetailView
simplify serializers remove shared from Gallery model add optional book_id parameter to GalleryListView
-rw-r--r--blocks/saveAPI/admin.py2
-rw-r--r--blocks/saveAPI/models.py27
-rw-r--r--blocks/saveAPI/serializers.py19
-rw-r--r--blocks/saveAPI/urls.py4
-rw-r--r--blocks/saveAPI/views.py144
5 files changed, 50 insertions, 146 deletions
diff --git a/blocks/saveAPI/admin.py b/blocks/saveAPI/admin.py
index 5d8937e5..dcf61ad4 100644
--- a/blocks/saveAPI/admin.py
+++ b/blocks/saveAPI/admin.py
@@ -13,7 +13,7 @@ class UserDiagrams(admin.ModelAdmin):
@admin.register(Gallery)
class GalleryDiagrams(admin.ModelAdmin):
- list_display = ('name', 'image_tag', 'description', 'shared')
+ list_display = ('name', 'image_tag', 'description')
list_filter = ('save_time',)
search_fields = ('name', 'description')
formfield_overrides = {
diff --git a/blocks/saveAPI/models.py b/blocks/saveAPI/models.py
index fb29bfe3..cc30d8df 100644
--- a/blocks/saveAPI/models.py
+++ b/blocks/saveAPI/models.py
@@ -31,42 +31,37 @@ class Book(models.Model):
def __str__(self):
return self.book_name
-
+
class StateSave(models.Model):
id = models.AutoField(primary_key=True)
- name = models.CharField(max_length=200, null=True)
+ save_id = models.UUIDField(default=uuid.uuid4)
+ name = models.CharField(max_length=100, default="Untitled")
description = models.CharField(max_length=400, null=True)
- save_time = models.DateTimeField(auto_now=True, db_index=True)
+ shared = models.BooleanField(default=False)
create_time = models.DateTimeField(auto_now_add=True)
- save_id = models.UUIDField(default=uuid.uuid4)
+ save_time = models.DateTimeField(auto_now=True, db_index=True)
+ owner = models.ForeignKey(get_user_model(), null=True, on_delete=models.CASCADE)
data_dump = models.TextField(null=False)
- shared = models.BooleanField(default=False)
- owner = models.ForeignKey(
- get_user_model(), null=True, on_delete=models.CASCADE)
base64_image = models.ImageField(
upload_to='simulation_images', storage=file_storage, null=True)
def save(self, *args, **kwargs):
super(StateSave, self).save(*args, **kwargs)
- # book = models.ForeignKey(Book, on_delete=models.CASCADE)
-
def __str__(self):
return self.name
class Gallery(models.Model):
id = models.AutoField(primary_key=True)
- save_id = models.CharField(unique=True, max_length=500, null=False)
- data_dump = models.TextField(null=False)
+ save_id = models.CharField(unique=True, max_length=50, null=False)
name = models.CharField(max_length=100, default="Untitled")
- description = models.CharField(max_length=1000)
- media = models.ImageField(
- upload_to='simulation_images', storage=media, null=True)
- shared = models.BooleanField(default=True)
+ description = models.CharField(max_length=400, null=True)
save_time = models.DateTimeField(auto_now=True)
book = models.ForeignKey(Book, related_name='examples', on_delete=models.CASCADE, null=True)
+ data_dump = models.TextField(null=False)
+ media = models.CharField(max_length=100, null=False)
# For Django Admin Panel
def image_tag(self):
@@ -76,8 +71,6 @@ class Gallery(models.Model):
else:
return 'No Image Found'
image_tag.short_description = 'Image'
-
def __str__(self):
return self.name
-
diff --git a/blocks/saveAPI/serializers.py b/blocks/saveAPI/serializers.py
index 6d3184d7..211cddc3 100644
--- a/blocks/saveAPI/serializers.py
+++ b/blocks/saveAPI/serializers.py
@@ -62,18 +62,26 @@ class SaveListSerializer(serializers.ModelSerializer):
)
-class GallerySerializer(serializers.ModelSerializer):
- media = Base64ImageField(max_length=None, use_url=True)
-
+class GalleryListSerializer(serializers.ModelSerializer):
class Meta:
model = Gallery
fields = ('save_id',
- 'data_dump',
'name',
'description',
+ 'book_id',
'media',
- 'shared',
+ )
+
+
+class GalleryDetailSerializer(serializers.ModelSerializer):
+ class Meta:
+ model = Gallery
+ fields = ('save_id',
+ 'name',
+ 'description',
'book_id',
+ 'data_dump',
+ 'media',
)
@@ -85,6 +93,7 @@ class BookCategorySerializer(serializers.ModelSerializer):
class BookSerializer(serializers.ModelSerializer):
example_count = serializers.IntegerField(read_only=True)
+
class Meta:
model = Book
fields = ['id', 'book_name', 'author_name', 'category', 'example_count']
diff --git a/blocks/saveAPI/urls.py b/blocks/saveAPI/urls.py
index 002bc90a..2703a714 100644
--- a/blocks/saveAPI/urls.py
+++ b/blocks/saveAPI/urls.py
@@ -13,11 +13,11 @@ urlpatterns = [
path('list', saveAPI_views.UserSavesView.as_view(),
name='listSaves'),
- path("gallery", saveAPI_views.GalleryView.as_view(),
+ path("gallery", saveAPI_views.GalleryListView.as_view(),
name="getGallery"),
path('gallery/<str:save_id>',
- saveAPI_views.GalleryFetchSaveDeleteView.as_view(),
+ saveAPI_views.GalleryDetailView.as_view(),
name='fetchGallerySchematic'),
path("diagram/<uuid:save_id>", saveAPI_views.FetchSaveDiagram.as_view(),
diff --git a/blocks/saveAPI/views.py b/blocks/saveAPI/views.py
index 048b88f2..8513e60b 100644
--- a/blocks/saveAPI/views.py
+++ b/blocks/saveAPI/views.py
@@ -8,10 +8,11 @@ from rest_framework.parsers import FormParser, JSONParser
from rest_framework.permissions import AllowAny, IsAuthenticated
from rest_framework.response import Response
from rest_framework.views import APIView
+from rest_framework.generics import ListAPIView, RetrieveAPIView
import traceback
import uuid
from .models import Gallery, StateSave, BookCategory, Book
-from .serializers import Base64ImageField, GallerySerializer, \
+from .serializers import Base64ImageField, GalleryListSerializer, GalleryDetailSerializer, \
SaveListSerializer, StateSaveSerializer, BookCategorySerializer, \
BookSerializer
@@ -354,135 +355,36 @@ class DeleteDiagram(APIView):
status=status.HTTP_404_NOT_FOUND)
-class GalleryView(APIView):
+class GalleryListView(ListAPIView):
permission_classes = (AllowAny,)
- parser_classes = (FormParser, JSONParser)
methods = ['GET']
+ serializer_class = GalleryListSerializer
- @swagger_auto_schema(responses={200: GallerySerializer})
- def get(self, request):
- galleryset = Gallery.objects.filter()
- try:
- serialized = GallerySerializer(galleryset, many=True)
- return Response(serialized.data)
- except Exception:
- return Response(status=status.HTTP_500_INTERNAL_SERVER_ERROR)
-
+ def get_queryset(self):
+ queryset = Gallery.objects.all()
+ book_id = self.request.query_params.get('book_id')
+ if book_id:
+ queryset = queryset.filter(book_id=book_id)
+ return queryset
-class GalleryFetchSaveDeleteView(APIView):
- """
- Returns Saved data for given save id,
- Only staff can add / delete it
- THIS WILL ESCAPE DOUBLE QUOTES
-
- """
- # permission_classes = (AllowAny,)
- parser_classes = (FormParser, JSONParser)
+class GalleryDetailView(RetrieveAPIView):
+ permission_classes = (AllowAny,)
methods = ['GET']
+ queryset = Gallery.objects.all()
+ serializer_class = GalleryDetailSerializer
+ lookup_field = 'save_id'
- def is_owner(self):
- if not (self.request.user and self.request.user.is_authenticated):
- return False
-
- # Checking user roles
- userRoles = self.request.user.groups.all()
- for userRole in userRoles:
- if userRole.customgroup and userRole.customgroup.is_type_staff:
- return True
-
- return False
-
- @swagger_auto_schema(responses={200: GallerySerializer})
- def get(self, request, save_id):
-
- try:
- saved_state = Gallery.objects.get(
- save_id=save_id)
- except Gallery.DoesNotExist:
- return Response({'error': 'Does not Exist'},
- status=status.HTTP_404_NOT_FOUND)
- try:
- serialized = GallerySerializer(
- saved_state, context={'request': request})
- data = {}
- data.update(serialized.data)
- return Response(data)
- except Exception:
- traceback.print_exc()
- return Response({'error': 'Not Able To Serialize'},
- status=status.HTTP_400_BAD_REQUEST)
- @swagger_auto_schema(responses={200: GallerySerializer})
- def post(self, request, save_id):
- if not self.is_owner():
- return Response({'error': 'Not the owner'},
- status=status.HTTP_401_UNAUTHORIZED)
- saved_state = Gallery()
- data = request.data
- if not (data['data_dump'] and data['media'] and data['save_id']):
- return Response({'error': 'not a valid POST request'},
- status=status.HTTP_406_NOT_ACCEPTABLE)
-
- # saves to gallery
- try:
- saved_state.save_id = data.get('save_id')
- saved_state.data_dump = data.get('data_dump')
- if 'shared' in data:
- saved_state.shared = bool(data['shared'])
- saved_state.name = data.get('name')
- saved_state.description = data.get('description')
- if 'media' in data:
- img = Base64ImageField(max_length=None, use_url=True)
- filename, content = img.update(data['media'])
- saved_state.media.save(filename, content)
- saved_state.save()
- serialized = GallerySerializer(saved_state)
- return Response(serialized.data)
- except Exception:
- return Response(status=status.HTTP_500_INTERNAL_SERVER_ERROR)
-
- @swagger_auto_schema(responses={200: GallerySerializer})
- def delete(self, request, save_id):
- try:
- if not self.is_owner():
- return Response({'error': 'Not the owner'},
- status=status.HTTP_401_UNAUTHORIZED)
- # Deltes from gallery
- try:
- saved_state = Gallery.objects.get(save_id=save_id)
- except Gallery.DoesNotExist:
- return Response({'error': 'Does not Exist'},
- status=status.HTTP_404_NOT_FOUND)
- saved_state.delete()
- return Response({'done': True})
- except Exception:
- return Response(status=status.HTTP_500_INTERNAL_SERVER_ERROR)
-
-
-class BookCategoryView(APIView):
+class BookCategoryView(ListAPIView):
permission_classes = (AllowAny,)
-
- @swagger_auto_schema(responses={200: BookCategorySerializer(many=True)})
- def get(self, request):
- categories = BookCategory.objects.all()
- try:
- serialized = BookCategorySerializer(categories, many=True)
- return Response(serialized.data, status=status.HTTP_200_OK)
- except Exception as e:
- return Response({'error': str(e)}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
+ methods = ['GET']
+ queryset = BookCategory.objects.all()
+ serializer_class = BookCategorySerializer
-class BookView(APIView):
+class BookView(ListAPIView):
permission_classes = (AllowAny,)
-
- @swagger_auto_schema(responses={200: BookSerializer(many=True)})
- def get(self, request):
- try:
- books = Book.objects.annotate(example_count=Count('examples')).order_by('book_name')
- serializer = BookSerializer(books, many=True)
-
- return Response(serializer.data, status=status.HTTP_200_OK)
-
- except Exception as e:
- return Response({'error': str(e)}, status=status.HTTP_500_INTERNAL_SERVER_ERROR) \ No newline at end of file
+ methods = ['GET']
+ queryset = Book.objects.annotate(example_count=Count('examples')).order_by('book_name', 'author_name')
+ serializer_class = BookSerializer