def get(self, request, *args, **kwargs): base_dir = ".temp/" file_id = kwargs['file_id'] file_id = '0' * (6 - len(str(file_id))) + str(file_id) file_storage = FileStorage() files = file_storage.get_files_by_title_in_specific_folder( "map.json", request.user.email) if len(files) == 0: return JsonResponse({'message': "Service unavaible"}, status=status.HTTP_503_SERVICE_UNAVAILABLE) map_json_content = json.loads(file_storage.get_content_file(files[0])) if file_id not in map_json_content['files']: return JsonResponse({'message': "File is not found"}, status=status.HTTP_400_BAD_REQUEST) file_name = map_json_content['files'][file_id]['name'] file_name = file_id + file_name + '.aes' files = file_storage.get_files_by_title(file_name) if len(files) == 0: return JsonResponse({'message': "Service unavaible"}, status=status.HTTP_503_SERVICE_UNAVAILABLE) file_storage.download_file(files[0], base_dir + file_name) f = open(base_dir + file_name, 'rb') data = f.read() f.close() return JsonResponse( { 'message': { 'type': 'Buffer', 'data': list(bytearray(data)), 'name': file_name, 'map_data': map_json_content['files'][file_id] } }, status=status.HTTP_200_OK)
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)