diff options
author | Sunil Shetye | 2025-03-20 11:33:16 +0530 |
---|---|---|
committer | Sunil Shetye | 2025-03-21 00:19:39 +0530 |
commit | ff40fb61e7c9b1664b08875cafc472aa6a8d95aa (patch) | |
tree | 6dc068c8696677dbe13a74b3d24bbd1726c77db7 | |
parent | 1b5595595d3ab58cdad40a19933468a357b91c67 (diff) | |
download | Common-Interface-Project-ff40fb61e7c9b1664b08875cafc472aa6a8d95aa.tar.gz Common-Interface-Project-ff40fb61e7c9b1664b08875cafc472aa6a8d95aa.tar.bz2 Common-Interface-Project-ff40fb61e7c9b1664b08875cafc472aa6a8d95aa.zip |
remove extra code
do not group by save_id
-rw-r--r-- | blocks/saveAPI/models.py | 4 | ||||
-rw-r--r-- | blocks/saveAPI/views.py | 245 |
2 files changed, 99 insertions, 150 deletions
diff --git a/blocks/saveAPI/models.py b/blocks/saveAPI/models.py index b03a3aee..bda10504 100644 --- a/blocks/saveAPI/models.py +++ b/blocks/saveAPI/models.py @@ -51,7 +51,7 @@ class StateSave(models.Model): super(StateSave, self).save(*args, **kwargs) def __str__(self): - return self.name + return f"{self.save_id.hex} - {self.name}" class Gallery(models.Model): @@ -81,4 +81,4 @@ class Gallery(models.Model): image_tag.short_description = 'Image' def __str__(self): - return self.name + return f"{self.save_id.hex} - {self.name}" diff --git a/blocks/saveAPI/views.py b/blocks/saveAPI/views.py index 6c94f7bc..cb3d920a 100644 --- a/blocks/saveAPI/views.py +++ b/blocks/saveAPI/views.py @@ -33,71 +33,28 @@ class StateSaveView(APIView): # parser_classes = (FormParser,) @swagger_auto_schema(request_body=StateSaveSerializer) - def post(self, request, *args, **kwargs): - print("Getting Saved State") - - logger.info('Got POST for state save ') + def post(self, request): + logger.info('Got POST for state save=%s', request.data.get('name')) try: - queryset = StateSave.objects.get( - save_id=request.data.get("save_id", None)) - serializer = StateSaveSerializer(data=request.data) - if serializer.is_valid(): - img = Base64ImageField(max_length=None, use_url=True) - filename, content = img.update(request.data['base64_image']) - queryset.data_dump = request.data.get("data_dump") - queryset.script_dump = request.data.get("script_dump") - queryset.save() - queryset.base64_image.save(filename, content) - return Response(data=serializer.data, - status=status.HTTP_200_OK) - else: - return Response(data=serializer.errors, - status=status.HTTP_400_BAD_REQUEST) - except StateSave.DoesNotExist: - try: - queryset = StateSave.objects.get( - save_id=request.data.get("save_id", None), - data_dump=request.data["data_dump"], - script_dump=request.data["script_dump"]) - serializer = StateSaveSerializer(data=request.data) - if serializer.is_valid(): - queryset.name = serializer.data["name"] - queryset.description = serializer.data["description"] - queryset.save() - response = serializer.data - response['duplicate'] = True - response['owner'] = queryset.owner.username - return Response(response) - return Response(serializer.errors, - status=status.HTTP_400_BAD_REQUEST) - except StateSave.DoesNotExist: - img = Base64ImageField(max_length=None, use_url=True) - filename, content = img.update(request.data['base64_image']) - try: - state_save = StateSave( - data_dump=request.data.get('data_dump'), - script_dump=request.data.get('script_dump'), - description=request.data.get('description'), - name=request.data.get('name'), - owner=request.user if request.user.is_authenticated else None, - shared=True, - ) - except Exception: - state_save = StateSave( - data_dump=request.data.get('data_dump'), - script_dump=request.data.get('script_dump'), - description=request.data.get('description'), - name=request.data.get('name'), - owner=request.user if request.user.is_authenticated else None, - ) - if request.data.get('save_id'): - state_save.save_id = request.data.get('save_id') - state_save.base64_image.save(filename, content) - try: - state_save.save() - return Response(StateSaveSerializer(state_save).data) - except Exception: - return Response(status=status.HTTP_400_BAD_REQUEST) + state_save = StateSave( + data_dump=request.data.get('data_dump'), + script_dump=request.data.get('script_dump'), + description=request.data.get('description'), + name=request.data.get('name'), + owner=request.user if request.user.is_authenticated else None, + shared=True, + ) + state_save.save() + + img = Base64ImageField(max_length=None, use_url=True) + filename, content = img.update(request.data['base64_image']) + state_save.base64_image.save(filename, content) + + logger.info('Saved state=%s', str(state_save)) + return Response(SaveListSerializer(state_save).data) + except Exception as e: + logger.error('Error saving state=%s', e) + return Response(status=status.HTTP_400_BAD_REQUEST) class CopyStateView(APIView): @@ -108,15 +65,15 @@ class CopyStateView(APIView): if isinstance(save_id, uuid.UUID): # Check for permissions and sharing settings here try: - saved_state = StateSave.objects.get( + state_save = StateSave.objects.get( save_id=save_id) except StateSave.DoesNotExist: return Response({'error': 'Does not Exist'}, status=status.HTTP_404_NOT_FOUND) - copy_state = StateSave(name=saved_state.name, - description=saved_state.description, - data_dump=saved_state.data_dump, - base64_image=saved_state.base64_image, + copy_state = StateSave(name=state_save.name, + description=state_save.description, + data_dump=state_save.data_dump, + base64_image=state_save.base64_image, owner=self.request.user) copy_state.save() return Response( @@ -136,43 +93,42 @@ class FetchSaveDiagram(APIView): @swagger_auto_schema(responses={200: StateSaveSerializer}) def get(self, request, save_id): + logger.info('Got GET for state save id=%s', save_id) - if isinstance(save_id, uuid.UUID): - # Check for permissions and sharing settings here - try: - saved_state = StateSave.objects.get( - save_id=save_id) - except StateSave.DoesNotExist: - return Response({'error': 'Does not Exist'}, - status=status.HTTP_404_NOT_FOUND) - # Verifies owner - if self.request.user != saved_state.owner and not saved_state.shared: - print("Here") - return Response({'error': 'not the owner and not shared'}, - status=status.HTTP_401_UNAUTHORIZED) - try: - serialized = StateSaveSerializer( - saved_state, context={'request': request}) - User = get_user_model() - try: - owner_name = User.objects.get( - id=serialized.data.get('owner')) - data = {} - data.update(serialized.data) - data['owner'] = owner_name.username - except User.DoesNotExist: - data = {} - data.update(serialized.data) - data['owner'] = None - return Response(data) - except Exception: - traceback.print_exc() - return Response({'error': 'Not Able To Serialize'}, - status=status.HTTP_400_BAD_REQUEST) - else: + if not isinstance(save_id, uuid.UUID): return Response({'error': 'Invalid sharing state'}, status=status.HTTP_400_BAD_REQUEST) + # Check for permissions and sharing settings here + try: + state_save = StateSave.objects.get(save_id=save_id) + except StateSave.DoesNotExist: + return Response({'error': 'Does not Exist'}, + status=status.HTTP_404_NOT_FOUND) + + # Verifies owner + if self.request.user != state_save.owner and not state_save.shared: + return Response({'error': 'not the owner and not shared'}, + status=status.HTTP_401_UNAUTHORIZED) + + try: + serialized = StateSaveSerializer(state_save, context={'request': request}) + data = {} + data.update(serialized.data) + + User = get_user_model() + try: + owner_name = User.objects.get(id=serialized.data.get('owner')) + data['owner'] = owner_name.username + except User.DoesNotExist: + data['owner'] = None + + return Response(data) + except Exception: + traceback.print_exc() + return Response({'error': 'Not Able To Serialize'}, + status=status.HTTP_400_BAD_REQUEST) + def update_state(self, state, data): # if data dump, shared, name, or description needs to be updated if 'data_dump' in data: @@ -188,51 +144,53 @@ class FetchSaveDiagram(APIView): # if thumbnail needs to be updated if 'base64_image' in data: img = Base64ImageField(max_length=None, use_url=True) - filename, content = img.update( - data['base64_image']) + filename, content = img.update(data['base64_image']) state.base64_image.save(filename, content) @swagger_auto_schema(responses={200: StateSaveSerializer}) def post(self, request, save_id): - if isinstance(save_id, uuid.UUID): - # Check for permissions and sharing settings here - try: - saved_state = StateSave.objects.get(save_id=save_id) - except StateSave.DoesNotExist: - return Response({'error': 'Does not Exist'}, - status=status.HTTP_404_NOT_FOUND) + logger.info('Got POST for state save id=%s', save_id) - # Verifies owner - if self.request.user != saved_state.owner: - return Response({'error': 'not the owner and not shared'}, - status=status.HTTP_401_UNAUTHORIZED) - - if not request.data['data_dump'] and not request.data['shared']: - return Response({'error': 'not a valid PUT request'}, - status=status.HTTP_406_NOT_ACCEPTABLE) - - try: - self.update_state(saved_state, request.data) - saved_state.save() - serialized = SaveListSerializer(saved_state) - return Response(serialized.data) - except Exception: - return Response(status=status.HTTP_500_INTERNAL_SERVER_ERROR) - else: + if not isinstance(save_id, uuid.UUID): return Response({'error': 'Invalid sharing state'}, status=status.HTTP_400_BAD_REQUEST) + # Check for permissions and sharing settings here + try: + state_save = StateSave.objects.get(save_id=save_id) + except StateSave.DoesNotExist: + return Response({'error': 'Does not Exist'}, + status=status.HTTP_404_NOT_FOUND) + + # Verifies owner + if self.request.user != state_save.owner: + return Response({'error': 'not the owner'}, + status=status.HTTP_401_UNAUTHORIZED) + + if not request.data['data_dump'] and not request.data['shared']: + return Response({'error': 'not a valid POST request'}, + status=status.HTTP_406_NOT_ACCEPTABLE) + + try: + self.update_state(state_save, request.data) + state_save.save() + logger.info('Saved state=%s', str(state_save)) + return Response(SaveListSerializer(state_save).data) + except Exception as e: + logger.error('Error saving state=%s', e) + return Response(status=status.HTTP_500_INTERNAL_SERVER_ERROR) + @swagger_auto_schema(responses={200: StateSaveSerializer}) def delete(self, request, save_id): if isinstance(save_id, uuid.UUID): try: - saved_state = StateSave.objects.get( + state_save = StateSave.objects.get( save_id=save_id, owner=self.request.user) except StateSave.DoesNotExist: return Response({'error': 'Does not Exist'}, status=status.HTTP_404_NOT_FOUND) - saved_state.delete() + state_save.delete() return Response({'done': True}) else: return Response({'error': 'Invalid sharing state'}, @@ -254,26 +212,26 @@ class StateShareView(APIView): if isinstance(save_id, uuid.UUID): # Check for permissions and sharing settings here try: - saved_state = StateSave.objects.get( + state_save = StateSave.objects.get( save_id=save_id) except StateSave.DoesNotExist: return Response({'error': 'Does not Exist'}, status=status.HTTP_404_NOT_FOUND) # Verifies owner - if self.request.user != saved_state.owner: + if self.request.user != state_save.owner: return Response({'error': 'Not the owner'}, status=status.HTTP_401_UNAUTHORIZED) try: if sharing == 'on': - saved_state.shared = True + state_save.shared = True elif sharing == 'off': - saved_state.shared = False + state_save.shared = False else: return Response({'error': 'Invalid sharing state'}, status=status.HTTP_400_BAD_REQUEST) - saved_state.save() - serialized = StateSaveSerializer(saved_state) + state_save.save() + serialized = StateSaveSerializer(state_save) return Response(serialized.data) except Exception: return Response(serialized.error) @@ -296,21 +254,12 @@ class UserSavesView(APIView): @swagger_auto_schema(responses={200: StateSaveSerializer}) def get(self, request): try: - # Subquery to get the latest save_time for each save_id - latest_save_time_subquery = StateSave.objects.filter( - save_id=OuterRef('save_id'), - owner=self.request.user - ).order_by('-save_time').values('save_time')[:1] - - # Annotate the main query with the latest save time - saved_state = StateSave.objects.filter( + state_save = StateSave.objects.filter( owner=self.request.user - ).annotate( - latest_save_time=Subquery(latest_save_time_subquery) - ).order_by('save_id', '-latest_save_time') + ).order_by('-save_time') # Serialize the data - serialized = StateSaveSerializer(saved_state, many=True) + serialized = StateSaveSerializer(state_save, many=True) return Response(serialized.data) except Exception: return Response(status=status.HTTP_500_INTERNAL_SERVER_ERROR) |