Пример #1
0
    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)
Пример #2
0
    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)
Пример #3
0
    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)