Exemple #1
0
    def test_copy_handles_generation(self):
        source_resource = resource_reference.UnknownResource(
            storage_url.storage_url_from_string('gs://b/o'))
        destination_metadata = self.messages.Object(name='o2', bucket='b')
        destination_resource = resource_reference.UnknownResource(
            storage_url.storage_url_from_string('gs://b/o2'))

        request = self.messages.StorageObjectsCopyRequest(
            sourceBucket=source_resource.storage_url.bucket_name,
            sourceObject=source_resource.storage_url.object_name,
            destinationBucket=destination_resource.storage_url.bucket_name,
            destinationObject=destination_resource.storage_url.object_name,
            ifSourceGenerationMatch=1)
        self.apitools_client.objects.Copy.Expect(request,
                                                 response=destination_metadata)

        request_config = gcs_api.GcsRequestConfig(
            precondition_generation_match=1)
        observed_resource = self.gcs_client.copy_object(
            source_resource,
            destination_resource,
            request_config=request_config)
        expected_resource = gcs_api._object_resource_from_metadata(
            destination_metadata)
        self.assertEqual(observed_resource, expected_resource)
Exemple #2
0
 def test_patch_object_metadata_invalid_fields_scope(self):
     patched_object = self.messages.Object()
     object_resource = gcs_api._object_resource_from_metadata(
         patched_object)
     with self.assertRaises(ValueError):
         self.gcs_client.patch_object_metadata(
             TEST_BUCKET,
             TEST_OBJECT,
             object_resource,
             fields_scope='football field')
    def _list_objects_side_effect(self, *unused_args, **kwargs):
        """Mock the list_objects API method sourcing data from TEST_OBJECT_NAMES.

    Args:
      **kwargs (dict): Contains arguments dict for list_objects.

    Yields:
      resource_reference.Resource instances consisting of list of
        ObjectResource and/or PrefixResource instanes
        filtered based on the request prefix and request delimiter.
    """
        objects = []
        prefixes = set([])

        request_prefix = kwargs['prefix'] or ''
        request_delimiter = kwargs['delimiter']
        filtered_object_suffixes = [
            object_name[len(request_prefix):]
            for object_name in TEST_OBJECT_NAMES
            if object_name.startswith(request_prefix)
        ]

        for object_suffix in filtered_object_suffixes:
            if request_delimiter:
                name, _, suffix = object_suffix.partition(request_delimiter)
                if not suffix:  # Leaf object.
                    objects.append(
                        self.messages.Object(name=request_prefix +
                                             object_suffix,
                                             bucket=TEST_BUCKET_NAME))
                else:
                    prefixes.add('%s%s%s' %
                                 (request_prefix, name, request_delimiter))
            else:
                objects.append(
                    self.messages.Object(name=request_prefix + object_suffix,
                                         bucket=TEST_BUCKET_NAME))

        prefixes = sorted(list(prefixes))
        objects = self.messages.Objects(items=objects, prefixes=prefixes)

        for o in objects.items:
            yield gcs_api._object_resource_from_metadata(o)

        for prefix_string in objects.prefixes:
            yield resource_reference.PrefixResource(
                storage_url_object=storage_url.CloudUrl(
                    scheme=cloud_api.DEFAULT_PROVIDER,
                    bucket_name=kwargs['bucket_name'],
                    object_name=prefix_string),
                prefix=prefix_string)
Exemple #4
0
    def test_patch_object_metadata_api_error(self):
        patched_object = self.messages.Object()
        request = self.messages.StorageObjectsPatchRequest(
            bucket=TEST_BUCKET,
            object=TEST_OBJECT,
            objectResource=patched_object,
            projection=self.default_projection)
        self.apitools_client.objects.Patch.Expect(
            request, exception=apitools_exceptions.HttpError(None, None, None))
        object_resource = gcs_api._object_resource_from_metadata(
            patched_object)

        with self.assertRaises(cloud_errors.GcsApiError):
            self.gcs_client.patch_object_metadata(TEST_BUCKET, TEST_OBJECT,
                                                  object_resource)
