Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

google-cloud-datastore no longer works with freezegun #3284

Closed
remcohaszing opened this issue Apr 11, 2017 · 11 comments
Closed

google-cloud-datastore no longer works with freezegun #3284

remcohaszing opened this issue Apr 11, 2017 · 11 comments
Assignees
Labels
priority: p2 Moderately-important priority. Fix may not be included in next release. type: question Request for information or clarification. Not an issue.

Comments

@remcohaszing
Copy link

remcohaszing commented Apr 11, 2017

As of google-cloud-datastore 1.0.0 it no longer works together with freezegun.

Workaround: downgrade to google-cloud-datastore 0.23.0

  1. OS type and version:

Ubuntu 17.04, but it was also reproduced on 16.04.

  1. Python version and virtual environment information python --version
$ python --version
Python 3.6.0+
  1. google-cloud-python version pip show google-cloud, pip show google-<service> or pip freeze
$ pip list | grep google-cloud
gapic-google-cloud-datastore-v1 0.15.3 
google-cloud-core               0.24.0 
google-cloud-datastore          1.0.0  
google-cloud-storage            1.0.0  
proto-google-cloud-datastore-v1 0.90.3
  1. Stacktrace if available
py.test --tb native
Traceback (most recent call last):
  File "/home/remco/.local/share/virtualenvs/tmp-35dac56d418be2c/lib/python3.6/site-packages/google/gax/retry.py", line 120, in inner
    return to_call(*args)
  File "/home/remco/.local/share/virtualenvs/tmp-35dac56d418be2c/lib/python3.6/site-packages/google/gax/retry.py", line 68, in inner
    return a_func(*updated_args, **kwargs)
  File "/home/remco/.local/share/virtualenvs/tmp-35dac56d418be2c/lib/python3.6/site-packages/grpc/_channel.py", line 507, in __call__
    return _end_unary_response_blocking(state, call, False, deadline)
  File "/home/remco/.local/share/virtualenvs/tmp-35dac56d418be2c/lib/python3.6/site-packages/grpc/_channel.py", line 455, in _end_unary_response_blocking
    raise _Rendezvous(state, None, None, deadline)
grpc._channel._Rendezvous: <_Rendezvous of RPC that terminated with (StatusCode.INTERNAL, Received RST_STREAM with error code 2)>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/remco/.local/share/virtualenvs/tmp-35dac56d418be2c/lib/python3.6/site-packages/google/cloud/datastore/_gax.py", line 74, in _catch_remap_gax_error
    yield
  File "/home/remco/.local/share/virtualenvs/tmp-35dac56d418be2c/lib/python3.6/site-packages/google/cloud/datastore/_gax.py", line 173, in commit
    return super(GAPICDatastoreAPI, self).commit(*args, **kwargs)
  File "/home/remco/.local/share/virtualenvs/tmp-35dac56d418be2c/lib/python3.6/site-packages/google/cloud/gapic/datastore/v1/datastore_client.py", line 345, in commit
    return self._commit(request, options)
  File "/home/remco/.local/share/virtualenvs/tmp-35dac56d418be2c/lib/python3.6/site-packages/google/gax/api_callable.py", line 419, in inner
    return api_caller(api_call, this_settings, request)
  File "/home/remco/.local/share/virtualenvs/tmp-35dac56d418be2c/lib/python3.6/site-packages/google/gax/api_callable.py", line 407, in base_caller
    return api_call(*args)
  File "/home/remco/.local/share/virtualenvs/tmp-35dac56d418be2c/lib/python3.6/site-packages/google/gax/api_callable.py", line 368, in inner
    return a_func(*args, **kwargs)
  File "/home/remco/.local/share/virtualenvs/tmp-35dac56d418be2c/lib/python3.6/site-packages/google/gax/retry.py", line 126, in inner
    ' classified as transient', exception)
google.gax.errors.RetryError: GaxError(Exception occurred in retry method that was not classified as transient, caused by <_Rendezvous of RPC that terminated with (StatusCode.INTERNAL, Received RST_STREAM with error code 2)>)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/remco/example/test.py", line 16, in test_put_frozen
    client.put(entity)
  File "/home/remco/.local/share/virtualenvs/tmp-35dac56d418be2c/lib/python3.6/site-packages/google/cloud/datastore/client.py", line 384, in put
    self.put_multi(entities=[entity])
  File "/home/remco/.local/share/virtualenvs/tmp-35dac56d418be2c/lib/python3.6/site-packages/google/cloud/datastore/client.py", line 411, in put_multi
    current.commit()
  File "/home/remco/.local/share/virtualenvs/tmp-35dac56d418be2c/lib/python3.6/site-packages/google/cloud/datastore/batch.py", line 273, in commit
    self._commit()
  File "/home/remco/.local/share/virtualenvs/tmp-35dac56d418be2c/lib/python3.6/site-packages/google/cloud/datastore/batch.py", line 249, in _commit
    self.project, mode, self._mutations, transaction=self._id)
  File "/home/remco/.local/share/virtualenvs/tmp-35dac56d418be2c/lib/python3.6/site-packages/google/cloud/datastore/_gax.py", line 173, in commit
    return super(GAPICDatastoreAPI, self).commit(*args, **kwargs)
  File "/usr/lib/python3.6/contextlib.py", line 100, in __exit__
    self.gen.throw(type, value, traceback)
  File "/home/remco/.local/share/virtualenvs/tmp-35dac56d418be2c/lib/python3.6/site-packages/google/cloud/datastore/_gax.py", line 82, in _catch_remap_gax_error
    six.reraise(error_class, new_exc, sys.exc_info()[2])
  File "/home/remco/.local/share/virtualenvs/tmp-35dac56d418be2c/lib/python3.6/site-packages/six.py", line 685, in reraise
    raise value.with_traceback(tb)
  File "/home/remco/.local/share/virtualenvs/tmp-35dac56d418be2c/lib/python3.6/site-packages/google/cloud/datastore/_gax.py", line 74, in _catch_remap_gax_error
    yield
  File "/home/remco/.local/share/virtualenvs/tmp-35dac56d418be2c/lib/python3.6/site-packages/google/cloud/datastore/_gax.py", line 173, in commit
    return super(GAPICDatastoreAPI, self).commit(*args, **kwargs)
  File "/home/remco/.local/share/virtualenvs/tmp-35dac56d418be2c/lib/python3.6/site-packages/google/cloud/gapic/datastore/v1/datastore_client.py", line 345, in commit
    return self._commit(request, options)
  File "/home/remco/.local/share/virtualenvs/tmp-35dac56d418be2c/lib/python3.6/site-packages/google/gax/api_callable.py", line 419, in inner
    return api_caller(api_call, this_settings, request)
  File "/home/remco/.local/share/virtualenvs/tmp-35dac56d418be2c/lib/python3.6/site-packages/google/gax/api_callable.py", line 407, in base_caller
    return api_call(*args)
  File "/home/remco/.local/share/virtualenvs/tmp-35dac56d418be2c/lib/python3.6/site-packages/google/gax/api_callable.py", line 368, in inner
    return a_func(*args, **kwargs)
  File "/home/remco/.local/share/virtualenvs/tmp-35dac56d418be2c/lib/python3.6/site-packages/google/gax/retry.py", line 126, in inner
    ' classified as transient', exception)
google.cloud.exceptions.InternalServerError: 500 Received RST_STREAM with error code 2
  1. Steps to reproduce

Decorate a function using freezegun.freeze_time from freezegun and put a gcloud datastore entity.

  1. Code example
import google.cloud.datastore
import pytest
from freezegun import freeze_time


# Works
def test_put():
    client = google.cloud.datastore.Client()
    entity = google.cloud.datastore.Entity(key=client.key('spam'))
    client.put(entity)


