diff --git a/safeshare/safeshare_app/migrations/0001_initial.py b/safeshare/safeshare_app/migrations/0001_initial.py deleted file mode 100644 index ed1ce70..0000000 --- a/safeshare/safeshare_app/migrations/0001_initial.py +++ /dev/null @@ -1,22 +0,0 @@ -# Generated by Django 4.2.5 on 2023-10-23 03:37 - -from django.db import migrations, models -import uuid - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ] - - operations = [ - migrations.CreateModel( - name='File', - fields=[ - ('key', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), - ('value', models.BinaryField()), - ], - ), - ] diff --git a/safeshare/safeshare_app/post_and_get_file.py b/safeshare/safeshare_app/post_and_get_file.py new file mode 100644 index 0000000..3d11dbd --- /dev/null +++ b/safeshare/safeshare_app/post_and_get_file.py @@ -0,0 +1,23 @@ +import requests +import json + +url = "http://127.0.0.1:8000/api/files/" +file = {'file': open('test.text', 'rb')} + +r = requests.post(url, files=file) + +# Print response message +print(json.dumps(r.json(), indent=4)) + +key = r.json()['key'] + +url = "http://127.0.0.1:8000/api/files/" + key + "/" +r = requests.get(url) + +file = r.json()['file'] +# Change file to bytes +file = bytes(file, 'utf-8') + +# Write response('file') to disk +with open('test2.text', 'wb') as f: + f.write(file) diff --git a/safeshare/safeshare_app/views/file.py b/safeshare/safeshare_app/views/file.py index 7cfb486..e1d336d 100644 --- a/safeshare/safeshare_app/views/file.py +++ b/safeshare/safeshare_app/views/file.py @@ -1,14 +1,9 @@ -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 +import redis +from django.conf import settings +from rest_framework.decorators import api_view +from rest_framework.response import Response redis_instance = redis.StrictRedis(host=settings.REDIS_HOST, port=settings.REDIS_PORT, db=0) @@ -17,27 +12,23 @@ redis_instance = redis.StrictRedis(host=settings.REDIS_HOST, @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'] + # Not supposed to enumerate all items, so return 405 + return Response({ + 'msg': 'Method not allowed' + }, status=405) + + if request.method == 'POST': + key = uuid.uuid4().hex + file = request.FILES['file'] + filename = 'file.txt' + + # Convert file to bytes + file = file.read() + redis_instance.set(key, file) - # 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}" + 'key': key, + 'msg': f"{key} successfully set to {filename}: {file}" } return Response(response, 201) @@ -50,38 +41,39 @@ def manage_item(request, *args, **kwargs): if value: response = { 'key': kwargs['key'], - 'value': value, + 'file': 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, + 'file': 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'], + # 'file': 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']) @@ -93,7 +85,7 @@ def manage_item(request, *args, **kwargs): else: response = { 'key': kwargs['key'], - 'value': None, + 'file': None, 'msg': 'Not found' } return Response(response, status=404)