Exemple #5
0
    def test_patch_object_metadata(self):
        patched_object = self.messages.Object()
        request = self.messages.StorageObjectsPatchRequest(
            bucket=TEST_BUCKET,
            object=TEST_OBJECT,
            objectResource=patched_object,
            projection=self.default_projection)
        self.apitools_client.objects.Patch.Expect(request,
                                                  response=patched_object)

        expected_resource = gcs_api._object_resource_from_metadata(
            patched_object)
        observed_resource = self.gcs_client.patch_object_metadata(
            TEST_BUCKET, TEST_OBJECT, expected_resource)
        self.assertEqual(observed_resource, expected_resource)
Exemple #6
0
    def test_patch_object_metadata_populates_missing_metadata(self):
        return_metadata = self.messages.Object(name='o', bucket='b')
        request = self.messages.StorageObjectsPatchRequest(
            bucket=TEST_BUCKET,
            object=TEST_OBJECT,
            objectResource=return_metadata,
            projection=self.default_projection)
        self.apitools_client.objects.Patch.Expect(request,
                                                  response=return_metadata)

        expected_resource = gcs_api._object_resource_from_metadata(
            return_metadata)
        patch_resource = test_resources.from_url_string('gs://b/o')
        observed_resource = self.gcs_client.patch_object_metadata(
            TEST_BUCKET, TEST_OBJECT, patch_resource)
        self.assertEqual(observed_resource, expected_resource)
Exemple #7
0
    def test_patch_object_metadata_generation(self):
        patched_object = self.messages.Object()
        request = self.messages.StorageObjectsPatchRequest(
            bucket=TEST_BUCKET,
            object=TEST_OBJECT,
            objectResource=patched_object,
            generation=1,
            projection=self.default_projection)
        self.apitools_client.objects.Patch.Expect(request,
                                                  response=patched_object)
        object_resource = gcs_api._object_resource_from_metadata(
            patched_object)

        self.gcs_client.patch_object_metadata(TEST_BUCKET,
                                              TEST_OBJECT,
                                              object_resource,
                                              generation='1')
Exemple #8
0
    def test_get_object_metadata(self):
        metadata_object = self.messages.Object(name=TEST_OBJECT,
                                               bucket=TEST_BUCKET)
        request = self.messages.StorageObjectsGetRequest(
            bucket=TEST_BUCKET,
            object=TEST_OBJECT,
            projection=self.default_projection)
        self.apitools_client.objects.Get.Expect(request,
                                                response=metadata_object)

        object_reference = self.gcs_client.get_object_metadata(
            TEST_BUCKET, TEST_OBJECT)
        expected_object_reference = gcs_api._object_resource_from_metadata(
            metadata_object)
        self.assertEqual(object_reference.metadata,
                         expected_object_reference.metadata)
        self.assertEqual(object_reference.storage_url,
                         expected_object_reference.storage_url)
Exemple #9
0
    def test_copies_objects(self):
        source_resource = resource_reference.UnknownResource(
            storage_url.storage_url_from_string('gs://b/o'))
        destination_metadata = self.messages.Object(name='o2', bucket='b')
        destination_resource = resource_reference.UnknownResource(
            storage_url.storage_url_from_string('gs://b/o2'))

        request = self.messages.StorageObjectsCopyRequest(
            sourceBucket=source_resource.storage_url.bucket_name,
            sourceObject=source_resource.storage_url.object_name,
            destinationBucket=destination_resource.storage_url.bucket_name,
            destinationObject=destination_resource.storage_url.object_name)
        self.apitools_client.objects.Copy.Expect(request,
                                                 response=destination_metadata)

        observed_resource = self.gcs_client.copy_object(
            source_resource, destination_resource)
        expected_resource = gcs_api._object_resource_from_metadata(
            destination_metadata)
        self.assertEqual(observed_resource, expected_resource)
