def put(self, request, *args, **kwargs): base_dir = ".temp/" try: serializer = FileUploadSerializer(data=request.data) if serializer.is_valid(): file_name = request.data['name'] file_data = request.data['data']['data'] file_path = base_dir + file_name file = open(file_path, 'wb') file.write(bytes(bytearray(file_data))) file.close() file_storage = FileStorage() files = file_storage.get_file_list_in_specific_folder( request.user.email) remove_file = "" for f in files: if f['title'] == file_name: remove_file = f break if remove_file != "": print(remove_file['id']) file_storage.delete_file_by_id(remove_file['id']) file_storage.upload_file_with_path_in_specific_folder( file_path, request.user.email) if os.path.exists(file_path): os.remove(file_path) return JsonResponse({'message': request.data}, status=status.HTTP_200_OK) else: return JsonResponse( {'message': "Service unavaible"}, status=status.HTTP_503_SERVICE_UNAVAILABLE) else: return JsonResponse( {'message': "Service unavaible"}, status=status.HTTP_503_SERVICE_UNAVAILABLE) return JsonResponse({'message': "Request's data is wrong"}, status=status.HTTP_401_UNAUTHORIZED) except: JsonResponse( { 'error_message': "Somethings Error", 'errors_code': 400, }, status=status.HTTP_402_PAYMENT_REQUIRED)
def delete(self, request, *args, **kwargs): try: serializer = FileRemoveSerializer(data=request.data) if serializer.is_valid(): file_name = request.data['name'] file_storage = FileStorage() files = file_storage.get_file_list_in_specific_folder( request.user.email + "@" + "data") remove_file = "" for f in files: if f['title'] == file_name: remove_file = f break if remove_file != "": file_storage.delete_file_by_id(remove_file['id']) return JsonResponse({'message': request.data}, status=status.HTTP_200_OK) else: return JsonResponse( {'message': "Service unavaible"}, status=status.HTTP_503_SERVICE_UNAVAILABLE) return JsonResponse({'message': "Request's data is wrong"}, status=status.HTTP_401_UNAUTHORIZED) except: JsonResponse( { 'error_message': "Somethings Error", 'errors_code': 400, }, status=status.HTTP_402_PAYMENT_REQUIRED)
def post(self, request, *args, **kwargs): try: serializer = FileUploadSerializer(data=request.data) if serializer.is_valid(): file_name = request.data['name'] file_storage = FileStorage() files = file_storage.get_file_list_in_specific_folder( request.user.email) map_file_name = "map.json" map_file = "" for f in files: if f['title'] == map_file_name: map_file = f break if map_file == "": return JsonResponse( {'message': "Internal server error"}, status=status.HTTP_500_INTERNAL_SERVER_ERROR) map_file = json.loads(file_storage.get_content_file(map_file)) file_data = request.data['data']['data'] file_data = bytes(bytearray(file_data)) file_data = json.loads(file_data) if int(map_file['last_submission']) == int( file_data['last_submission']): return JsonResponse( { 'message': "There is nothing to sync", 'code': 0 }, status=status.HTTP_200_OK) files_1 = map_file['files'] files_2 = file_data['files'] file_add = list(set(files_2.keys()) - set(files_1.keys())) file_modified = [] file_delete = list(set(files_1.keys()) - set(files_2.keys())) intersec_files = list( set(files_2.keys()) & set(files_1.keys())) for file_id in intersec_files: if files_2[file_id]['check_sum'] != files_1[file_id][ 'check_sum']: file_modified.append(file_id) print(file_add) print(file_modified) print(file_delete) if int(map_file['last_submission']) < int( file_data['last_submission']): # sync to server return JsonResponse( { 'message': "Sync data to server", 'data': { 'upload': file_add, 'update': file_modified, 'remove': file_delete }, 'code': 1 }, status=status.HTTP_200_OK) elif int(map_file['last_submission']) > int( file_data['last_submission']): #sync to client return JsonResponse( { 'message': "Sync data to client", 'data': { 'upload': file_delete, 'update': file_modified, 'remove': file_add }, 'code': 2 }, status=status.HTTP_200_OK) return JsonResponse({'message': "Request's data is wrong"}, status=status.HTTP_200_OK) except: JsonResponse( { 'error_message': "Somethings Error", 'errors_code': 400, }, status=status.HTTP_400_BAD_REQUEST)