示例#1
0
    def delete_container(self, container):
        """
        Delete a container.

        @type container: L{Container}
        @param container: Container instance

        @return: True on success, False otherwise.
        @rtype: C{bool}
        """

        # Check if there are any objects inside this
        for obj in self._get_objects(container):
            raise ContainerIsNotEmptyError(value='Container is not empty',
                                           container_name=container.name,
                                           driver=self)

        path = self.get_container_cdn_url(container, check=True)

        with LockLocalStorage(path) as lock:
            try:
                shutil.rmtree(path)
            except Exception:
                return False

        return True
示例#2
0
    def delete_container(self, container):
        """
        @inherits: :class:`StorageDriver.delete_container`
        """
        # Azure does not check if the container is empty. So, we will do
        # a check to ensure that the behaviour is similar to other drivers
        for obj in container.iterate_objects():
            raise ContainerIsNotEmptyError(
                value='Container must be empty before it can be deleted.',
                container_name=container.name,
                driver=self)

        params = {'restype': 'container'}
        container_path = self._get_container_path(container)

        # Note: All the objects in the container must be deleted first
        response = self.connection.request(container_path,
                                           params=params,
                                           method='DELETE')

        if response.status == httplib.ACCEPTED:
            return True
        elif response.status == httplib.NOT_FOUND:
            raise ContainerDoesNotExistError(value=None,
                                             driver=self,
                                             container_name=container.name)

        return False
示例#3
0
 def delete_container(self, container):
     try:
         self.connection.request(self._namespace_path(container.name + '/'),
                                 method='DELETE')
     except AtmosError, e:
         if e.code == 1003:
             raise ContainerDoesNotExistError(e, self, container.name)
         elif e.code == 1023:
             raise ContainerIsNotEmptyError(e, self, container.name)
示例#4
0
 def delete_container(self, container):
     try:
         self.connection.request(self._namespace_path(container.name) + "/",
                                 method="DELETE")
     except AtmosError as e:
         if e.code == 1003:
             raise ContainerDoesNotExistError(e, self, container.name)
         elif e.code == 1023:
             raise ContainerIsNotEmptyError(e, self, container.name)
     return True
示例#5
0
 def delete_container(self, container):
     try:
         self.connection.request(self._namespace_path(container.name) + '/',
                                 method='DELETE')
     except AtmosError:
         e = sys.exc_info()[1]
         if e.code == 1003:
             raise ContainerDoesNotExistError(e, self, container.name)
         elif e.code == 1023:
             raise ContainerIsNotEmptyError(e, self, container.name)
     return True
示例#6
0
    def delete_container(self, container):
        # Note: All the objects in the container must be deleted first

        for obj in self._get_objects(container):
            raise ContainerIsNotEmptyError(value='Container is not empty',
                                           container_name=container.name,
                                           driver=self)

        try:
            self.connection.session.collections.delete(container.name)
            return True
        except:  #CollectionDoesNotExist
            raise ContainerDoesNotExistError(value=None,
                                             driver=self,
                                             container_name=container.name)
示例#7
0
    def delete_container(self, container):
        name = self._encode_container_name(container.name)

        # Only empty container can be deleted
        response = self.connection.request('/%s' % (name), method='DELETE')

        if response.status == httplib.NO_CONTENT:
            return True
        elif response.status == httplib.NOT_FOUND:
            raise ContainerDoesNotExistError(value='',
                                             container_name=name, driver=self)
        elif response.status == httplib.CONFLICT:
            # @TODO: Add "delete_all_objects" parameter?
            raise ContainerIsNotEmptyError(value='',
                                           container_name=name, driver=self)
示例#8
0
    def delete_container(self, container):
        # Note: All the objects in the container must be deleted first
        response = self.connection.request('/%s' % (container.name),
                                           method='DELETE')
        if response.status == httplib.NO_CONTENT:
            return True
        elif response.status == httplib.CONFLICT:
            raise ContainerIsNotEmptyError(
                value='Container must be empty before it can be deleted.',
                container_name=container.name, driver=self)
        elif response.status == httplib.NOT_FOUND:
            raise ContainerDoesNotExistError(value=None,
                                             driver=self,
                                             container_name=container.name)

        return False
示例#9
0
文件: dummy.py 项目: Eis-D-Z/libcloud
    def delete_container(self, container):
        """
        >>> driver = DummyStorageDriver('key', 'secret')
        >>> container = Container(name = 'test container',
        ...    extra={'object_count': 0}, driver=driver)
        >>> driver.delete_container(container=container)
        ... #doctest: +IGNORE_EXCEPTION_DETAIL
        Traceback (most recent call last):
        ContainerDoesNotExistError:
        >>> container = driver.create_container(
        ...      container_name='test container 1')
        ... #doctest: +IGNORE_EXCEPTION_DETAIL
        >>> len(driver._containers)
        1
        >>> driver.delete_container(container=container)
        True
        >>> len(driver._containers)
        0
        >>> container = driver.create_container(
        ...    container_name='test container 1')
        ... #doctest: +IGNORE_EXCEPTION_DETAIL
        >>> obj = container.upload_object_via_stream(
        ...   object_name='test object', iterator=DummyFileObject(5, 10),
        ...   extra={})
        >>> driver.delete_container(container=container)
        ... #doctest: +IGNORE_EXCEPTION_DETAIL
        Traceback (most recent call last):
        ContainerIsNotEmptyError:

        @inherits: :class:`StorageDriver.delete_container`
        """

        container_name = container.name
        if container_name not in self._containers:
            raise ContainerDoesNotExistError(container_name=container_name,
                                             value=None,
                                             driver=self)

        container = self._containers[container_name]
        if len(container['objects']) > 0:
            raise ContainerIsNotEmptyError(container_name=container_name,
                                           value=None,
                                           driver=self)

        del self._containers[container_name]
        return True