Beispiel #1
0
    def create_container(self, container_name):
        """
        @inherits: :class:`StorageDriver.create_container`
        """
        params = {'restype': 'container'}

        container_path = '/%s' % (container_name)
        response = self.connection.request(container_path,
                                           params=params,
                                           method='PUT')

        if response.status == httplib.CREATED:
            return self._response_to_container(container_name, response)
        elif response.status == httplib.CONFLICT:
            raise ContainerAlreadyExistsError(
                value='Container with this name already exists. The name must '
                'be unique among all the containers in the system',
                container_name=container_name,
                driver=self)
        elif response.status == httplib.BAD_REQUEST:
            raise InvalidContainerNameError(value='Container name contains ' +
                                            'invalid characters.',
                                            container_name=container_name,
                                            driver=self)

        raise LibcloudError('Unexpected status code: %s' % (response.status),
                            driver=self)
Beispiel #2
0
    def create_container(self, container_name):
        """
        Create a new container.

        @type container_name: C{str}
        @param container_name: Container name.

        @return: C{Container} instance on success.
        @rtype: L{Container}
        """

        self._check_container_name(container_name)

        path = os.path.join(self.base_path, container_name)

        try:
            self._make_path(path, ignore_existing=False)
        except OSError:
            exp = sys.exc_info()[1]
            if exp.errno == errno.EEXIST:
                raise ContainerAlreadyExistsError(
                    value='Container with this name already exists. The name '
                    'must be unique among all the containers in the '
                    'system',
                    container_name=container_name,
                    driver=self)
            else:
                raise LibcloudError('Error creating container %s' %
                                    container_name,
                                    driver=self)
        except Exception:
            raise LibcloudError('Error creating container %s' % container_name,
                                driver=self)

        return self._make_container(container_name)
Beispiel #3
0
    def create_container(self, container_name):
        """
        >>> driver = DummyStorageDriver('key', 'secret')
        >>> container = driver.create_container(container_name='test container 1')
        >>> container
        <Container: name=test container 1, provider=Dummy Storage Provider>
        >>> container = driver.create_container(
        ...    container_name='test container 1') #doctest: +IGNORE_EXCEPTION_DETAIL
        Traceback (most recent call last):
        ContainerAlreadyExistsError:
        """

        if container_name in self._containers:
            raise ContainerAlreadyExistsError(container_name=container_name,
                                              value=None,
                                              driver=self)

        extra = {'object_count': 0}
        container = Container(name=container_name, extra=extra, driver=self)

        self._containers[container_name] = {
            'container':
            container,
            'objects': {},
            'cdn_url':
            'http://www.test.com/container/%s' %
            (container_name.replace(' ', '_'))
        }
        return container
