121 lines
3.8 KiB
Python
121 lines
3.8 KiB
Python
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()
|