# Fails
@freeze_time('3216-08-04')
def test_put_frozen():
    client = google.cloud.datastore.Client()
    entity = google.cloud.datastore.Entity(key=client.key('spam'))
    client.put(entity)

The datastore was launched in the background using the following code:

def start_datastore():
    """
    Start an in memory gcloud datastore emulator.

    The datastore and all of its subprocesses are killed when the Python
    interpreter is shut down.

    Raises:
        RuntimeError: If the datastore failed to start.

    """
    tmpdir = tempfile.TemporaryDirectory()
    atexit.register(partial(tmpdir.cleanup))
    command = (
        'gcloud',
        'beta',
        'emulators',
        'datastore',
        'start',
        '--project', os.environ['GOOGLE_CLOUD_PROJECT'],
        '--no-store-on-disk',
        '--data-dir', tmpdir.name,
        '--consistency', '1.0'
    )
    proc = subprocess.Popen(
        command,
        stderr=subprocess.PIPE,
        preexec_fn=os.setsid)
    atexit.register(partial(os.killpg, os.getpgid(proc.pid), signal.SIGTERM))
    logs = []
    for lineno, line in enumerate(proc.stderr):
        line = line.decode()
        logs.append(line)
        if 'Dev App Server is now running' in line:
            return tmpdir
        # At the time of writing, 22 lines were printed before the
        # server was up and running. A small buffer is allowed in case
        # changes are introduced in the logging output.
        if lineno > 40:
            break
    raise RuntimeError('Unable to start datastore\n' + ''.join(logs))
@lukesneeringer
Copy link
Contributor

Hi @remcohaszing,
Thanks for reporting, and for the level of detail.

That traceback looks like an internal server error to me. Is this a repeatable error, or did you get it once and downgrade? I think it is probably (almost certainly) unrelated to the version difference (particularly because the version difference had no actual code change, I do not think).

@lukesneeringer lukesneeringer added priority: p2 Moderately-important priority. Fix may not be included in next release. type: question Request for information or clarification. Not an issue. labels Apr 11, 2017
@remcohaszing
Copy link
Author

I managed to repeat this consistently. All of my tests succeed when using version 0.23.0, but all tests decorated with freeze_time fail when using version 1.0.0. I've upgraded the packages, downgraded them, did some full virtualenv wipes for fresh installs, etc.

I've tested this with the google-cloud-sdk-datastore-emulator installed using apt on my machine and in a Docker image in which I have recently upgraded the google-cloud-sdk tar download from 143.0.0 to 150.0.0.

Behaviour is very consistent. All that affects the tests' success is the version of google-cloud-datastore.

@lukesneeringer
Copy link
Contributor

Interesting. Thank you. I will look into it.

@dhermes dhermes changed the title google-cloud-datastore no longer works with freezefun google-cloud-datastore no longer works with freezegun Apr 11, 2017
@dhermes
Copy link
Contributor

dhermes commented Apr 11, 2017

So a primary difference between 0.23.0 and 1.0.0 is the usage of the GAPIC generated surface for the client (see the release notes)

@remcohaszing Can you manually pass _use_grpc=False when creating a Client and see if the issue persists? (This way we can zoom in on it.)

@remcohaszing
Copy link
Author

remcohaszing commented Apr 11, 2017

Adding _use_grpc=False still makes the test fail, but with another error.

The test without freezegun still works.

import google.cloud.datastore
import pytest
from freezegun import freeze_time


# Works
def test_put():
    client = google.cloud.datastore.Client(_use_grpc=False)
    entity = google.cloud.datastore.Entity(key=client.key('spam'))
    client.put(entity)


# Fails
@freeze_time('3216-08-04')
def test_put_frozen():
    client = google.cloud.datastore.Client(_use_grpc=False)
    entity = google.cloud.datastore.Entity(key=client.key('spam'))
    client.put(entity)

Stack trace from test_put_frozen:

Traceback (most recent call last):
  File "/home/remco/test/test.py", line 18, in test_put_frozen
    client.put(entity)
  File "/home/remco/.local/share/virtualenvs/tmp-685d52736dc8093/lib/python3.6/site-packages/google/cloud/datastore/client.py", line 384, in put
    self.put_multi(entities=[entity])
  File "/home/remco/.local/share/virtualenvs/tmp-685d52736dc8093/lib/python3.6/site-packages/google/cloud/datastore/client.py", line 411, in put_multi
    current.commit()
  File "/home/remco/.local/share/virtualenvs/tmp-685d52736dc8093/lib/python3.6/site-packages/google/cloud/datastore/batch.py", line 273, in commit
    self._commit()
  File "/home/remco/.local/share/virtualenvs/tmp-685d52736dc8093/lib/python3.6/site-packages/google/cloud/datastore/batch.py", line 249, in _commit
    self.project, mode, self._mutations, transaction=self._id)
  File "/home/remco/.local/share/virtualenvs/tmp-685d52736dc8093/lib/python3.6/site-packages/google/cloud/datastore/_http.py", line 265, in commit
    request_pb, _datastore_pb2.CommitResponse)
  File "/home/remco/.local/share/virtualenvs/tmp-685d52736dc8093/lib/python3.6/site-packages/google/cloud/datastore/_http.py", line 112, in _rpc
    http, project, method, req_data, base_url)
  File "/home/remco/.local/share/virtualenvs/tmp-685d52736dc8093/lib/python3.6/site-packages/google/cloud/datastore/_http.py", line 72, in _request
    uri=api_url, method='POST', headers=headers, body=data)
  File "/home/remco/.local/share/virtualenvs/tmp-685d52736dc8093/lib/python3.6/site-packages/google_auth_httplib2.py", line 187, in request
    self._request, method, uri, request_headers)
  File "/home/remco/.local/share/virtualenvs/tmp-685d52736dc8093/lib/python3.6/site-packages/google/auth/credentials.py", line 118, in before_request
    self.refresh(request)
  File "/home/remco/.local/share/virtualenvs/tmp-685d52736dc8093/lib/python3.6/site-packages/google/oauth2/service_account.py", line 310, in refresh
    request, self._token_uri, assertion)
  File "/home/remco/.local/share/virtualenvs/tmp-685d52736dc8093/lib/python3.6/site-packages/google/oauth2/_client.py", line 143, in jwt_grant
    response_data = _token_endpoint_request(request, token_uri, body)
  File "/home/remco/.local/share/virtualenvs/tmp-685d52736dc8093/lib/python3.6/site-packages/google/oauth2/_client.py", line 109, in _token_endpoint_request
    _handle_error_response(response_body)
  File "/home/remco/.local/share/virtualenvs/tmp-685d52736dc8093/lib/python3.6/site-packages/google/oauth2/_client.py", line 59, in _handle_error_response
    error_details, response_body)
google.auth.exceptions.RefreshError: ('invalid_grant: Invalid JWT: Token must be a short-lived token and in a reasonable timeframe', '{\n  "error" : "invalid_grant",\n  "error_description" : "Invalid JWT: Token must be a short-lived token and in a reasonable timeframe"\n}')

@dhermes
Copy link
Contributor

dhermes commented Apr 11, 2017

Well that's at least comforting. Your test is trying to make a live request to the auth server with a bad time. That's the buyer beware of using freezegun. You'll probably want to use a mocked out credentials instance (e.g.).

I'm not sure what other timing issues you're having in GAPIC / gRPC but there's not much we can do about it (aside from better stacktraces, which were pretty non-helpful for the gRPC case).

@remcohaszing
Copy link
Author

I'm using google-cloud-datastore and google-cloud-storage. My tests for GCloud storage are fully based on mocks, because there is no emulator for this. The ones on google-cloud-datastore use an actual datastore emulator, as I've experienced this catches far more bugs than when mocking everything. Because of this, I'm only having this issue with the datastore.

Since the issue occurs regardless of the datastore emulator version, I think this should be fixable.

