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