Beispiel #4
0
    def create_container(self, container_name):
        """
        >>> driver = DummyStorageDriver('key', 'secret')
        >>> container_name = 'test container 1'
        >>> container = driver.create_container(container_name=container_name)
        >>> container
        <Container: name=test container 1, provider=Dummy Storage Provider>
        >>> container = driver.create_container(
        ...    container_name='test container 1')
        ... #doctest: +IGNORE_EXCEPTION_DETAIL
        Traceback (most recent call last):
        ContainerAlreadyExistsError:

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

        if container_name in self._containers:
            raise ContainerAlreadyExistsError(container_name=container_name,
                                              value=None,
                                              driver=self)

        extra = {"object_count": 0}
        container = Container(name=container_name, extra=extra, driver=self)

        self._containers[container_name] = {
            "container":
            container,
            "objects": {},
            "cdn_url":
            "http://www.test.com/container/%s" %
            (container_name.replace(" ", "_")),
        }
        return container
Beispiel #5
0
    def create_container(self, container_name):
        """
        @inherits: :class:`StorageDriver.create_container`
        """
        params = {"restype": "container"}

        container_path = "/%s" % (container_name)
        response = self.connection.request(container_path,
                                           params=params,
                                           method="PUT")

        if response.status == httplib.CREATED:
            return self._response_to_container(container_name, response)
        elif response.status == httplib.CONFLICT:
            raise ContainerAlreadyExistsError(
                value="Container with this name already exists. The name must "
                "be unique among all the containers in the system",
                container_name=container_name,
                driver=self,
            )
        elif response.status == httplib.BAD_REQUEST:
            raise InvalidContainerNameError(
                value="Container name contains " + "invalid characters.",
                container_name=container_name,
                driver=self,
            )

        raise LibcloudError("Unexpected status code: %s" % (response.status),
                            driver=self)
Beispiel #6
0
    def create_container(self, container_name):
        """
        Create a new container.

        :type container_name: ``str``
        :param container_name: Container name.

        :return: :class:`Container` instance on success.
        :rtype: :class:`Container`
        """

        self._check_container_name(container_name)

        path = os.path.join(self.base_path, container_name)

        try:
            self._make_path(path, ignore_existing=False)
        except OSError as exp:
            if exp.errno == errno.EEXIST:
                raise ContainerAlreadyExistsError(
                    value='Container with this name already exists. The name '
                    'must be unique among all the containers in the '
                    'system',
                    container_name=container_name,
                    driver=self)
            else:
                raise LibcloudError('Error creating container %s' %
                                    container_name,
                                    driver=self)
        except Exception:
            raise LibcloudError('Error creating container %s' % container_name,
                                driver=self)

        return self._make_container(container_name)
Beispiel #7
0
 def create_container(self, container_name):
     path = self._namespace_path(container_name + '/')
     try:
         result = self.connection.request(path, method='POST')
     except AtmosError, e:
         if e.code != 1016:
             raise
         raise ContainerAlreadyExistsError(e, self, container_name)
Beispiel #8
0
 def create_container(self, container_name):
     path = self._namespace_path(container_name) + '/'
     try:
         self.connection.request(path, method='POST')
     except AtmosError as e:
         if e.code != 1016:
             raise
         raise ContainerAlreadyExistsError(e, self, container_name)
     return self.get_container(container_name)
Beispiel #9
0
    def create_container(self, container_name):
        container_name = self._clean_container_name(container_name)
        response = self.connection.request(
            '/%s' % (container_name), method='PUT')

        if response.status == httplib.CREATED:
            # Accepted mean that container is not yet created but it will be
            # eventually
            extra = { 'object_count': 0 }
            container = Container(name=container_name, extra=extra, driver=self)

            return container
        elif response.status == httplib.ACCEPTED:
            error = ContainerAlreadyExistsError(None, self, container_name)
            raise error

        raise LibcloudError('Unexpected status code: %s' % (response.status))
Beispiel #10
0
    def test_handles_race_condition_when_creating_container(self):
        with patch.object(self._storage, '_driver', new_callable=PropertyMock) as driver:
            container = {'get_was_called': False}

            # noinspection PyUnusedLocal
            def get_container(*args, **kwargs):
                if not container['get_was_called']:
                    container['get_was_called'] = True
                    # noinspection PyTypeChecker
                    raise ContainerDoesNotExistError(None, driver, self._container)

                return container

            # noinspection PyTypeChecker
            driver.create_container.side_effect = throw(ContainerAlreadyExistsError(None, driver, self._container))
            driver.get_container.side_effect = get_container

            self.assertIs(self._storage._client._wrapped, container)
Beispiel #11
0
    def create_container(self, container_name):
        if self.ex_location_name:
            root = Element("CreateBucketConfiguration")
            child = SubElement(root, "LocationConstraint")
            child.text = self.ex_location_name

            data = tostring(root)
        else:
            data = ""

        response = self.connection.request(
            "/%s" % (container_name), data=data, method="PUT"
        )

        if response.status == httplib.OK:
            container = Container(name=container_name, extra=None, driver=self)
            return container
        elif response.status == httplib.CONFLICT:
            if "BucketAlreadyOwnedByYou" in response.body:
                raise ContainerAlreadyExistsError(
                    value="Container with this name already exists. The name "
                    "be unique among all the containers in the system.",
                    container_name=container_name,
                    driver=self,
                )

            raise InvalidContainerNameError(
                value="Container with this name already exists. The name must "
                "be unique among all the containers in the system.",
                container_name=container_name,
                driver=self,
            )
        elif response.status == httplib.BAD_REQUEST:
            raise ContainerError(
                value="Bad request when creating container: %s" % response.body,
                container_name=container_name,
                driver=self,
            )

        raise LibcloudError(
            "Unexpected status code: %s" % (response.status), driver=self
        )
 def create_container(*args, **kwargs):
     raise ContainerAlreadyExistsError(None, driver,
                                       self._container)