From b0a3349ddae921a046ef6763b86f4e72063913b3 Mon Sep 17 00:00:00 2001 From: Chandra Sirimala Date: Mon, 3 Nov 2025 06:37:57 +0000 Subject: [PATCH 1/6] test --- README.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/README.rst b/README.rst index a7db13a25..761c5f260 100644 --- a/README.rst +++ b/README.rst @@ -276,3 +276,4 @@ Next Steps .. _Google Cloud Storage Product documentation: https://cloud.google.com/storage .. _README: https://github.com/googleapis/google-cloud-python/blob/main/README.rst +# test From 778e68ee4e565ec270f1972bda37700de228ccbf Mon Sep 17 00:00:00 2001 From: Chandra Sirimala Date: Mon, 3 Nov 2025 06:44:00 +0000 Subject: [PATCH 2/6] Revert "test" This reverts commit b0a3349ddae921a046ef6763b86f4e72063913b3. --- README.rst | 1 - 1 file changed, 1 deletion(-) diff --git a/README.rst b/README.rst index 761c5f260..a7db13a25 100644 --- a/README.rst +++ b/README.rst @@ -276,4 +276,3 @@ Next Steps .. _Google Cloud Storage Product documentation: https://cloud.google.com/storage .. _README: https://github.com/googleapis/google-cloud-python/blob/main/README.rst -# test From 959bc49012c8c86413d8c62869acda136a9c6691 Mon Sep 17 00:00:00 2001 From: Chandra Sirimala Date: Tue, 9 Dec 2025 04:58:06 +0000 Subject: [PATCH 3/6] feat: Support urllib3's custom decoder, add max_length param --- google/cloud/storage/_media/requests/download.py | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/google/cloud/storage/_media/requests/download.py b/google/cloud/storage/_media/requests/download.py index b8e2758e1..323ae29ae 100644 --- a/google/cloud/storage/_media/requests/download.py +++ b/google/cloud/storage/_media/requests/download.py @@ -711,7 +711,7 @@ def __init__(self, checksum): super().__init__() self._checksum = checksum - def decompress(self, data): + def decompress(self, data, max_length=None): """Decompress the bytes. Args: @@ -721,7 +721,11 @@ def decompress(self, data): bytes: The decompressed bytes from ``data``. """ self._checksum.update(data) - return super().decompress(data) + try: + return super().decompress(data, max_length=max_length) + except TypeError: + # FB for urllib3 <2.6.0 + return super().decompress(data) # urllib3.response.BrotliDecoder might not exist depending on whether brotli is @@ -747,7 +751,7 @@ def __init__(self, checksum): self._decoder = urllib3.response.BrotliDecoder() self._checksum = checksum - def decompress(self, data): + def decompress(self, data, max_length=None): """Decompress the bytes. Args: @@ -757,7 +761,11 @@ def decompress(self, data): bytes: The decompressed bytes from ``data``. """ self._checksum.update(data) - return self._decoder.decompress(data) + try: + return self._decoder.decompress(data, max_length=max_length) + except TypeError: + # FB for urllib3 <2.6.0 + return self._decoder.decompress(data) def flush(self): return self._decoder.flush() From ed13aeff7ab07d548c12c314ee2639bc94fd9a81 Mon Sep 17 00:00:00 2001 From: Chandra Sirimala Date: Tue, 9 Dec 2025 05:02:51 +0000 Subject: [PATCH 4/6] Revert "chore: fix failing system test due to version upgrade of urllib3 (#1651)" This reverts commit 6ed12b97126ab936b6033a16d5e61ef424e94b37. --- testing/constraints-3.12.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/testing/constraints-3.12.txt b/testing/constraints-3.12.txt index 4e5f201e2..ef1c92fff 100644 --- a/testing/constraints-3.12.txt +++ b/testing/constraints-3.12.txt @@ -7,4 +7,3 @@ grpcio proto-plus protobuf grpc-google-iam-v1 -urllib3==2.5.0 \ No newline at end of file From ccb702e17d105f5cf228bf4ad8ce38eb2e626df3 Mon Sep 17 00:00:00 2001 From: Chandra Sirimala Date: Tue, 9 Dec 2025 12:31:33 +0000 Subject: [PATCH 5/6] expose `has_unconsumed_tail` property in _BrotliDecoder --- google/cloud/storage/_media/requests/download.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/google/cloud/storage/_media/requests/download.py b/google/cloud/storage/_media/requests/download.py index 323ae29ae..b4cc682fe 100644 --- a/google/cloud/storage/_media/requests/download.py +++ b/google/cloud/storage/_media/requests/download.py @@ -770,5 +770,10 @@ def decompress(self, data, max_length=None): def flush(self): return self._decoder.flush() + @property + def has_unconsumed_tail(self) -> bool: + return self._decoder.has_unconsumed_tail + + else: # pragma: NO COVER _BrotliDecoder = None # type: ignore # pragma: NO COVER From 452006ec49302cd3febb261b540c668f3cf6df78 Mon Sep 17 00:00:00 2001 From: Chandra Sirimala Date: Tue, 9 Dec 2025 12:50:45 +0000 Subject: [PATCH 6/6] keep `max_length` default value -1 same as urllib3 --- google/cloud/storage/_media/requests/download.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/google/cloud/storage/_media/requests/download.py b/google/cloud/storage/_media/requests/download.py index b4cc682fe..13e049bd3 100644 --- a/google/cloud/storage/_media/requests/download.py +++ b/google/cloud/storage/_media/requests/download.py @@ -711,7 +711,7 @@ def __init__(self, checksum): super().__init__() self._checksum = checksum - def decompress(self, data, max_length=None): + def decompress(self, data, max_length=-1): """Decompress the bytes. Args: @@ -724,7 +724,7 @@ def decompress(self, data, max_length=None): try: return super().decompress(data, max_length=max_length) except TypeError: - # FB for urllib3 <2.6.0 + # Fallback for urllib3 < 2.6.0 which lacks `max_length` support. return super().decompress(data) @@ -751,7 +751,7 @@ def __init__(self, checksum): self._decoder = urllib3.response.BrotliDecoder() self._checksum = checksum - def decompress(self, data, max_length=None): + def decompress(self, data, max_length=-1): """Decompress the bytes. Args: @@ -764,7 +764,7 @@ def decompress(self, data, max_length=None): try: return self._decoder.decompress(data, max_length=max_length) except TypeError: - # FB for urllib3 <2.6.0 + # Fallback for urllib3 < 2.6.0 which lacks `max_length` support. return self._decoder.decompress(data) def flush(self):