Exemple #10
0
    def test_patch_object_metadata_valid_fields_scope(self, fields_scope,
                                                      projection):
        patched_object = self.messages.Object()
        object_resource = gcs_api._object_resource_from_metadata(
            patched_object)
        request = self.messages.StorageObjectsPatchRequest(
            bucket=TEST_BUCKET,
            object=TEST_OBJECT,
            objectResource=patched_object,
            projection=getattr(
                self.messages.StorageObjectsPatchRequest.
                ProjectionValueValuesEnum, projection))

        with mock.patch.object(self.apitools_client.objects,
                               'Patch') as mock_patch:
            self.gcs_client.patch_object_metadata(TEST_BUCKET,
                                                  TEST_OBJECT,
                                                  object_resource,
                                                  fields_scope=fields_scope)
            mock_patch.assert_called_once_with(request)
Exemple #11
0
    def test_patch_object_metadata_precondition_generation_match(self):
        patched_object = self.messages.Object()
        precondition_generation_match = 1
        request = self.messages.StorageObjectsPatchRequest(
            bucket=TEST_BUCKET,
            object=TEST_OBJECT,
            objectResource=patched_object,
            ifGenerationMatch=precondition_generation_match,
            projection=self.default_projection)
        self.apitools_client.objects.Patch.Expect(request,
                                                  response=patched_object)
        object_resource = gcs_api._object_resource_from_metadata(
            patched_object)

        self.gcs_client.patch_object_metadata(
            TEST_BUCKET,
            TEST_OBJECT,
            object_resource,
            request_config=gcs_api.GcsRequestConfig(
                precondition_generation_match=precondition_generation_match))
Exemple #12
0
    def test_uploads_object_with_object_resource(self):
        upload_metadata = self.messages.Object(name='o', bucket='b')
        request = self.messages.StorageObjectsInsertRequest(
            bucket=upload_metadata.bucket, object=upload_metadata)
        self.apitools_client.objects.Insert.Expect(request,
                                                   response=upload_metadata)

        upload_stream = mock.mock_open()
        upload_resource = resource_reference.FileObjectResource(
            storage_url.storage_url_from_string('gs://b/o'))
        expected_resource = gcs_api._object_resource_from_metadata(
            upload_metadata)
        with mock.patch.object(apitools_transfer, 'Upload') as mock_upload:
            observed_resource = self.gcs_client.upload_object(
                upload_stream, upload_resource)
            self.assertEqual(observed_resource, expected_resource)

            mock_upload.assert_called_once_with(
                upload_stream,
                gcs_api.DEFAULT_CONTENT_TYPE,
                total_size=None,
                auto_transfer=True,
                num_retries=gcs_api.DEFAULT_NUM_RETRIES,
                gzip_encoded=False)
Exemple #13
0
    def test_patch_object_metadata_predefined_acl_string(self):
        patched_object = self.messages.Object()
        predefined_acl_string = 'authenticatedRead'
        predefined_acl = getattr(
            self.messages.StorageObjectsPatchRequest.
            PredefinedAclValueValuesEnum, predefined_acl_string)

        request = self.messages.StorageObjectsPatchRequest(
            bucket=TEST_BUCKET,
            object=TEST_OBJECT,
            objectResource=patched_object,
            predefinedAcl=predefined_acl,
            projection=self.default_projection)
        self.apitools_client.objects.Patch.Expect(
            request, response=self.messages.Object())

        request_config = gcs_api.GcsRequestConfig(
            predefined_acl_string=predefined_acl_string)
        object_resource = gcs_api._object_resource_from_metadata(
            patched_object)
        self.gcs_client.patch_object_metadata(TEST_BUCKET,
                                              TEST_OBJECT,
                                              object_resource,
                                              request_config=request_config)