I don't know much about internals of google-cloud-* packages, GAPIC, or gRPC. What's the difference between google-cloud-datastore versions 0.23.0 and 1.0.0? Were these packages bumped? Are they new dependencies? If so, is this an upstream issue for those packages?

@dhermes
Copy link
Contributor

dhermes commented Apr 12, 2017

@remcohaszing The issue is that you aren't mocking auth, but you are mocking the system time, so when your tests try to communicate with the auth server, bad things happen.

@remcohaszing
Copy link
Author

I couldn't figure out a proper way to mock auth. Instead, I've created the following pytest fixture to work around this issue:

import datetime

import pytest
from freezegun import freeze_time
from pytz import utc


@pytest.fixture
def now():
    """
    Freeze the current time.

    This allows to freeze time and make assertions while working around
    https://github.com/GoogleCloudPlatform/google-cloud-python/issues/3284

    """
    now = datetime.datetime.utcnow().replace(tzinfo=utc)
    with freeze_time(now):
        yield now

@dhermes
Copy link
Contributor

dhermes commented Apr 19, 2017

@remcohaszing I'd recommend just starting with a mock credentials object and passing it to a client:

credentials = mock.Mock(spec=[])
client = storage.Client(credentials=credentials, project=project)

then build up the mock slowly as you find the AttributeError-s in your tests. The snippet I linked to before should work just fine, and I'm happy to chat in Google Hangouts if you are having issues getting it off the ground.

I'm closing this issue out, it seems to be "resolved" in some sense.

@dhermes dhermes closed this as completed Apr 19, 2017
@theacodes
Copy link
Contributor

theacodes commented Apr 19, 2017

here's a simple mock credentials class you can work from.

parthea pushed a commit that referenced this issue Sep 22, 2023
* Add XMPP Sample

* Add Dataproc Sample

* Add more region tags

* Minor dataproc fixes

* Fix Dataproc e2e for Python 3

* Update reqs

