Example #1
0
    def download(self, request, *args, **kwargs):
        """
        Download the volume data.
        """
        volume = self.get_object()

        # Check whether project is corresponding to the user
        user = request.user
        if not check_member_in_project(volume.project, user):
            raise PermissionDenied(
                detail="User {} is not in project {}.".format(
                    user.username, volume.project.name))

        logger.info("User {} download the data of volume {}-{}.".format(
            request.user.username, volume.project.name, volume.name))

        # Copy file to local first
        volume_dir = get_volume_direction_on_nfs(volume)
        filename = get_upload_volume_filename(volume, request.user)
        client = NFSLocalClient()
        client.tar_and_copy_to_local(volume_dir, filename)

        response = StreamingHttpResponse(big_file_iterator(filename))
        response['Content-Type'] = 'application/octet-stream'
        response['Content-Disposition'] = 'attachment;filename="{}"'.format(
            os.path.basename(filename))

        return response
Example #2
0
    def download(self, request, *args, **kwargs):
        """
        Download the volume data.
        """
        volume = self.get_object()

        # Check whether project is corresponding to the user
        user = request.user
        if not check_member_in_project(volume.project, user):
            raise PermissionDenied(detail="User {} is not in project {}."
                .format(user.username, volume.project.name))

        logger.info("User {} download the data of volume {}-{}.".format(
            request.user.username, volume.project.name, volume.name))

        # Copy file to local first
        volume_dir = get_volume_direction_on_nfs(volume)
        filename = get_upload_volume_filename(volume, request.user)
        client = NFSLocalClient()
        client.tar_and_copy_to_local(volume_dir, filename)

        response = StreamingHttpResponse(big_file_iterator(filename))
        response['Content-Type'] = 'application/octet-stream'
        response['Content-Disposition'] = 'attachment;filename="{}"'.format(
            os.path.basename(filename))

        return response
Example #3
0
 def _remove_volume_dir_on_nfs(self):
     """
     Remove direction on nfs server.
     """
     client = NFSLocalClient()
     client.removedir(self.nfs_path)
     return True
Example #4
0
    def clear_volume(self, request, *args, **kwargs):
        """
        Clear volume.
        """
        volume = self.get_object()

        # Check whether project is corresponding to the user
        user = request.user
        if not check_member_in_project(volume.project, user):
            raise PermissionDenied(detail="User {} is not in project {}."
                .format(user.username, volume.project.name))

        logger.info("User {} clear volume {}-{}.".format(user.username,
            volume.project.name, volume.name))

        client = NFSLocalClient()
        volume_dir = get_volume_direction_on_nfs(volume)
        # Clear the dir
        client.removedir(volume_dir)
        client.makedir(volume_dir)

        return Response(status=status.HTTP_200_OK)
Example #5
0
 def _create_volume_dir_on_nfs(self):
     """
     Create direction on nfs server to store volume data.
     """
     client = NFSLocalClient()
     client.removedir(self.nfs_path)
     client.makedir(self.nfs_path)
     return True
Example #6
0
def upload_volume(request, *args, **kwargs):
    """
    User upload volume data, delete the original data first.
    """
    if not (request.user and request.user.is_authenticated()):
        raise PermissionDenied()

    user = request.user

    assert 'pid' in kwargs
    pid = kwargs['pid']

    assert 'pk' in kwargs
    id = kwargs['pk']
    volume = Volume.objects.get(project__id=pid, id=id)

    # Check whether the user is the member of this project
    if not check_member_in_project(volume.project, user):
        raise PermissionDenied(detail="User {} is not in project {}.".format(
            user.username, volume.project.name))

    if not request.FILES.get('file'):
        raise ParseError(detail="There is no upload file.")

    logger.info("User {} upload files to volume {}-{}.".format(
        user.username, volume.project.name, volume.name))

    filename = get_upload_volume_filename(volume, user)
    save_upload_file_to_disk(request.FILES['file'], filename)

    client = NFSLocalClient()
    volume_dir = get_volume_direction_on_nfs(volume)
    # Clear the dir first
    client.removedir(volume_dir)
    client.makedir(volume_dir)

    client.copy_file_to_remote_and_untar(filename, volume_dir)
    remove_file_from_disk(filename)

    return JsonResponse({"detail": "success"})
