def create_bucket(self, bucket_name, requester_pays=None, project=None): """Create a new bucket. For example: .. literalinclude:: snippets.py :start-after: [START create_bucket] :end-before: [END create_bucket] This implements "storage.buckets.insert". If the bucket already exists, will raise :class:`google.cloud.exceptions.Conflict`. :type bucket_name: str :param bucket_name: The bucket name to create. :type requester_pays: bool :param requester_pays: (Optional) Whether requester pays for API requests for this bucket and its blobs. :type project: str :param project: (Optional) the project under which the bucket is to be created. If not passed, uses the project set on the client. :rtype: :class:`google.cloud.storage.bucket.Bucket` :returns: The newly created bucket. """ bucket = Bucket(self, name=bucket_name) if requester_pays is not None: bucket.requester_pays = requester_pays bucket.create(client=self, project=project) return bucket
def create_bucket(self, bucket_or_name, requester_pays=None, project=None): """API call: create a new bucket via a POST request. See https://cloud.google.com/storage/docs/json_api/v1/buckets/insert Args: bucket_or_name (Union[ \ :class:`~google.cloud.storage.bucket.Bucket`, \ str, \ ]): The bucket resource to pass or name to create. requester_pays (bool): Optional. Whether requester pays for API requests for this bucket and its blobs. project (str): Optional. the project under which the bucket is to be created. If not passed, uses the project set on the client. Returns: google.cloud.storage.bucket.Bucket The newly created bucket. Raises: google.cloud.exceptions.Conflict If the bucket already exists. Examples: Create a bucket using a string. .. literalinclude:: snippets.py :start-after: [START create_bucket] :end-before: [END create_bucket] Create a bucket using a resource. >>> from google.cloud import storage >>> client = storage.Client() >>> # Set properties on a plain resource object. >>> bucket = storage.Bucket("my-bucket-name") >>> bucket.location = "europe-west6" >>> bucket.storage_class = "COLDLINE" >>> # Pass that resource object to the client. >>> bucket = client.create_bucket(bucket) # API request. """ bucket = None if isinstance(bucket_or_name, Bucket): bucket = bucket_or_name else: bucket = Bucket(self, name=bucket_or_name) if requester_pays is not None: bucket.requester_pays = requester_pays bucket.create(client=self, project=project) return bucket
def test_create_w_extra_properties(self): from google.cloud.storage.client import Client from google.cloud.storage.bucket import Bucket BUCKET_NAME = "bucket-name" PROJECT = "PROJECT" CORS = [ { "maxAgeSeconds": 60, "methods": ["*"], "origin": ["https://example.com/frontend"], "responseHeader": ["X-Custom-Header"], } ] LIFECYCLE_RULES = [{"action": {"type": "Delete"}, "condition": {"age": 365}}] LOCATION = "eu" LABELS = {"color": "red", "flavor": "cherry"} STORAGE_CLASS = "NEARLINE" DATA = { "name": BUCKET_NAME, "cors": CORS, "lifecycle": {"rule": LIFECYCLE_RULES}, "location": LOCATION, "storageClass": STORAGE_CLASS, "versioning": {"enabled": True}, "billing": {"requesterPays": True}, "labels": LABELS, } connection = _make_connection(DATA) client = Client(project=PROJECT) client._base_connection = connection bucket = Bucket(client=client, name=BUCKET_NAME) bucket.cors = CORS bucket.lifecycle_rules = LIFECYCLE_RULES bucket.storage_class = STORAGE_CLASS bucket.versioning_enabled = True bucket.requester_pays = True bucket.labels = LABELS client.create_bucket(bucket, location=LOCATION) connection.api_request.assert_called_once_with( method="POST", path="/b", query_params={"project": PROJECT}, data=DATA, _target_object=bucket, timeout=self._get_default_timeout(), )
def test_create_bucket_w_object_success(self): from google.cloud.storage.bucket import Bucket project = "PROJECT" credentials = _make_credentials() client = self._make_one(project=project, credentials=credentials) bucket_name = "bucket-name" bucket_obj = Bucket(client, bucket_name) bucket_obj.storage_class = "COLDLINE" bucket_obj.requester_pays = True URI = "/".join([ client._connection.API_BASE_URL, "storage", client._connection.API_VERSION, "b?project=%s" % (project, ), ]) json_expected = { "name": bucket_name, "billing": { "requesterPays": True }, "storageClass": "COLDLINE", } data = json_expected http = _make_requests_session([_make_json_response(data)]) client._http_internal = http bucket = client.create_bucket(bucket_obj) self.assertIsInstance(bucket, Bucket) self.assertEqual(bucket.name, bucket_name) self.assertTrue(bucket.requester_pays) http.request.assert_called_once_with(method="POST", url=URI, data=mock.ANY, headers=mock.ANY, timeout=mock.ANY) json_sent = http.request.call_args_list[0][1]["data"] self.assertEqual(json_expected, json.loads(json_sent))
def test_create_bucket_with_object_success(self): from google.cloud.storage.bucket import Bucket project = "PROJECT" credentials = _make_credentials() client = self._make_one(project=project, credentials=credentials) bucket_name = "bucket-name" bucket_obj = Bucket(client, bucket_name) bucket_obj.storage_class = "COLDLINE" bucket_obj.requester_pays = True URI = "/".join( [ client._connection.API_BASE_URL, "storage", client._connection.API_VERSION, "b?project=%s" % (project,), ] ) json_expected = { "name": bucket_name, "billing": {"requesterPays": True}, "storageClass": "COLDLINE", } data = json_expected http = _make_requests_session([_make_json_response(data)]) client._http_internal = http bucket = client.create_bucket(bucket_obj) self.assertIsInstance(bucket, Bucket) self.assertEqual(bucket.name, bucket_name) self.assertTrue(bucket.requester_pays) http.request.assert_called_once_with( method="POST", url=URI, data=mock.ANY, headers=mock.ANY ) json_sent = http.request.call_args_list[0][1]["data"] self.assertEqual(json_expected, json.loads(json_sent))
def create_bucket(self, bucket_name, requester_pays=None, project=None): """Create a new bucket. For example: .. literalinclude:: snippets.py :start-after: [START create_bucket] :end-before: [END create_bucket] This implements "storage.buckets.insert". If the bucket already exists, will raise :class:`google.cloud.exceptions.Conflict`. To set additional properties when creating a bucket, such as the bucket location, use :meth:`~.Bucket.create`. :type bucket_name: str :param bucket_name: The bucket name to create. :type requester_pays: bool :param requester_pays: (Optional) Whether requester pays for API requests for this bucket and its blobs. :type project: str :param project: (Optional) the project under which the bucket is to be created. If not passed, uses the project set on the client. :rtype: :class:`google.cloud.storage.bucket.Bucket` :returns: The newly created bucket. """ bucket = Bucket(self, name=bucket_name) if requester_pays is not None: bucket.requester_pays = requester_pays bucket.create(client=self, project=project) return bucket