* updating requirements [(#358)](GoogleCloudPlatform/python-docs-samples#358)

Change-Id: I6177a17fad021e26ed76679d9db34848c17b62a8

* Update Reqs

* Wrong arg description

* Auto-update dependencies. [(#456)](GoogleCloudPlatform/python-docs-samples#456)

* Auto-update dependencies. [(#459)](GoogleCloudPlatform/python-docs-samples#459)

* Fix import order lint errors

Change-Id: Ieaf7237fc6f925daec46a07d2e81a452b841198a

* bump

Change-Id: I02e7767d13ba267ee9fc72c5b68a57013bb8b8d3

* Auto-update dependencies. [(#486)](GoogleCloudPlatform/python-docs-samples#486)

* Auto-update dependencies. [(#540)](GoogleCloudPlatform/python-docs-samples#540)

* Auto-update dependencies. [(#542)](GoogleCloudPlatform/python-docs-samples#542)

* Move to google-cloud [(#544)](GoogleCloudPlatform/python-docs-samples#544)

* Auto-update dependencies. [(#584)](GoogleCloudPlatform/python-docs-samples#584)

* Auto-update dependencies. [(#629)](GoogleCloudPlatform/python-docs-samples#629)

* Update samples to support latest Google Cloud Python [(#656)](GoogleCloudPlatform/python-docs-samples#656)

* Update README.md [(#691)](GoogleCloudPlatform/python-docs-samples#691)

* Auto-update dependencies. [(#715)](GoogleCloudPlatform/python-docs-samples#715)

* Auto-update dependencies. [(#735)](GoogleCloudPlatform/python-docs-samples#735)

* Auto-update dependencies.
* Fix language OCR sample
* Remove unused import

* Auto-update dependencies. [(#790)](GoogleCloudPlatform/python-docs-samples#790)

* Remove usage of GoogleCredentials [(#810)](GoogleCloudPlatform/python-docs-samples#810)

* Fix a typo [(#813)](GoogleCloudPlatform/python-docs-samples#813)

* Remove cloud config fixture [(#887)](GoogleCloudPlatform/python-docs-samples#887)

* Remove cloud config fixture

* Fix client secrets

* Fix bigtable instance

* Fix reference to our testing tools

* Auto-update dependencies. [(#914)](GoogleCloudPlatform/python-docs-samples#914)

* Auto-update dependencies.

* xfail the error reporting test

* Fix lint

* Auto-update dependencies. [(#922)](GoogleCloudPlatform/python-docs-samples#922)

* Auto-update dependencies.

* Fix pubsub iam samples

* Auto-update dependencies. [(#1005)](GoogleCloudPlatform/python-docs-samples#1005)

* Auto-update dependencies.

* Fix bigtable lint

* Fix IOT iam interaction

* Auto-update dependencies. [(#1011)](GoogleCloudPlatform/python-docs-samples#1011)

* Properly forwarding the "region" parameter provided as an input argument. [(#1029)](GoogleCloudPlatform/python-docs-samples#1029)

* Auto-update dependencies. [(#1055)](GoogleCloudPlatform/python-docs-samples#1055)

* Auto-update dependencies.

* Explicitly use latest bigtable client

Change-Id: Id71e9e768f020730e4ca9514a0d7ebaa794e7d9e

* Revert language update for now

Change-Id: I8867f154e9a5aae00d0047c9caf880e5e8f50c53

* Remove pdb. smh

Change-Id: I5ff905fadc026eebbcd45512d4e76e003e3b2b43

* Fix region handling and allow to use an existing cluster. [(#1053)](GoogleCloudPlatform/python-docs-samples#1053)

* Auto-update dependencies. [(#1094)](GoogleCloudPlatform/python-docs-samples#1094)

* Auto-update dependencies.

* Relax assertions in the ocr_nl sample

Change-Id: I6d37e5846a8d6dd52429cb30d501f448c52cbba1

* Drop unused logging apiary samples

Change-Id: I545718283773cb729a5e0def8a76ebfa40829d51

* Auto-update dependencies. [(#1133)](GoogleCloudPlatform/python-docs-samples#1133)

* Auto-update dependencies.

* Fix missing http library

Change-Id: I99faa600f2f3f1f50f57694fc9835d7f35bda250

* Auto-update dependencies. [(#1186)](GoogleCloudPlatform/python-docs-samples#1186)

* Auto-update dependencies. [(#1199)](GoogleCloudPlatform/python-docs-samples#1199)

* Auto-update dependencies.

* Fix iot lint

Change-Id: I6289e093bdb35e38f9e9bfc3fbc3df3660f9a67e

* Fixed Failed Kokoro Test (Dataproc) [(#1203)](GoogleCloudPlatform/python-docs-samples#1203)

* Fixed Failed Kokoro Test (Dataproc)

* Fixed Lint Error

* Update dataproc_e2e_test.py

* Update dataproc_e2e_test.py

* Fixing More Lint Errors

* Fixed b/65407087

* Revert "Merge branch 'master' of https://github.com/michaelawyu/python-docs-samples"

This reverts commit 1614c7d3ef33630a8ab095792b27fc25fd91f0ad, reversing
changes made to cd1dbfd25997a154a8a85cc754cc2a85b18a63c4.

* Revert "Fixed b/65407087"

This reverts commit cd1dbfd25997a154a8a85cc754cc2a85b18a63c4.

* Fixed Lint Error

* Fixed Lint Error

* Auto-update dependencies. [(#1208)](GoogleCloudPlatform/python-docs-samples#1208)

* Dataproc GCS sample plus doc touchups [(#1151)](GoogleCloudPlatform/python-docs-samples#1151)

* Auto-update dependencies. [(#1217)](GoogleCloudPlatform/python-docs-samples#1217)

* Auto-update dependencies. [(#1239)](GoogleCloudPlatform/python-docs-samples#1239)

* Added "Open in Cloud Shell" buttons to README files [(#1254)](GoogleCloudPlatform/python-docs-samples#1254)

* Auto-update dependencies. [(#1282)](GoogleCloudPlatform/python-docs-samples#1282)

* Auto-update dependencies.

* Fix storage acl sample

Change-Id: I413bea899fdde4c4859e4070a9da25845b81f7cf

* Auto-update dependencies. [(#1309)](GoogleCloudPlatform/python-docs-samples#1309)

* Auto-update dependencies. [(#1320)](GoogleCloudPlatform/python-docs-samples#1320)

* Auto-update dependencies. [(#1355)](GoogleCloudPlatform/python-docs-samples#1355)

* Auto-update dependencies. [(#1359)](GoogleCloudPlatform/python-docs-samples#1359)

* Auto-update dependencies.

* update Dataproc region tags to standard format [(#1826)](GoogleCloudPlatform/python-docs-samples#1826)

* Update submit_job_to_cluster.py [(#1708)](GoogleCloudPlatform/python-docs-samples#1708)

switch region to new 'global' region and remove unnecessary function.

* Auto-update dependencies. [(#1846)](GoogleCloudPlatform/python-docs-samples#1846)

ACK, merging.

* Need separate install for google-cloud-storage [(#1863)](GoogleCloudPlatform/python-docs-samples#1863)

* Revert "Update dataproc/submit_job_to_cluster.py" [(#1864)](GoogleCloudPlatform/python-docs-samples#1864)

* Revert "Remove test configs for non-testing directories [(#1855)](GoogleCloudPlatform/python-docs-samples#1855)"

This reverts commit 73a73321579337312e8ba85c34fe9c37b42b7f6e.

* Revert "Auto-update dependencies. [(#1846)](GoogleCloudPlatform/python-docs-samples#1846)"

This reverts commit 3adc94f4d0c14453153968c3851fae100e2c5e44.

* Revert "Tweak slack sample [(#1847)](GoogleCloudPlatform/python-docs-samples#1847)"

This reverts commit a48c010481c166968d9f1bd58106054c5d1c58f9.

* Revert "Non-client library example of constructing a Signed URL [(#1837)](GoogleCloudPlatform/python-docs-samples#1837)"

This reverts commit fc3284d995a8a35c473a207e80490fad265782af.

* Revert "GCF samples: handle {empty JSON, GET} requests + remove commas [(#1832)](GoogleCloudPlatform/python-docs-samples#1832)"

This reverts commit 6928491ed3d52b0bec694e6b30257f08caac5f2b.

* Revert "Correct the maintenance event types [(#1830)](GoogleCloudPlatform/python-docs-samples#1830)"

This reverts commit c22840fd23586349b7b665d851dea046a94ba7c7.

* Revert "Fix GCF region tags [(#1827)](GoogleCloudPlatform/python-docs-samples#1827)"

This reverts commit 0fbfef27d35cea23ad0e20fd2c9df3e8a4a046cb.

* Revert "Updated to Flask 1.0 [(#1819)](GoogleCloudPlatform/python-docs-samples#1819)"

This reverts commit d52ccf99503311bba2cec2881e8cb0f9b5a6f2bf.

* Revert "Fix deprecation warning [(#1801)](GoogleCloudPlatform/python-docs-samples#1801)"

This reverts commit 981737e85f60eca5cc337f172249deddca9b291b.

* Revert "Update submit_job_to_cluster.py [(#1708)](GoogleCloudPlatform/python-docs-samples#1708)"

This reverts commit df1f2b22547b7ca86bbdb791ad930003a815a677.

* Create python-api-walkthrough.md [(#1966)](GoogleCloudPlatform/python-docs-samples#1966)

* Create python-api-walkthrough.md

This Google Cloud Shell walkthrough is linked to Cloud Dataproc documentation to be published at: https://cloud.google.com/dataproc/docs/tutorials/python-library-example

* Update python-api-walkthrough.md

* Update list_clusters.py [(#1887)](GoogleCloudPlatform/python-docs-samples#1887)

* Auto-update dependencies. [(#1980)](GoogleCloudPlatform/python-docs-samples#1980)

* Auto-update dependencies.

* Update requirements.txt

* Update requirements.txt

* Update Dataproc samples. [(#2158)](GoogleCloudPlatform/python-docs-samples#2158)

* Update requirements.txt

* Update python-api-walkthrough.md

* Update submit_job_to_cluster.py

* Update list_clusters.py

* Update python-api-walkthrough.md [(#2172)](GoogleCloudPlatform/python-docs-samples#2172)

* Adds updates including compute [(#2436)](GoogleCloudPlatform/python-docs-samples#2436)

* Adds updates including compute

* Python 2 compat pytest

* Fixing weird \r\n issue from GH merge

* Put asset tests back in

* Re-add pod operator test

* Hack parameter for k8s pod operator

* feat: adding samples for dataproc - create cluster [(#2536)](GoogleCloudPlatform/python-docs-samples#2536)

* adding sample for cluster create

* small fix

* Add create cluster samples

* Fixed copyright, added 'dataproc' to region tag and changed imports from 'dataproc' to 'dataproc_v1'

* Fix copyright in create_cluster.py

* Auto-update dependencies. [(#2005)](GoogleCloudPlatform/python-docs-samples#2005)

* Auto-update dependencies.

* Revert update of appengine/flexible/datastore.

* revert update of appengine/flexible/scipy

* revert update of bigquery/bqml

* revert update of bigquery/cloud-client

* revert update of bigquery/datalab-migration

* revert update of bigtable/quickstart

* revert update of compute/api

* revert update of container_registry/container_analysis

* revert update of dataflow/run_template

* revert update of datastore/cloud-ndb

* revert update of dialogflow/cloud-client

* revert update of dlp

* revert update of functions/imagemagick

* revert update of functions/ocr/app

* revert update of healthcare/api-client/fhir

* revert update of iam/api-client

* revert update of iot/api-client/gcs_file_to_device

* revert update of iot/api-client/mqtt_example

* revert update of language/automl

* revert update of run/image-processing

* revert update of vision/automl

* revert update testing/requirements.txt

* revert update of vision/cloud-client/detect

* revert update of vision/cloud-client/product_search

* revert update of jobs/v2/api_client

* revert update of jobs/v3/api_client

* revert update of opencensus

* revert update of translate/cloud-client

* revert update to speech/cloud-client

Co-authored-by: Kurtis Van Gent <31518063+kurtisvg@users.noreply.github.com>
Co-authored-by: Doug Mahugh <dmahugh@gmail.com>

* feat: dataproc quickstart sample added and create_cluster updated [(#2629)](GoogleCloudPlatform/python-docs-samples#2629)

* Adding quickstart sample

* Added new quickstart sample and updated create_cluster sample

* Fix to create_cluster.py

* deleted dataproc quickstart files not under dataproc/quickstart/

* Added quickstart test

* Linting and formatting fixes

* Revert "Linting and formatting fixes"

This reverts commit c5afcbcdf9deccbb7a21ddd82ae0fc305e79c008.

* Added bucket cleanup to quickstart test

* Changes to samples and tests

* Linting fixes

* Removed todos in favor of clearer docstring

* Fixed lint error

Co-authored-by: Leah E. Cole <6719667+leahecole@users.noreply.github.com>

* Update Python Cloud Shell walkthrough script [(#2733)](GoogleCloudPlatform/python-docs-samples#2733)

Cloud Shell walkthrough scripts no longer support enabling APIs. APIs must be enabled by linking to the console.
Updated product name: "Cloud Dataproc" -> "Dataproc".

* fix: added cli functionality to dataproc quickstart example [(#2734)](GoogleCloudPlatform/python-docs-samples#2734)

* Added CLI functionality to quickstart

* Fixed Dataproc quickstart test to properly clean up GCS bucket [(#3001)](GoogleCloudPlatform/python-docs-samples#3001)

* splitting up #2651 part 1/3 - dataproc + endpoints [(#3025)](GoogleCloudPlatform/python-docs-samples#3025)

* splitting up #2651

* fix typos

* chore(deps): update dependency google-auth to v1.11.2 [(#2724)](GoogleCloudPlatform/python-docs-samples#2724)

Co-authored-by: Leah E. Cole <6719667+leahecole@users.noreply.github.com>

* chore(deps): update dependency google-cloud-storage to v1.26.0 [(#3046)](GoogleCloudPlatform/python-docs-samples#3046)

* chore(deps): update dependency google-cloud-storage to v1.26.0

* chore(deps): specify dependencies by python version

* chore: up other deps to try to remove errors

Co-authored-by: Leah E. Cole <6719667+leahecole@users.noreply.github.com>
Co-authored-by: Leah Cole <coleleah@google.com>

* chore(deps): update dependency google-cloud-dataproc to v0.7.0 [(#3083)](GoogleCloudPlatform/python-docs-samples#3083)

* feat: added dataproc workflows samples [(#3056)](GoogleCloudPlatform/python-docs-samples#3056)

* Added workflows sample

* chore(deps): update dependency grpcio to v1.27.2 [(#3173)](GoogleCloudPlatform/python-docs-samples#3173)

This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [grpcio](https://grpc.io) | minor | `==1.25.0` -> `==1.27.2` |
| [grpcio](https://grpc.io) | minor | `==1.23.0` -> `==1.27.2` |
| [grpcio](https://grpc.io) | minor | `==1.26.0` -> `==1.27.2` |
| [grpcio](https://grpc.io) | patch | `==1.27.1` -> `==1.27.2` |

---

### Renovate configuration

:date: **Schedule**: At any time (no schedule defined).

:vertical_traffic_light: **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

:recycle: **Rebasing**: Never, or you tick the rebase/retry checkbox.

:no_bell: **Ignore**: Close this PR and you won't be reminded about these updates again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#GoogleCloudPlatform/python-docs-samples).

* Simplify noxfile setup. [(#2806)](GoogleCloudPlatform/python-docs-samples#2806)

* chore(deps): update dependency requests to v2.23.0

* Simplify noxfile and add version control.

* Configure appengine/standard to only test Python 2.7.

* Update Kokokro configs to match noxfile.

* Add requirements-test to each folder.

* Remove Py2 versions from everything execept appengine/standard.

* Remove conftest.py.

* Remove appengine/standard/conftest.py

* Remove 'no-sucess-flaky-report' from pytest.ini.

* Add GAE SDK back to appengine/standard tests.

* Fix typo.

* Roll pytest to python 2 version.

* Add a bunch of testing requirements.

* Remove typo.

* Add appengine lib directory back in.

* Add some additional requirements.

* Fix issue with flake8 args.

* Even more requirements.

* Readd appengine conftest.py.

* Add a few more requirements.

* Even more Appengine requirements.

* Add webtest for appengine/standard/mailgun.

* Add some additional requirements.

* Add workaround for issue with mailjet-rest.

* Add responses for appengine/standard/mailjet.

Co-authored-by: Renovate Bot <bot@renovateapp.com>

* fix: add mains to samples [(#3284)](GoogleCloudPlatform/python-docs-samples#3284)

Added mains to two samples: create_cluster and instantiate_inline_workflow_templates.

Fixed their associated tests to accommodate this.

Removed subprocess from quickstart/quickstart_test.py to fix [2873](GoogleCloudPlatform/python-docs-samples#2873)

fixes #2873

* Update dependency grpcio to v1.28.1 [(#3276)](GoogleCloudPlatform/python-docs-samples#3276)

Co-authored-by: Leah E. Cole <6719667+leahecole@users.noreply.github.com>

* Update dependency google-auth to v1.14.0 [(#3148)](GoogleCloudPlatform/python-docs-samples#3148)

Co-authored-by: Leah E. Cole <6719667+leahecole@users.noreply.github.com>

* chore(deps): update dependency google-auth to v1.14.1 [(#3464)](GoogleCloudPlatform/python-docs-samples#3464)

This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [google-auth](https://github.com/googleapis/google-auth-library-python) | patch | `==1.14.0` -> `==1.14.1` |
| [google-auth](https://github.com/googleapis/google-auth-library-python) | minor | `==1.11.2` -> `==1.14.1` |

---

### Release Notes

<details>
<summary>googleapis/google-auth-library-python</summary>

### [`v1.14.1`](https://github.com/googleapis/google-auth-library-python/blob/master/CHANGELOG.md#&#8203;1141-httpswwwgithubcomgoogleapisgoogle-auth-library-pythoncomparev1140v1141-2020-04-21)

[Compare Source](https://github.com/googleapis/google-auth-library-python/compare/v1.14.0...v1.14.1)

</details>

---

### Renovate configuration

:date: **Schedule**: At any time (no schedule defined).

:vertical_traffic_light: **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

:recycle: **Rebasing**: Never, or you tick the rebase/retry checkbox.

:no_bell: **Ignore**: Close this PR and you won't be reminded about these updates again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#GoogleCloudPlatform/python-docs-samples).

* chore(deps): update dependency google-cloud-storage to v1.28.0 [(#3260)](GoogleCloudPlatform/python-docs-samples#3260)

Co-authored-by: Takashi Matsuo <tmatsuo@google.com>

* chore(deps): update dependency google-auth to v1.14.2 [(#3724)](GoogleCloudPlatform/python-docs-samples#3724)

This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [google-auth](https://github.com/googleapis/google-auth-library-python) | patch | `==1.14.1` -> `==1.14.2` |

---

### Release Notes

<details>
<summary>googleapis/google-auth-library-python</summary>

### [`v1.14.2`](https://github.com/googleapis/google-auth-library-python/blob/master/CHANGELOG.md#&#8203;1142-httpswwwgithubcomgoogleapisgoogle-auth-library-pythoncomparev1141v1142-2020-05-07)

[Compare Source](https://github.com/googleapis/google-auth-library-python/compare/v1.14.1...v1.14.2)

</details>

---

### Renovate configuration

:date: **Schedule**: At any time (no schedule defined).

:vertical_traffic_light: **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

:recycle: **Rebasing**: Never, or you tick the rebase/retry checkbox.

:no_bell: **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#GoogleCloudPlatform/python-docs-samples).

* chore: some lint fixes [(#3743)](GoogleCloudPlatform/python-docs-samples#3743)

* chore(deps): update dependency google-auth to v1.14.3 [(#3728)](GoogleCloudPlatform/python-docs-samples#3728)

This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [google-auth](https://github.com/googleapis/google-auth-library-python) | patch | `==1.14.2` -> `==1.14.3` |

---

### Release Notes

<details>
<summary>googleapis/google-auth-library-python</summary>

### [`v1.14.3`](https://github.com/googleapis/google-auth-library-python/blob/master/CHANGELOG.md#&#8203;1143-httpswwwgithubcomgoogleapisgoogle-auth-library-pythoncomparev1142v1143-2020-05-11)

[Compare Source](https://github.com/googleapis/google-auth-library-python/compare/v1.14.2...v1.14.3)

</details>

---

### Renovate configuration

:date: **Schedule**: At any time (no schedule defined).

:vertical_traffic_light: **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

:recycle: **Rebasing**: Never, or you tick the rebase/retry checkbox.

:no_bell: **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [x] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#GoogleCloudPlatform/python-docs-samples).

* chore(deps): update dependency grpcio to v1.29.0 [(#3786)](GoogleCloudPlatform/python-docs-samples#3786)

* chore(deps): update dependency google-cloud-storage to v1.28.1 [(#3785)](GoogleCloudPlatform/python-docs-samples#3785)

* chore(deps): update dependency google-cloud-storage to v1.28.1

* [asset] testing: use uuid instead of time

Co-authored-by: Takashi Matsuo <tmatsuo@google.com>

* update google-auth to 1.15.0 part 3 [(#3816)](GoogleCloudPlatform/python-docs-samples#3816)

* Update dependency google-cloud-dataproc to v0.8.0 [(#3837)](GoogleCloudPlatform/python-docs-samples#3837)

* chore(deps): update dependency google-auth to v1.16.0 [(#3903)](GoogleCloudPlatform/python-docs-samples#3903)

* update google-auth part 3 [(#3963)](GoogleCloudPlatform/python-docs-samples#3963)

* chore(deps): update dependency google-cloud-dataproc to v0.8.1 [(#4015)](GoogleCloudPlatform/python-docs-samples#4015)

This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [google-cloud-dataproc](https://github.com/googleapis/python-dataproc) | patch | `==0.8.0` -> `==0.8.1` |

---

### Release Notes

<details>
<summary>googleapis/python-dataproc</summary>

### [`v0.8.1`](https://github.com/googleapis/python-dataproc/blob/master/CHANGELOG.md#&#8203;081-httpswwwgithubcomgoogleapispython-dataproccomparev080v081-2020-06-05)

[Compare Source](https://github.com/googleapis/python-dataproc/compare/v0.8.0...v0.8.1)

</details>

---

### Renovate configuration

:date: **Schedule**: At any time (no schedule defined).

:vertical_traffic_light: **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

:recycle: **Rebasing**: Never, or you tick the rebase/retry checkbox.

:no_bell: **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#GoogleCloudPlatform/python-docs-samples).

* Replace GCLOUD_PROJECT with GOOGLE_CLOUD_PROJECT. [(#4022)](GoogleCloudPlatform/python-docs-samples#4022)

* Update dependency google-auth to v1.17.0 [(#4058)](GoogleCloudPlatform/python-docs-samples#4058)

* chore(deps): update dependency google-auth to v1.17.1 [(#4073)](GoogleCloudPlatform/python-docs-samples#4073)

* Update dependency google-auth to v1.17.2 [(#4083)](GoogleCloudPlatform/python-docs-samples#4083)

* Update dependency google-auth to v1.18.0 [(#4125)](GoogleCloudPlatform/python-docs-samples#4125)

* Update dependency google-cloud-dataproc to v1 [(#4109)](GoogleCloudPlatform/python-docs-samples#4109)

Co-authored-by: Takashi Matsuo <tmatsuo@google.com>

* chore(deps): update dependency google-cloud-storage to v1.29.0 [(#4040)](GoogleCloudPlatform/python-docs-samples#4040)

* chore(deps): update dependency grpcio to v1.30.0 [(#4143)](GoogleCloudPlatform/python-docs-samples#4143)

Co-authored-by: Takashi Matsuo <tmatsuo@google.com>

* Update dependency google-auth-httplib2 to v0.0.4 [(#4255)](GoogleCloudPlatform/python-docs-samples#4255)

Co-authored-by: Takashi Matsuo <tmatsuo@google.com>

* chore(deps): update dependency pytest to v5.4.3 [(#4279)](GoogleCloudPlatform/python-docs-samples#4279)

* chore(deps): update dependency pytest to v5.4.3

* specify pytest for python 2 in appengine

Co-authored-by: Leah Cole <coleleah@google.com>

* chore(deps): update dependency google-auth to v1.19.0 [(#4293)](GoogleCloudPlatform/python-docs-samples#4293)

* chore(deps): update dependency google-cloud-dataproc to v1.0.1 [(#4309)](GoogleCloudPlatform/python-docs-samples#4309)

This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [google-cloud-dataproc](https://github.com/googleapis/python-dataproc) | patch | `==1.0.0` -> `==1.0.1` |

---

### Release Notes

<details>
<summary>googleapis/python-dataproc</summary>

### [`v1.0.1`](https://github.com/googleapis/python-dataproc/blob/master/CHANGELOG.md#&#8203;101-httpswwwgithubcomgoogleapispython-dataproccomparev100v101-2020-07-16)

[Compare Source](https://github.com/googleapis/python-dataproc/compare/v1.0.0...v1.0.1)

</details>

---

### Renovate configuration

:date: **Schedule**: At any time (no schedule defined).

:vertical_traffic_light: **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

:recycle: **Rebasing**: Never, or you tick the rebase/retry checkbox.

:no_bell: **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#GoogleCloudPlatform/python-docs-samples).

* chore(deps): update dependency google-auth to v1.19.1 [(#4304)](GoogleCloudPlatform/python-docs-samples#4304)

* chore(deps): update dependency google-auth to v1.19.2 [(#4321)](GoogleCloudPlatform/python-docs-samples#4321)

This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [google-auth](https://github.com/googleapis/google-auth-library-python) | patch | `==1.19.1` -> `==1.19.2` |

---

### Release Notes

<details>
<summary>googleapis/google-auth-library-python</summary>

### [`v1.19.2`](https://github.com/googleapis/google-auth-library-python/blob/master/CHANGELOG.md#&#8203;1192-httpswwwgithubcomgoogleapisgoogle-auth-library-pythoncomparev1191v1192-2020-07-17)

[Compare Source](https://github.com/googleapis/google-auth-library-python/compare/v1.19.1...v1.19.2)

</details>

---

### Renovate configuration

:date: **Schedule**: At any time (no schedule defined).

:vertical_traffic_light: **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

:recycle: **Rebasing**: Never, or you tick the rebase/retry checkbox.

:no_bell: **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#GoogleCloudPlatform/python-docs-samples).

* Update dependency google-auth to v1.20.0 [(#4387)](GoogleCloudPlatform/python-docs-samples#4387)

* Update dependency pytest to v6 [(#4390)](GoogleCloudPlatform/python-docs-samples#4390)

* Update dependency grpcio to v1.31.0 [(#4438)](GoogleCloudPlatform/python-docs-samples#4438)

* chore(deps): update dependency google-auth to v1.20.1 [(#4452)](GoogleCloudPlatform/python-docs-samples#4452)

* chore: update templates

Co-authored-by: Bill Prin <waprin@google.com>
Co-authored-by: Bill Prin <waprin@gmail.com>
Co-authored-by: Jon Wayne Parrott <jonwayne@google.com>
Co-authored-by: Eran Kampf <eran@ekampf.com>
Co-authored-by: DPE bot <dpebot@google.com>
Co-authored-by: aman-ebay <amancuso@google.com>
Co-authored-by: Martial Hue <martial.hue@gmail.com>
Co-authored-by: Gioia Ballin <gioia.ballin@gmail.com>
Co-authored-by: michaelawyu <chenyumic@google.com>
Co-authored-by: michaelawyu <michael.a.w.yu@hotmail.com>
Co-authored-by: Alix Hamilton <ajhamilton@google.com>
Co-authored-by: James Winegar <jameswinegar@users.noreply.github.com>
Co-authored-by: Charles Engelke <github@engelke.com>
Co-authored-by: Gus Class <gguuss@gmail.com>
Co-authored-by: Brad Miro <bmiro@google.com>
Co-authored-by: Kurtis Van Gent <31518063+kurtisvg@users.noreply.github.com>
Co-authored-by: Doug Mahugh <dmahugh@gmail.com>
Co-authored-by: Leah E. Cole <6719667+leahecole@users.noreply.github.com>
Co-authored-by: WhiteSource Renovate <bot@renovateapp.com>
Co-authored-by: Leah Cole <coleleah@google.com>
Co-authored-by: Takashi Matsuo <tmatsuo@google.com>
parthea pushed a commit that referenced this issue Jun 19, 2024
Bumps [urllib3](https://github.com/urllib3/urllib3) from 2.0.7 to 2.2.2.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/urllib3/urllib3/releases">urllib3's
releases</a>.</em></p>
<blockquote>
<h2>2.2.2</h2>
<h2>🚀 urllib3 is fundraising for HTTP/2 support</h2>
<p><a
href="https://sethmlarson.dev/urllib3-is-fundraising-for-http2-support">urllib3
is raising ~$40,000 USD</a> to release HTTP/2 support and ensure
long-term sustainable maintenance of the project after a sharp decline
in financial support for 2023. If your company or organization uses
Python and would benefit from HTTP/2 support in Requests, pip, cloud
SDKs, and thousands of other projects <a
href="https://opencollective.com/urllib3">please consider contributing
financially</a> to ensure HTTP/2 support is developed sustainably and
maintained for the long-haul.</p>
<p>Thank you for your support.</p>
<h2>Changes</h2>
<ul>
<li>Added the <code>Proxy-Authorization</code> header to the list of
headers to strip from requests when redirecting to a different host. As
before, different headers can be set via
<code>Retry.remove_headers_on_redirect</code>.</li>
<li>Allowed passing negative integers as <code>amt</code> to read
methods of <code>http.client.HTTPResponse</code> as an alternative to
<code>None</code>. (<a
href="https://redirect.github.com/urllib3/urllib3/issues/3122">#3122</a>)</li>
<li>Fixed return types representing copying actions to use
<code>typing.Self</code>. (<a
href="https://redirect.github.com/urllib3/urllib3/issues/3363">#3363</a>)</li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/urllib3/urllib3/compare/2.2.1...2.2.2">https://github.com/urllib3/urllib3/compare/2.2.1...2.2.2</a></p>
<h2>2.2.1</h2>
<h2>🚀 urllib3 is fundraising for HTTP/2 support</h2>
<p><a
href="https://sethmlarson.dev/urllib3-is-fundraising-for-http2-support">urllib3
is raising ~$40,000 USD</a> to release HTTP/2 support and ensure
long-term sustainable maintenance of the project after a sharp decline
in financial support for 2023. If your company or organization uses
Python and would benefit from HTTP/2 support in Requests, pip, cloud
SDKs, and thousands of other projects <a
href="https://opencollective.com/urllib3">please consider contributing
financially</a> to ensure HTTP/2 support is developed sustainably and
maintained for the long-haul.</p>
<p>Thank you for your support.</p>
<h2>Changes</h2>
<ul>
<li>Fixed issue where <code>InsecureRequestWarning</code> was emitted
for HTTPS connections when using Emscripten. (<a
href="https://redirect.github.com/urllib3/urllib3/issues/3331">#3331</a>)</li>
<li>Fixed <code>HTTPConnectionPool.urlopen</code> to stop automatically
casting non-proxy headers to <code>HTTPHeaderDict</code>. This change
was premature as it did not apply to proxy headers and
<code>HTTPHeaderDict</code> does not handle byte header values correctly
yet. (<a
href="https://redirect.github.com/urllib3/urllib3/issues/3343">#3343</a>)</li>
<li>Changed <code>ProtocolError</code> to
<code>InvalidChunkLength</code> when response terminates before the
chunk length is sent. (<a
href="https://redirect.github.com/urllib3/urllib3/issues/2860">#2860</a>)</li>
<li>Changed <code>ProtocolError</code> to be more verbose on incomplete
reads with excess content. (<a
href="https://redirect.github.com/urllib3/urllib3/issues/3261">#3261</a>)</li>
</ul>
<h2>2.2.0</h2>
<h2>🖥️ urllib3 now works in the browser</h2>
<p>:tada: <strong>This release adds experimental support for <a
href="https://urllib3.readthedocs.io/en/stable/reference/contrib/emscripten.html">using
urllib3 in the browser with Pyodide</a>!</strong> 🎉</p>
<p>Thanks to Joe Marshall (<a
href="https://github.com/joemarshall"><code>@​joemarshall</code></a>)
for contributing this feature. This change was possible thanks to work
done in urllib3 v2.0 to detach our API from <code>http.client</code>.
Please report all bugs to the <a
href="https://github.com/urllib3/urllib3/issues">urllib3 issue
tracker</a>.</p>
<h2>🚀 urllib3 is fundraising for HTTP/2 support</h2>
<p><a
href="https://sethmlarson.dev/urllib3-is-fundraising-for-http2-support">urllib3
is raising ~$40,000 USD</a> to release HTTP/2 support and ensure
long-term sustainable maintenance of the project after a sharp decline
in financial support for 2023. If your company or organization uses
Python and would benefit from HTTP/2 support in Requests, pip, cloud
SDKs, and thousands of other projects <a
href="https://opencollective.com/urllib3">please consider contributing
financially</a> to ensure HTTP/2 support is developed sustainably and
maintained for the long-haul.</p>
<p>Thank you for your support.</p>
<h2>Changes</h2>
<ul>
<li>Added support for <a
href="https://urllib3.readthedocs.io/en/latest/reference/contrib/emscripten.html">Emscripten
and Pyodide</a>, including streaming support in cross-origin isolated
browser environments where threading is enabled. (<a
href="https://redirect.github.com/urllib3/urllib3/issues/2951">#2951</a>)</li>
<li>Added support for <code>HTTPResponse.read1()</code> method. (<a
href="https://redirect.github.com/urllib3/urllib3/issues/3186">#3186</a>)</li>
<li>Added rudimentary support for HTTP/2. (<a
href="https://redirect.github.com/urllib3/urllib3/issues/3284">#3284</a>)</li>
<li>Fixed issue where requests against urls with trailing dots were
failing due to SSL errors
when using proxy. (<a
href="https://redirect.github.com/urllib3/urllib3/issues/2244">#2244</a>)</li>
<li>Fixed <code>HTTPConnection.proxy_is_verified</code> and
<code>HTTPSConnection.proxy_is_verified</code> to be always set to a
boolean after connecting to a proxy. It could be <code>None</code> in
some cases previously. (<a
href="https://redirect.github.com/urllib3/urllib3/issues/3130">#3130</a>)</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/urllib3/urllib3/blob/main/CHANGES.rst">urllib3's
changelog</a>.</em></p>
<blockquote>
<h1>2.2.2 (2024-06-17)</h1>
<ul>
<li>Added the <code>Proxy-Authorization</code> header to the list of
headers to strip from requests when redirecting to a different host. As
before, different headers can be set via
<code>Retry.remove_headers_on_redirect</code>.</li>
<li>Allowed passing negative integers as <code>amt</code> to read
methods of <code>http.client.HTTPResponse</code> as an alternative to
<code>None</code>.
(<code>[#3122](urllib3/urllib3#3122)
&lt;https://github.com/urllib3/urllib3/issues/3122&gt;</code>__)</li>
<li>Fixed return types representing copying actions to use
<code>typing.Self</code>.
(<code>[#3363](urllib3/urllib3#3363)
&lt;https://github.com/urllib3/urllib3/issues/3363&gt;</code>__)</li>
</ul>
<h1>2.2.1 (2024-02-16)</h1>
<ul>
<li>Fixed issue where <code>InsecureRequestWarning</code> was emitted
for HTTPS connections when using Emscripten.
(<code>[#3331](urllib3/urllib3#3331)
&lt;https://github.com/urllib3/urllib3/issues/3331&gt;</code>__)</li>
<li>Fixed <code>HTTPConnectionPool.urlopen</code> to stop automatically
casting non-proxy headers to <code>HTTPHeaderDict</code>. This change
was premature as it did not apply to proxy headers and
<code>HTTPHeaderDict</code> does not handle byte header values correctly
yet. (<code>[#3343](urllib3/urllib3#3343)
&lt;https://github.com/urllib3/urllib3/issues/3343&gt;</code>__)</li>
<li>Changed <code>InvalidChunkLength</code> to
<code>ProtocolError</code> when response terminates before the chunk
length is sent.
(<code>[#2860](urllib3/urllib3#2860)
&lt;https://github.com/urllib3/urllib3/issues/2860&gt;</code>__)</li>
<li>Changed <code>ProtocolError</code> to be more verbose on incomplete
reads with excess content.
(<code>[#3261](urllib3/urllib3#3261)
&lt;https://github.com/urllib3/urllib3/issues/3261&gt;</code>__)</li>
</ul>
<h1>2.2.0 (2024-01-30)</h1>
<ul>
<li>Added support for <code>Emscripten and Pyodide
&lt;https://urllib3.readthedocs.io/en/latest/reference/contrib/emscripten.html&gt;</code><strong>,
including streaming support in cross-origin isolated browser
environments where threading is enabled.
(<code>[#2951](urllib3/urllib3#2951)
&lt;https://github.com/urllib3/urllib3/issues/2951&gt;</code></strong>)</li>
<li>Added support for <code>HTTPResponse.read1()</code> method.
(<code>[#3186](urllib3/urllib3#3186)
&lt;https://github.com/urllib3/urllib3/issues/3186&gt;</code>__)</li>
<li>Added rudimentary support for HTTP/2.
(<code>[#3284](urllib3/urllib3#3284)
&lt;https://github.com/urllib3/urllib3/issues/3284&gt;</code>__)</li>
<li>Fixed issue where requests against urls with trailing dots were
failing due to SSL errors
when using proxy.
(<code>[#2244](urllib3/urllib3#2244)
&lt;https://github.com/urllib3/urllib3/issues/2244&gt;</code>__)</li>
<li>Fixed <code>HTTPConnection.proxy_is_verified</code> and
<code>HTTPSConnection.proxy_is_verified</code>
to be always set to a boolean after connecting to a proxy. It could be
<code>None</code> in some cases previously.
(<code>[#3130](urllib3/urllib3#3130)
&lt;https://github.com/urllib3/urllib3/issues/3130&gt;</code>__)</li>
<li>Fixed an issue where <code>headers</code> passed in a request with
<code>json=</code> would be mutated
(<code>[#3203](urllib3/urllib3#3203)
&lt;https://github.com/urllib3/urllib3/issues/3203&gt;</code>__)</li>
<li>Fixed <code>HTTPSConnection.is_verified</code> to be set to
<code>False</code> when connecting
from a HTTPS proxy to an HTTP target. It was set to <code>True</code>
previously.
(<code>[#3267](urllib3/urllib3#3267)
&lt;https://github.com/urllib3/urllib3/issues/3267&gt;</code>__)</li>
<li>Fixed handling of new error message from OpenSSL 3.2.0 when
configuring an HTTP proxy as HTTPS
(<code>[#3268](urllib3/urllib3#3268)
&lt;https://github.com/urllib3/urllib3/issues/3268&gt;</code>__)</li>
<li>Fixed TLS 1.3 post-handshake auth when the server certificate
validation is disabled
(<code>[#3325](urllib3/urllib3#3325)
&lt;https://github.com/urllib3/urllib3/issues/3325&gt;</code>__)</li>
<li>Note for downstream distributors: To run integration tests, you now
need to run the tests a second
time with the <code>--integration</code> pytest flag.
(<code>[#3181](urllib3/urllib3#3181)
&lt;https://github.com/urllib3/urllib3/issues/3181&gt;</code>__)</li>
</ul>
<h1>2.1.0 (2023-11-13)</h1>
<ul>
<li>Removed support for the deprecated urllib3[secure] extra.
(<code>[#2680](urllib3/urllib3#2680)
&lt;https://github.com/urllib3/urllib3/issues/2680&gt;</code>__)</li>
<li>Removed support for the deprecated SecureTransport TLS
implementation.
(<code>[#2681](urllib3/urllib3#2681)
&lt;https://github.com/urllib3/urllib3/issues/2681&gt;</code>__)</li>
<li>Removed support for the end-of-life Python 3.7.
(<code>[#3143](urllib3/urllib3#3143)
&lt;https://github.com/urllib3/urllib3/issues/3143&gt;</code>__)</li>
<li>Allowed loading CA certificates from memory for proxies.
(<code>[#3065](urllib3/urllib3#3065)
&lt;https://github.com/urllib3/urllib3/issues/3065&gt;</code>__)</li>
<li>Fixed decoding Gzip-encoded responses which specified
<code>x-gzip</code> content-encoding.
(<code>[#3174](urllib3/urllib3#3174)
&lt;https://github.com/urllib3/urllib3/issues/3174&gt;</code>__)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/urllib3/urllib3/commit/27e2a5c5a7ab6a517252cc8dcef3ffa6ffb8f61a"><code>27e2a5c</code></a>
Release 2.2.2 (<a
href="https://redirect.github.com/urllib3/urllib3/issues/3406">#3406</a>)</li>
<li><a
href="https://github.com/urllib3/urllib3/commit/accff72ecc2f6cf5a76d9570198a93ac7c90270e"><code>accff72</code></a>
Merge pull request from GHSA-34jh-p97f-mpxf</li>
<li><a
href="https://github.com/urllib3/urllib3/commit/34be4a57e59eb7365bcc37d52e9f8271b5b8d0d3"><code>34be4a5</code></a>
Pin CFFI to a new release candidate instead of a Git commit (<a
href="https://redirect.github.com/urllib3/urllib3/issues/3398">#3398</a>)</li>
<li><a
href="https://github.com/urllib3/urllib3/commit/da410581b6b3df73da976b5ce5eb20a4bd030437"><code>da41058</code></a>
Bump browser-actions/setup-chrome from 1.6.0 to 1.7.1 (<a
href="https://redirect.github.com/urllib3/urllib3/issues/3399">#3399</a>)</li>
<li><a
href="https://github.com/urllib3/urllib3/commit/b07a669bd970d69847801148286b726f0570b625"><code>b07a669</code></a>
Bump github/codeql-action from 2.13.4 to 3.25.6 (<a
href="https://redirect.github.com/urllib3/urllib3/issues/3396">#3396</a>)</li>
<li><a
href="https://github.com/urllib3/urllib3/commit/b8589ec9f8c4da91511e601b632ac06af7e7c10e"><code>b8589ec</code></a>
Measure coverage with v4 of artifact actions (<a
href="https://redirect.github.com/urllib3/urllib3/issues/3394">#3394</a>)</li>
<li><a
href="https://github.com/urllib3/urllib3/commit/f3bdc5585111429e22c81b5fb26c3ec164d98b81"><code>f3bdc55</code></a>
Allow triggering CI manually (<a
href="https://redirect.github.com/urllib3/urllib3/issues/3391">#3391</a>)</li>
<li><a
href="https://github.com/urllib3/urllib3/commit/52392654b30183129cf3ec06010306f517d9c146"><code>5239265</code></a>
Fix HTTP version in debug log (<a
href="https://redirect.github.com/urllib3/urllib3/issues/3316">#3316</a>)</li>
<li><a
href="https://github.com/urllib3/urllib3/commit/b34619f94ece0c40e691a5aaf1304953d88089de"><code>b34619f</code></a>
Bump actions/checkout to 4.1.4 (<a
href="https://redirect.github.com/urllib3/urllib3/issues/3387">#3387</a>)</li>
<li><a
href="https://github.com/urllib3/urllib3/commit/9961d14de7c920091d42d42ed76d5d479b80064d"><code>9961d14</code></a>
Bump browser-actions/setup-chrome from 1.5.0 to 1.6.0 (<a
href="https://redirect.github.com/urllib3/urllib3/issues/3386">#3386</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/urllib3/urllib3/compare/2.0.7...2.2.2">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=urllib3&package-manager=pip&previous-version=2.0.7&new-version=2.2.2)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/googleapis/google-cloud-python/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
priority: p2 Moderately-important priority. Fix may not be included in next release. type: question Request for information or clarification. Not an issue.
Projects
None yet
Development

No branches or pull requests

4 participants