Example #7
0
def upload_volume(request, *args, **kwargs):
    """
    User upload volume data, delete the original data first.
    """
    if not (request.user and request.user.is_authenticated()):
        raise PermissionDenied()

    user = request.user

    assert 'pid' in kwargs
    pid = kwargs['pid']

    assert 'pk' in kwargs
    id = kwargs['pk']
    volume = Volume.objects.get(project__id=pid, id=id)

    # Check whether the user is the member of this project
    if not check_member_in_project(volume.project, user):
        raise PermissionDenied(detail="User {} is not in project {}."
            .format(user.username, volume.project.name))

    if not request.FILES.get('file'):
        raise ParseError(detail="There is no upload file.")

    logger.info("User {} upload files to volume {}-{}.".format(
        user.username, volume.project.name, volume.name))

    filename = get_upload_volume_filename(volume, user)
    save_upload_file_to_disk(request.FILES['file'], filename)

    client = NFSLocalClient()
    volume_dir = get_volume_direction_on_nfs(volume)
    # Clear the dir first
    client.removedir(volume_dir)
    client.makedir(volume_dir)

    client.copy_file_to_remote_and_untar(filename, volume_dir)
    remove_file_from_disk(filename)

    return JsonResponse({"detail": "success"})
Example #8
0
    def clear_volume(self, request, *args, **kwargs):
        """
        Clear volume.
        """
        volume = self.get_object()

        # Check whether project is corresponding to the user
        user = request.user
        if not check_member_in_project(volume.project, user):
            raise PermissionDenied(detail="User {} is not in project {}."
                .format(user.username, volume.project.name))

        logger.info("User {} clear volume {}-{}.".format(user.username,
            volume.project.name, volume.name))

        client = NFSLocalClient()
        volume_dir = get_volume_direction_on_nfs(volume)
        # Clear the dir
        client.removedir(volume_dir)
        client.makedir(volume_dir)

        return Response(status=status.HTTP_200_OK)
Example #9
0
 def setUp(self):
     self.client = NFSLocalClient()
Example #10
0
class NFSLocalClientTestCase(unittest.TestCase):

    def setUp(self):
        self.client = NFSLocalClient()

    def test_makedir(self):
        self.client.makedir('/home/wangtao/testdir')

    def test_removedir(self):
        self.client.removedir('/home/wangtao/testdir')

    def test_copy_file_to_remote(self):
        self.client.copy_file_to_remote("/home/wangtao/test/test.tar",
            "/hummer/test/test.tar")

    def test_copy_file_to_local(self):
        self.client.copy_file_to_local("/hummer/test/test.tar",
            "/home/wangtao/test.tar")

    def test_tar_and_copy_to_local(self):
        self.client.tar_and_copy_to_local("/hummer/test",
            "/home/wangtao/test.tar")

    def test_copy_file_to_remote_and_untar(self):
        self.client.copy_file_to_remote_and_untar("/home/wangtao/test/test.tar",
            "/hummer/test")
Example #11
0
 def setUp(self):
     self.client = NFSLocalClient()
Example #12
0
class NFSLocalClientTestCase(unittest.TestCase):
    def setUp(self):
        self.client = NFSLocalClient()

    def test_makedir(self):
        self.client.makedir('/home/wangtao/testdir')

    def test_removedir(self):
        self.client.removedir('/home/wangtao/testdir')

    def test_copy_file_to_remote(self):
        self.client.copy_file_to_remote("/home/wangtao/test/test.tar",
                                        "/hummer/test/test.tar")

    def test_copy_file_to_local(self):
        self.client.copy_file_to_local("/hummer/test/test.tar",
                                       "/home/wangtao/test.tar")

    def test_tar_and_copy_to_local(self):
        self.client.tar_and_copy_to_local("/hummer/test",
                                          "/home/wangtao/test.tar")

    def test_copy_file_to_remote_and_untar(self):
        self.client.copy_file_to_remote_and_untar(
            "/home/wangtao/test/test.tar", "/hummer/test")