import json from django.conf import settings import redis import base64 import uuid from rest_framework.decorators import api_view from rest_framework import status from rest_framework.response import Response # from safeshare_app.models.file import File # from safeshare_app.serializers.file import FileSerializer redis_instance = redis.StrictRedis(host=settings.REDIS_HOST, port=settings.REDIS_PORT, db=0) @api_view(['GET', 'POST']) def manage_items(request, *args, **kwargs): if request.method == 'GET': items = {} count = 0 for key in redis_instance.keys("*"): items[key.decode("utf-8")] = redis_instance.get(key) count += 1 response = { 'count': count, 'msg': f"Found {count} items.", 'items': items } return Response(response, status=200) if request.method == 'POST': item = json.loads(request.body) key = uuid.uuid4().hex value = item['value'] # Modify value to binary object (base64) value = base64.b64encode(value.encode('utf-8')) redis_instance.set(key, value) response = { 'msg': f"{key} successfully set to {value}" } return Response(response, 201) @api_view(['GET', 'PUT', 'DELETE']) def manage_item(request, *args, **kwargs): if request.method == 'GET': if kwargs['key']: value = redis_instance.get(kwargs['key']) if value: response = { 'key': kwargs['key'], 'value': value, 'msg': 'success' } return Response(response, status=200) else: response = { 'key': kwargs['key'], 'value': None, 'msg': 'Not found' } return Response(response, status=404) elif request.method == 'PUT': if kwargs['key']: request_data = json.loads(request.body) new_value = request_data['value'] value = redis_instance.get(kwargs['key']) if value: redis_instance.set(kwargs['key'], new_value) response = { 'key': kwargs['key'], 'value': value, 'msg': f"Successfully updated {kwargs['key']}" } return Response(response, status=200) else: response = { 'key': kwargs['key'], 'value': None, 'msg': 'Not found' } return Response(response, status=404) elif request.method == 'DELETE': if kwargs['key']: result = redis_instance.delete(kwargs['key']) if result == 1: response = { 'msg': f"{kwargs['key']} successfully deleted" } return Response(response, status=404) else: response = { 'key': kwargs['key'], 'value': None, 'msg': 'Not found' } return Response(response, status=404) # class FileView(viewsets.ModelViewSet): # queryset = File.objects.all() # serializer_class = FileSerializer # permission_classes = () # # def get_queryset(self): # # Only allow GET with a key # key = self.request.query_params.get('key', None) # if key is not None: # # Remove / from end of key # if key[-1] == '/': # key = key[:-1] # # print(key) # data = self.queryset.filter(key=key) # return data # # else: # # Return nothing if no key is provided # return File.objects.none()