diff options
author | Sunil Shetye | 2025-01-24 17:39:13 +0530 |
---|---|---|
committer | Sunil Shetye | 2025-01-24 22:18:57 +0530 |
commit | aae8d4a7111a228907d96161fb8248b753517787 (patch) | |
tree | 4bac185aa0ae1bfa348ea7071dacc5d5622b1993 | |
parent | 3968120a63a3e31272ab175d2036608d31db0d94 (diff) | |
download | Common-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.py | 2 | ||||
-rw-r--r-- | blocks/saveAPI/models.py | 27 | ||||
-rw-r--r-- | blocks/saveAPI/serializers.py | 19 | ||||
-rw-r--r-- | blocks/saveAPI/urls.py | 4 | ||||
-rw-r--r-- | blocks/saveAPI/views.py | 144 |
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 |