From 287d9fc475a6be4a156291e4c33c5c32185d77cc Mon Sep 17 00:00:00 2001 From: Hemang Date: Tue, 12 Nov 2019 16:03:12 +0530 Subject: [PATCH 1/4] fix(storage): fix stringify metadata for blob --- storage/google/cloud/storage/blob.py | 1 + storage/tests/unit/test_blob.py | 10 ++++++++++ 2 files changed, 11 insertions(+) diff --git a/storage/google/cloud/storage/blob.py b/storage/google/cloud/storage/blob.py index 20c15e2d7542..4d9bed1c8488 100644 --- a/storage/google/cloud/storage/blob.py +++ b/storage/google/cloud/storage/blob.py @@ -1911,6 +1911,7 @@ def metadata(self, value): :type value: dict :param value: (Optional) The blob metadata to set. """ + value = {k: str(v) for k, v in value.items()} self._patch_property("metadata", value) @property diff --git a/storage/tests/unit/test_blob.py b/storage/tests/unit/test_blob.py index 0c66d58b3a37..1c6ef26c4685 100644 --- a/storage/tests/unit/test_blob.py +++ b/storage/tests/unit/test_blob.py @@ -2913,6 +2913,16 @@ def test_metadata_setter(self): blob.metadata = METADATA self.assertEqual(blob.metadata, METADATA) + def test_metadata_setter_w_nan(self): + BLOB_NAME = "blob-name" + METADATA = {"foo": float('nan')} + bucket = _Bucket() + blob = self._make_one(BLOB_NAME, bucket=bucket) + self.assertIsNone(blob.metadata) + blob.metadata = METADATA + value = blob.metadata['foo'] + self.assertIsInstance(value, str) + def test_metageneration(self): BUCKET = object() METAGENERATION = 42 From 8ecd55f8d4c74427c6fc8e341da9bc26fb57517c Mon Sep 17 00:00:00 2001 From: Hemang Date: Thu, 14 Nov 2019 17:05:07 +0530 Subject: [PATCH 2/4] fix(storage): fix lint fail --- storage/tests/unit/test_blob.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/storage/tests/unit/test_blob.py b/storage/tests/unit/test_blob.py index 1c6ef26c4685..2609d546ef49 100644 --- a/storage/tests/unit/test_blob.py +++ b/storage/tests/unit/test_blob.py @@ -2915,12 +2915,12 @@ def test_metadata_setter(self): def test_metadata_setter_w_nan(self): BLOB_NAME = "blob-name" - METADATA = {"foo": float('nan')} + METADATA = {"foo": float("nan")} bucket = _Bucket() blob = self._make_one(BLOB_NAME, bucket=bucket) self.assertIsNone(blob.metadata) blob.metadata = METADATA - value = blob.metadata['foo'] + value = blob.metadata["foo"] self.assertIsInstance(value, str) def test_metageneration(self): From 3784b627ad051e7ad768affc37f83a5bbf1021af Mon Sep 17 00:00:00 2001 From: Hemang Date: Fri, 15 Nov 2019 11:36:15 +0530 Subject: [PATCH 3/4] fix(storage): stringify labels for bucket --- storage/google/cloud/storage/bucket.py | 3 ++- storage/tests/unit/test_bucket.py | 10 ++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/storage/google/cloud/storage/bucket.py b/storage/google/cloud/storage/bucket.py index 2ae9aebfdc0d..7dae695f9ad8 100644 --- a/storage/google/cloud/storage/bucket.py +++ b/storage/google/cloud/storage/bucket.py @@ -1366,7 +1366,8 @@ def labels(self, mapping): existing = set([k for k in self.labels.keys()]) incoming = set([k for k in mapping.keys()]) self._label_removals = self._label_removals.union(existing.difference(incoming)) - + mapping = {k: str(v) for k, v in mapping.items()} + # Actually update the labels on the object. self._patch_property("labels", copy.deepcopy(mapping)) diff --git a/storage/tests/unit/test_bucket.py b/storage/tests/unit/test_bucket.py index d65ee40f0756..4aeada6a0586 100644 --- a/storage/tests/unit/test_bucket.py +++ b/storage/tests/unit/test_bucket.py @@ -1651,6 +1651,16 @@ def test_labels_setter(self): self.assertIsNot(bucket._properties["labels"], LABELS) self.assertIn("labels", bucket._changes) + def test_labels_setter_with_nan(self): + NAME = "name" + LABELS = {"color": "red", "foo": float("nan")} + bucket = self._make_one(name=NAME) + + self.assertEqual(bucket.labels, {}) + bucket.labels = LABELS + value = bucket.labels["foo"] + self.assertIsInstance(value, str) + def test_labels_setter_with_removal(self): # Make sure the bucket labels look correct and follow the expected # public structure. From 97dd7c23c75b619d16e76e143ea880b0450edf22 Mon Sep 17 00:00:00 2001 From: Hemang Date: Fri, 15 Nov 2019 13:22:09 +0530 Subject: [PATCH 4/4] fix(storage): fix lint --- storage/google/cloud/storage/bucket.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/storage/google/cloud/storage/bucket.py b/storage/google/cloud/storage/bucket.py index 7dae695f9ad8..14c1d873525c 100644 --- a/storage/google/cloud/storage/bucket.py +++ b/storage/google/cloud/storage/bucket.py @@ -1367,7 +1367,7 @@ def labels(self, mapping): incoming = set([k for k in mapping.keys()]) self._label_removals = self._label_removals.union(existing.difference(incoming)) mapping = {k: str(v) for k, v in mapping.items()} - + # Actually update the labels on the object. self._patch_property("labels", copy.deepcopy(mapping))