Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-google-resumable-media for 
openSUSE:Factory checked in at 2022-10-17 14:58:42
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-google-resumable-media (Old)
 and      /work/SRC/openSUSE:Factory/.python-google-resumable-media.new.2275 
(New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-google-resumable-media"

Mon Oct 17 14:58:42 2022 rev:15 rq:1012096 version:2.4.0

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/python-google-resumable-media/python-google-resumable-media.changes
      2022-06-10 15:58:00.864855501 +0200
+++ 
/work/SRC/openSUSE:Factory/.python-google-resumable-media.new.2275/python-google-resumable-media.changes
    2022-10-17 14:58:45.810215323 +0200
@@ -1,0 +2,15 @@
+Mon Oct 17 09:39:25 UTC 2022 - John Paul Adrian Glaubitz 
<adrian.glaub...@suse.com>
+
+- Update to 2.4.0
+  Features
+  * Handle interrupted downloads with decompressive transcoding (#346)
+  Bug Fixes
+  * Allow recover to check the status of upload regardless of state (#343)
+  * Require python 3.7+ (#337) (942665f)
+  * Use unittest.mock (#329) (82f9769)
+  Documentation
+  * Fix changelog header to consistent size (#331) (7b1dc9c)
+- Refresh patches for new version
+  * python-google-resumable-media-no-mock.patch
+
+-------------------------------------------------------------------

Old:
----
  google-resumable-media-2.3.3.tar.gz

New:
----
  google-resumable-media-2.4.0.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-google-resumable-media.spec ++++++
--- /var/tmp/diff_new_pack.Bjlmgw/_old  2022-10-17 14:58:46.494216638 +0200
+++ /var/tmp/diff_new_pack.Bjlmgw/_new  2022-10-17 14:58:46.498216646 +0200
@@ -19,7 +19,7 @@
 %{?!python_module:%define python_module() python-%{**} python3-%{**}}
 %define skip_python2 1
 Name:           python-google-resumable-media
-Version:        2.3.3
+Version:        2.4.0
 Release:        0
 Summary:        Utilities for Google Media Downloads and Resumable Uploads
 License:        Apache-2.0

++++++ google-resumable-media-2.3.3.tar.gz -> 
google-resumable-media-2.4.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/google-resumable-media-2.3.3/PKG-INFO 
new/google-resumable-media-2.4.0/PKG-INFO
--- old/google-resumable-media-2.3.3/PKG-INFO   2022-05-19 14:44:35.157641600 
+0200
+++ new/google-resumable-media-2.4.0/PKG-INFO   2022-09-29 23:58:29.030800000 
+0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: google-resumable-media
-Version: 2.3.3
+Version: 2.4.0
 Summary: Utilities for Google Media Downloads and Resumable Uploads
 Home-page: https://github.com/googleapis/google-resumable-media-python
 Author: Google Cloud Platform
@@ -12,13 +12,12 @@
 Classifier: License :: OSI Approved :: Apache Software License
 Classifier: Operating System :: OS Independent
 Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.6
 Classifier: Programming Language :: Python :: 3.7
 Classifier: Programming Language :: Python :: 3.8
 Classifier: Programming Language :: Python :: 3.9
 Classifier: Programming Language :: Python :: 3.10
 Classifier: Topic :: Internet
-Requires-Python: >= 3.6
+Requires-Python: >= 3.7
 Provides-Extra: requests
 Provides-Extra: aiohttp
 License-File: LICENSE
@@ -41,16 +40,19 @@
 
 Supported Python Versions
 -------------------------
-Python >= 3.6
+Python >= 3.7
 
 Unsupported Python Versions
 ---------------------------
 
-Python == 2.7, Python == 3.5.
+Python == 2.7, Python == 3.5, Python == 3.6.
 
 The last version of this library compatible with Python 2.7 and 3.5 is
 `google-resumable-media==1.3.3`.
 
+The last version of this library compatible with Python 3.6 is
+`google-resumable-media==2.3.3`.
+
 License
 -------
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/google-resumable-media-2.3.3/README.rst 
new/google-resumable-media-2.4.0/README.rst
--- old/google-resumable-media-2.3.3/README.rst 2022-05-19 14:42:00.000000000 
+0200
+++ new/google-resumable-media-2.4.0/README.rst 2022-09-29 23:54:59.000000000 
+0200
@@ -16,16 +16,19 @@
 
 Supported Python Versions
 -------------------------
-Python >= 3.6
+Python >= 3.7
 
 Unsupported Python Versions
 ---------------------------
 
-Python == 2.7, Python == 3.5.
+Python == 2.7, Python == 3.5, Python == 3.6.
 
 The last version of this library compatible with Python 2.7 and 3.5 is
 `google-resumable-media==1.3.3`.
 
+The last version of this library compatible with Python 3.6 is
+`google-resumable-media==2.3.3`.
+
 License
 -------
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/google-resumable-media-2.3.3/google/resumable_media/_helpers.py 
new/google-resumable-media-2.4.0/google/resumable_media/_helpers.py
--- old/google-resumable-media-2.3.3/google/resumable_media/_helpers.py 
2022-05-19 14:42:00.000000000 +0200
+++ new/google-resumable-media-2.4.0/google/resumable_media/_helpers.py 
2022-09-29 23:54:59.000000000 +0200
@@ -32,6 +32,7 @@
 
 RANGE_HEADER = "range"
 CONTENT_RANGE_HEADER = "content-range"
+CONTENT_ENCODING_HEADER = "content-encoding"
 
 _SLOW_CRC32C_WARNING = (
     "Currently using crcmod in pure python form. This is a slow "
@@ -40,6 +41,8 @@
 )
 _GENERATION_HEADER = "x-goog-generation"
 _HASH_HEADER = "x-goog-hash"
+_STORED_CONTENT_ENCODING_HEADER = "x-goog-stored-content-encoding"
+
 _MISSING_CHECKSUM = """\
 No {checksum_type} checksum was returned from the service while downloading {}
 (which happens for composite objects), so client-side content integrity
@@ -369,6 +372,23 @@
     return urlunsplit((scheme, netloc, path, query, frag))
 
 
+def _is_decompressive_transcoding(response, get_headers):
+    """Returns True if the object was served decompressed. This happens when 
the
+    "x-goog-stored-content-encoding" header is "gzip" and "content-encoding" 
header
+    is not "gzip". See more at: 
https://cloud.google.com/storage/docs/transcoding#transcoding_and_gzip
+    Args:
+        response (~requests.Response): The HTTP response object.
+        get_headers (callable: response->dict): returns response headers.
+    Returns:
+        bool: Returns True if decompressive transcoding has occurred; 
otherwise, False.
+    """
+    headers = get_headers(response)
+    return (
+        headers.get(_STORED_CONTENT_ENCODING_HEADER) == "gzip"
+        and headers.get(CONTENT_ENCODING_HEADER) != "gzip"
+    )
+
+
 class _DoNothingHash(object):
     """Do-nothing hash object.
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/google-resumable-media-2.3.3/google/resumable_media/_upload.py 
new/google-resumable-media-2.4.0/google/resumable_media/_upload.py
--- old/google-resumable-media-2.3.3/google/resumable_media/_upload.py  
2022-05-19 14:42:00.000000000 +0200
+++ new/google-resumable-media-2.4.0/google/resumable_media/_upload.py  
2022-09-29 23:54:59.000000000 +0200
@@ -794,14 +794,8 @@
             The headers **do not** incorporate the ``_headers`` on the
             current instance.
 
-        Raises:
-            ValueError: If the current upload is not in an invalid state.
-
         .. _sans-I/O: https://sans-io.readthedocs.io/
         """
-        if not self.invalid:
-            raise ValueError("Upload is not in invalid state, no need to 
recover.")
-
         headers = {_helpers.CONTENT_RANGE_HEADER: "bytes */*"}
         return _PUT, self.resumable_url, None, headers
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/google-resumable-media-2.3.3/google/resumable_media/requests/__init__.py 
new/google-resumable-media-2.4.0/google/resumable_media/requests/__init__.py
--- 
old/google-resumable-media-2.3.3/google/resumable_media/requests/__init__.py    
    2022-05-19 14:42:00.000000000 +0200
+++ 
new/google-resumable-media-2.4.0/google/resumable_media/requests/__init__.py    
    2022-09-29 23:54:59.000000000 +0200
@@ -631,7 +631,7 @@
 
    >>> response0 = upload.transmit_next_chunk(transport)
    >>> response0
-   <Response [HTTPStatus.PERMANENT_REDIRECT]>
+   <Response [308]>
    >>> upload.finished
    False
    >>> upload.bytes_uploaded == upload.chunk_size
@@ -639,7 +639,7 @@
    >>>
    >>> response1 = upload.transmit_next_chunk(transport)
    >>> response1
-   <Response [HTTPStatus.PERMANENT_REDIRECT]>
+   <Response [308]>
    >>> upload.finished
    False
    >>> upload.bytes_uploaded == 2 * upload.chunk_size
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/google-resumable-media-2.3.3/google/resumable_media/requests/download.py 
new/google-resumable-media-2.4.0/google/resumable_media/requests/download.py
--- 
old/google-resumable-media-2.3.3/google/resumable_media/requests/download.py    
    2022-05-19 14:42:00.000000000 +0200
+++ 
new/google-resumable-media-2.4.0/google/resumable_media/requests/download.py    
    2022-09-29 23:54:59.000000000 +0200
@@ -36,6 +36,13 @@
   {}
 """
 
+_STREAM_SEEK_ERROR = """\
+Incomplete download for:
+{}
+Error writing to stream while handling a gzip-compressed file download.
+Please restart the download.
+"""
+
 
 class Download(_request_helpers.RequestsMixin, _download.Download):
     """Helper to manage downloading a resource from a Google API.
@@ -206,7 +213,18 @@
 
             self._process_response(result)
 
+            # With decompressive transcoding, GCS serves back the whole file 
regardless of the range request,
+            # thus we reset the stream position to the start of the stream.
+            # See: https://cloud.google.com/storage/docs/transcoding#range
             if self._stream is not None:
+                if _helpers._is_decompressive_transcoding(result, 
self._get_headers):
+                    try:
+                        self._stream.seek(0)
+                    except Exception as exc:
+                        msg = _STREAM_SEEK_ERROR.format(url)
+                        raise Exception(msg) from exc
+                    self._bytes_downloaded = 0
+
                 self._write_to_stream(result)
 
             return result
@@ -379,7 +397,18 @@
 
             self._process_response(result)
 
+            # With decompressive transcoding, GCS serves back the whole file 
regardless of the range request,
+            # thus we reset the stream position to the start of the stream.
+            # See: https://cloud.google.com/storage/docs/transcoding#range
             if self._stream is not None:
+                if _helpers._is_decompressive_transcoding(result, 
self._get_headers):
+                    try:
+                        self._stream.seek(0)
+                    except Exception as exc:
+                        msg = _STREAM_SEEK_ERROR.format(url)
+                        raise Exception(msg) from exc
+                    self._bytes_downloaded = 0
+
                 self._write_to_stream(result)
 
             return result
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/google-resumable-media-2.3.3/google/resumable_media/requests/upload.py 
new/google-resumable-media-2.4.0/google/resumable_media/requests/upload.py
--- old/google-resumable-media-2.3.3/google/resumable_media/requests/upload.py  
2022-05-19 14:42:00.000000000 +0200
+++ new/google-resumable-media-2.4.0/google/resumable_media/requests/upload.py  
2022-09-29 23:54:59.000000000 +0200
@@ -517,14 +517,15 @@
         )
 
     def recover(self, transport):
-        """Recover from a failure.
-
-        This method should be used when a :class:`ResumableUpload` is in an
-        :attr:`~ResumableUpload.invalid` state due to a request failure.
+        """Recover from a failure and check the status of the current upload.
 
         This will verify the progress with the server and make sure the
         current upload is in a valid state before :meth:`transmit_next_chunk`
-        can be used again.
+        can be used again. See 
https://cloud.google.com/storage/docs/performing-resumable-uploads#status-check
+        for more information.
+
+        This method can be used when a :class:`ResumableUpload` is in an
+        :attr:`~ResumableUpload.invalid` state due to a request failure.
 
         Args:
             transport (~requests.Session): A ``requests`` object which can
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/google-resumable-media-2.3.3/google_resumable_media.egg-info/PKG-INFO 
new/google-resumable-media-2.4.0/google_resumable_media.egg-info/PKG-INFO
--- old/google-resumable-media-2.3.3/google_resumable_media.egg-info/PKG-INFO   
2022-05-19 14:44:34.000000000 +0200
+++ new/google-resumable-media-2.4.0/google_resumable_media.egg-info/PKG-INFO   
2022-09-29 23:58:28.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: google-resumable-media
-Version: 2.3.3
+Version: 2.4.0
 Summary: Utilities for Google Media Downloads and Resumable Uploads
 Home-page: https://github.com/googleapis/google-resumable-media-python
 Author: Google Cloud Platform
@@ -12,13 +12,12 @@
 Classifier: License :: OSI Approved :: Apache Software License
 Classifier: Operating System :: OS Independent
 Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.6
 Classifier: Programming Language :: Python :: 3.7
 Classifier: Programming Language :: Python :: 3.8
 Classifier: Programming Language :: Python :: 3.9
 Classifier: Programming Language :: Python :: 3.10
 Classifier: Topic :: Internet
-Requires-Python: >= 3.6
+Requires-Python: >= 3.7
 Provides-Extra: requests
 Provides-Extra: aiohttp
 License-File: LICENSE
@@ -41,16 +40,19 @@
 
 Supported Python Versions
 -------------------------
-Python >= 3.6
+Python >= 3.7
 
 Unsupported Python Versions
 ---------------------------
 
-Python == 2.7, Python == 3.5.
+Python == 2.7, Python == 3.5, Python == 3.6.
 
 The last version of this library compatible with Python 2.7 and 3.5 is
 `google-resumable-media==1.3.3`.
 
+The last version of this library compatible with Python 3.6 is
+`google-resumable-media==2.3.3`.
+
 License
 -------
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/google-resumable-media-2.3.3/setup.py 
new/google-resumable-media-2.4.0/setup.py
--- old/google-resumable-media-2.3.3/setup.py   2022-05-19 14:42:00.000000000 
+0200
+++ new/google-resumable-media-2.4.0/setup.py   2022-09-29 23:54:59.000000000 
+0200
@@ -35,7 +35,7 @@
 
 setuptools.setup(
     name='google-resumable-media',
-    version = "2.3.3",
+    version = "2.4.0",
     description='Utilities for Google Media Downloads and Resumable Uploads',
     author='Google Cloud Platform',
     author_email='googleapis-publis...@google.com',
@@ -50,14 +50,13 @@
     zip_safe=False,
     install_requires=REQUIREMENTS,
     extras_require=EXTRAS_REQUIRE,
-    python_requires='>= 3.6',
+    python_requires='>= 3.7',
     classifiers=[
         'Development Status :: 5 - Production/Stable',
         'Intended Audience :: Developers',
         'License :: OSI Approved :: Apache Software License',
         'Operating System :: OS Independent',
         'Programming Language :: Python :: 3',
-        'Programming Language :: Python :: 3.6',
         'Programming Language :: Python :: 3.7',
         'Programming Language :: Python :: 3.8',
         'Programming Language :: Python :: 3.9',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/google-resumable-media-2.3.3/tests/system/requests/test_download.py 
new/google-resumable-media-2.4.0/tests/system/requests/test_download.py
--- old/google-resumable-media-2.3.3/tests/system/requests/test_download.py     
2022-05-19 14:42:00.000000000 +0200
+++ new/google-resumable-media-2.4.0/tests/system/requests/test_download.py     
2022-09-29 23:54:59.000000000 +0200
@@ -294,6 +294,26 @@
             assert stream.getvalue() == actual_contents
             check_tombstoned(download, authorized_transport)
 
+    def test_download_gzip_w_stored_content_headers(
+        self, add_files, authorized_transport
+    ):
+        # Retrieve the gzip compressed file
+        info = ALL_FILES[-1]
+        actual_contents = self._get_contents(info)
+        blob_name = get_blob_name(info)
+
+        # Create the actual download object.
+        media_url = utils.DOWNLOAD_URL_TEMPLATE.format(blob_name=blob_name)
+        stream = io.BytesIO()
+        download = self._make_one(media_url, stream=stream)
+        # Consume the resource.
+        response = download.consume(authorized_transport)
+        assert response.status_code == http.client.OK
+        assert response.headers.get(_helpers._STORED_CONTENT_ENCODING_HEADER) 
== "gzip"
+        assert response.headers.get("X-Goog-Stored-Content-Length") is not None
+        assert stream.getvalue() == actual_contents
+        check_tombstoned(download, authorized_transport)
+
     def test_extra_headers(self, authorized_transport, secret_file):
         blob_name, data, headers = secret_file
         # Create the actual download object.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/google-resumable-media-2.3.3/tests/system/requests/test_upload.py 
new/google-resumable-media-2.4.0/tests/system/requests/test_upload.py
--- old/google-resumable-media-2.3.3/tests/system/requests/test_upload.py       
2022-05-19 14:42:00.000000000 +0200
+++ new/google-resumable-media-2.4.0/tests/system/requests/test_upload.py       
2022-09-29 23:54:59.000000000 +0200
@@ -20,7 +20,7 @@
 import urllib.parse
 
 import pytest  # type: ignore
-import mock
+from unittest import mock
 
 from google.resumable_media import common
 from google import resumable_media
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/google-resumable-media-2.3.3/tests/unit/requests/test__helpers.py 
new/google-resumable-media-2.4.0/tests/unit/requests/test__helpers.py
--- old/google-resumable-media-2.3.3/tests/unit/requests/test__helpers.py       
2022-05-19 14:42:00.000000000 +0200
+++ new/google-resumable-media-2.4.0/tests/unit/requests/test__helpers.py       
2022-09-29 23:54:59.000000000 +0200
@@ -14,7 +14,7 @@
 
 import http.client
 
-import mock
+from unittest import mock
 import pytest  # type: ignore
 
 import requests.exceptions
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/google-resumable-media-2.3.3/tests/unit/requests/test_download.py 
new/google-resumable-media-2.4.0/tests/unit/requests/test_download.py
--- old/google-resumable-media-2.3.3/tests/unit/requests/test_download.py       
2022-05-19 14:42:00.000000000 +0200
+++ new/google-resumable-media-2.4.0/tests/unit/requests/test_download.py       
2022-09-29 23:54:59.000000000 +0200
@@ -15,7 +15,7 @@
 import http.client
 import io
 
-import mock
+from unittest import mock
 import pytest  # type: ignore
 
 from google.resumable_media import common
@@ -395,6 +395,45 @@
         range_bytes = "bytes={:d}-{:d}".format(offset, end)
         assert download._headers["range"] == range_bytes
 
+    def test_consume_gzip_reset_stream_w_bytes_downloaded(self):
+        stream = io.BytesIO()
+        chunks = (b"up down ", b"charlie ", b"brown")
+        end = 65536
+
+        download = download_mod.Download(
+            EXAMPLE_URL, stream=stream, end=end, headers=None, checksum="md5"
+        )
+        transport = mock.Mock(spec=["request"])
+
+        # Mock a decompressive transcoding retry operation with bytes already 
downloaded in the stream
+        headers = {_helpers._STORED_CONTENT_ENCODING_HEADER: "gzip"}
+        transport.request.return_value = _mock_response(chunks=chunks, 
headers=headers)
+        offset = 16
+        download._bytes_downloaded = offset
+        download.consume(transport)
+
+        assert stream.getvalue() == b"".join(chunks)
+        assert download._bytes_downloaded == len(b"".join(chunks))
+
+    def test_consume_gzip_reset_stream_error(self):
+        stream = io.BytesIO()
+        chunks = (b"up down ", b"charlie ", b"brown")
+        end = 65536
+
+        download = download_mod.Download(
+            EXAMPLE_URL, stream=stream, end=end, headers=None, checksum="md5"
+        )
+        transport = mock.Mock(spec=["request"])
+
+        # Mock a stream seek error while resuming a decompressive transcoding 
download
+        stream.seek = mock.Mock(side_effect=OSError("mock stream seek error"))
+        headers = {_helpers._STORED_CONTENT_ENCODING_HEADER: "gzip"}
+        transport.request.return_value = _mock_response(chunks=chunks, 
headers=headers)
+        offset = 16
+        download._bytes_downloaded = offset
+        with pytest.raises(Exception):
+            download.consume(transport)
+
 
 class TestRawDownload(object):
     def test__write_to_stream_no_hash_check(self):
@@ -772,6 +811,49 @@
         range_bytes = "bytes={:d}-{:d}".format(offset, end)
         assert download._headers["range"] == range_bytes
 
+    def test_consume_gzip_reset_stream_w_bytes_downloaded(self):
+        stream = io.BytesIO()
+        chunks = (b"up down ", b"charlie ", b"brown")
+        end = 65536
+
+        download = download_mod.RawDownload(
+            EXAMPLE_URL, stream=stream, end=end, headers=None, checksum="md5"
+        )
+        transport = mock.Mock(spec=["request"])
+
+        # Mock a decompressive transcoding retry operation with bytes already 
downloaded in the stream
+        headers = {_helpers._STORED_CONTENT_ENCODING_HEADER: "gzip"}
+        transport.request.return_value = _mock_raw_response(
+            chunks=chunks, headers=headers
+        )
+        offset = 16
+        download._bytes_downloaded = offset
+        download.consume(transport)
+
+        assert stream.getvalue() == b"".join(chunks)
+        assert download._bytes_downloaded == len(b"".join(chunks))
+
+    def test_consume_gzip_reset_stream_error(self):
+        stream = io.BytesIO()
+        chunks = (b"up down ", b"charlie ", b"brown")
+        end = 65536
+
+        download = download_mod.RawDownload(
+            EXAMPLE_URL, stream=stream, end=end, headers=None, checksum="md5"
+        )
+        transport = mock.Mock(spec=["request"])
+
+        # Mock a stream seek error while resuming a decompressive transcoding 
download
+        stream.seek = mock.Mock(side_effect=OSError("mock stream seek error"))
+        headers = {_helpers._STORED_CONTENT_ENCODING_HEADER: "gzip"}
+        transport.request.return_value = _mock_raw_response(
+            chunks=chunks, headers=headers
+        )
+        offset = 16
+        download._bytes_downloaded = offset
+        with pytest.raises(Exception):
+            download.consume(transport)
+
 
 class TestChunkedDownload(object):
     @staticmethod
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/google-resumable-media-2.3.3/tests/unit/requests/test_upload.py 
new/google-resumable-media-2.4.0/tests/unit/requests/test_upload.py
--- old/google-resumable-media-2.3.3/tests/unit/requests/test_upload.py 
2022-05-19 14:42:00.000000000 +0200
+++ new/google-resumable-media-2.4.0/tests/unit/requests/test_upload.py 
2022-09-29 23:54:59.000000000 +0200
@@ -16,7 +16,7 @@
 import io
 import json
 
-import mock
+from unittest import mock
 
 import google.resumable_media.requests.upload as upload_mod
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/google-resumable-media-2.3.3/tests/unit/test__download.py 
new/google-resumable-media-2.4.0/tests/unit/test__download.py
--- old/google-resumable-media-2.3.3/tests/unit/test__download.py       
2022-05-19 14:42:00.000000000 +0200
+++ new/google-resumable-media-2.4.0/tests/unit/test__download.py       
2022-09-29 23:54:59.000000000 +0200
@@ -15,7 +15,7 @@
 import http.client
 import io
 
-import mock
+from unittest import mock
 import pytest  # type: ignore
 
 from google.resumable_media import _download
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/google-resumable-media-2.3.3/tests/unit/test__helpers.py 
new/google-resumable-media-2.4.0/tests/unit/test__helpers.py
--- old/google-resumable-media-2.3.3/tests/unit/test__helpers.py        
2022-05-19 14:42:00.000000000 +0200
+++ new/google-resumable-media-2.4.0/tests/unit/test__helpers.py        
2022-09-29 23:54:59.000000000 +0200
@@ -17,7 +17,7 @@
 import hashlib
 import http.client
 
-import mock
+from unittest import mock
 import pytest  # type: ignore
 
 from google.resumable_media import _helpers
@@ -425,6 +425,31 @@
         assert generation_header == self.GENERATION_VALUE
 
 
+class Test__is_decompressive_transcoding(object):
+    def test_empty_value(self):
+        headers = {}
+        response = _mock_response(headers=headers)
+        assert _helpers._is_decompressive_transcoding(response, _get_headers) 
is False
+
+    def test_gzip_in_headers(self):
+        headers = {_helpers._STORED_CONTENT_ENCODING_HEADER: "gzip"}
+        response = _mock_response(headers=headers)
+        assert _helpers._is_decompressive_transcoding(response, _get_headers) 
is True
+
+    def test_gzip_not_in_headers(self):
+        headers = {_helpers._STORED_CONTENT_ENCODING_HEADER: "identity"}
+        response = _mock_response(headers=headers)
+        assert _helpers._is_decompressive_transcoding(response, _get_headers) 
is False
+
+    def test_gzip_w_content_encoding_in_headers(self):
+        headers = {
+            _helpers._STORED_CONTENT_ENCODING_HEADER: "gzip",
+            _helpers.CONTENT_ENCODING_HEADER: "gzip",
+        }
+        response = _mock_response(headers=headers)
+        assert _helpers._is_decompressive_transcoding(response, _get_headers) 
is False
+
+
 class Test__get_generation_from_url(object):
 
     GENERATION_VALUE = 1641590104888641
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/google-resumable-media-2.3.3/tests/unit/test__upload.py 
new/google-resumable-media-2.4.0/tests/unit/test__upload.py
--- old/google-resumable-media-2.3.3/tests/unit/test__upload.py 2022-05-19 
14:42:00.000000000 +0200
+++ new/google-resumable-media-2.4.0/tests/unit/test__upload.py 2022-09-29 
23:54:59.000000000 +0200
@@ -16,7 +16,7 @@
 import io
 import sys
 
-import mock
+from unittest import mock
 import pytest  # type: ignore
 
 from google.resumable_media import _helpers
@@ -951,8 +951,13 @@
         upload = _upload.ResumableUpload(RESUMABLE_URL, ONE_MB)
         assert not upload.invalid
 
-        with pytest.raises(ValueError):
-            upload._prepare_recover_request()
+        method, url, payload, headers = upload._prepare_recover_request()
+        assert method == "PUT"
+        assert url == upload.resumable_url
+        assert payload is None
+        assert headers == {"content-range": "bytes */*"}
+        # Make sure headers are untouched.
+        assert upload._headers == {}
 
     def test__prepare_recover_request(self):
         upload = _upload.ResumableUpload(RESUMABLE_URL, ONE_MB)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/google-resumable-media-2.3.3/tests/unit/test_common.py 
new/google-resumable-media-2.4.0/tests/unit/test_common.py
--- old/google-resumable-media-2.3.3/tests/unit/test_common.py  2022-05-19 
14:42:00.000000000 +0200
+++ new/google-resumable-media-2.4.0/tests/unit/test_common.py  2022-09-29 
23:54:59.000000000 +0200
@@ -12,7 +12,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-import mock
+from unittest import mock
 import pytest  # type: ignore
 
 from google.resumable_media import common

++++++ python-google-resumable-media-no-mock.patch ++++++
--- /var/tmp/diff_new_pack.Bjlmgw/_old  2022-10-17 14:58:46.630216899 +0200
+++ /var/tmp/diff_new_pack.Bjlmgw/_new  2022-10-17 14:58:46.634216907 +0200
@@ -1,106 +1,3 @@
-diff --git a/tests/system/requests/test_upload.py 
b/tests/system/requests/test_upload.py
-index 3dc92077..6f6991e8 100644
---- a/tests/system/requests/test_upload.py
-+++ b/tests/system/requests/test_upload.py
-@@ -20,7 +20,7 @@
- import urllib.parse
- 
- import pytest  # type: ignore
--import mock
-+from unittest import mock
- 
- from google.resumable_media import common
- from google import resumable_media
-diff --git a/tests/unit/requests/test__helpers.py 
b/tests/unit/requests/test__helpers.py
-index 0d4c7d17..dc940f2c 100644
---- a/tests/unit/requests/test__helpers.py
-+++ b/tests/unit/requests/test__helpers.py
-@@ -14,7 +14,7 @@
- 
- import http.client
- 
--import mock
-+from unittest import mock
- import pytest  # type: ignore
- 
- import requests.exceptions
-diff --git a/tests/unit/requests/test_download.py 
b/tests/unit/requests/test_download.py
-index 210973d7..ace0df7c 100644
---- a/tests/unit/requests/test_download.py
-+++ b/tests/unit/requests/test_download.py
-@@ -15,7 +15,7 @@
- import http.client
- import io
- 
--import mock
-+from unittest import mock
- import pytest  # type: ignore
- 
- from google.resumable_media import common
-diff --git a/tests/unit/requests/test_upload.py 
b/tests/unit/requests/test_upload.py
-index 3694c750..231bec85 100644
---- a/tests/unit/requests/test_upload.py
-+++ b/tests/unit/requests/test_upload.py
-@@ -16,7 +16,7 @@
- import io
- import json
- 
--import mock
-+from unittest import mock
- 
- import google.resumable_media.requests.upload as upload_mod
- 
-diff --git a/tests/unit/test__download.py b/tests/unit/test__download.py
-index 46026b16..21a232eb 100644
---- a/tests/unit/test__download.py
-+++ b/tests/unit/test__download.py
-@@ -15,7 +15,7 @@
- import http.client
- import io
- 
--import mock
-+from unittest import mock
- import pytest  # type: ignore
- 
- from google.resumable_media import _download
-diff --git a/tests/unit/test__helpers.py b/tests/unit/test__helpers.py
-index feedeb18..0bfbae42 100644
---- a/tests/unit/test__helpers.py
-+++ b/tests/unit/test__helpers.py
-@@ -17,7 +17,7 @@
- import hashlib
- import http.client
- 
--import mock
-+from unittest import mock
- import pytest  # type: ignore
- 
- from google.resumable_media import _helpers
-diff --git a/tests/unit/test__upload.py b/tests/unit/test__upload.py
-index d5f82089..110ed775 100644
---- a/tests/unit/test__upload.py
-+++ b/tests/unit/test__upload.py
-@@ -16,7 +16,7 @@
- import io
- import sys
- 
--import mock
-+from unittest import mock
- import pytest  # type: ignore
- 
- from google.resumable_media import _helpers
-diff --git a/tests/unit/test_common.py b/tests/unit/test_common.py
-index a8572bea..d96840c1 100644
---- a/tests/unit/test_common.py
-+++ b/tests/unit/test_common.py
-@@ -12,7 +12,7 @@
- # See the License for the specific language governing permissions and
- # limitations under the License.
- 
--import mock
-+from unittest import mock
- import pytest  # type: ignore
- 
- from google.resumable_media import common
 
+(No newline at EOF)
 

Reply via email to