Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-google-auth-oauthlib for 
openSUSE:Factory checked in at 2022-04-13 21:06:14
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-google-auth-oauthlib (Old)
 and      /work/SRC/openSUSE:Factory/.python-google-auth-oauthlib.new.1900 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-google-auth-oauthlib"

Wed Apr 13 21:06:14 2022 rev:7 rq:969866 version:0.5.1

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/python-google-auth-oauthlib/python-google-auth-oauthlib.changes
  2021-08-23 10:09:04.852182655 +0200
+++ 
/work/SRC/openSUSE:Factory/.python-google-auth-oauthlib.new.1900/python-google-auth-oauthlib.changes
        2022-04-13 21:07:08.660687409 +0200
@@ -1,0 +2,10 @@
+Wed Apr 13 11:59:18 UTC 2022 - John Paul Adrian Glaubitz 
<adrian.glaub...@suse.com>
+
+- Update to 0.5.1
+  * avoid deprecated "out-of-band" authentication flow (#186)
+- from version 0.5.0
+  * deprecate OAuth out-of-band flow (#175)
+- from version 0.4.6
+  * remove dependency on `six` (#146), closes (#145)
+
+-------------------------------------------------------------------

Old:
----
  google-auth-oauthlib-0.4.5.tar.gz

New:
----
  google-auth-oauthlib-0.5.1.tar.gz

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

Other differences:
------------------
++++++ python-google-auth-oauthlib.spec ++++++
--- /var/tmp/diff_new_pack.Infm0U/_old  2022-04-13 21:07:09.232687986 +0200
+++ /var/tmp/diff_new_pack.Infm0U/_new  2022-04-13 21:07:09.240687994 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package python-google-auth-oauthlib
 #
-# Copyright (c) 2021 SUSE LLC
+# Copyright (c) 2022 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -19,7 +19,7 @@
 %{?!python_module:%define python_module() python-%{**} python3-%{**}}
 %bcond_without python2
 Name:           python-google-auth-oauthlib
-Version:        0.4.5
+Version:        0.5.1
 Release:        0
 Summary:        Google authentication library
 License:        Apache-2.0

++++++ google-auth-oauthlib-0.4.5.tar.gz -> google-auth-oauthlib-0.5.1.tar.gz 
++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/google-auth-oauthlib-0.4.5/PKG-INFO 
new/google-auth-oauthlib-0.5.1/PKG-INFO
--- old/google-auth-oauthlib-0.4.5/PKG-INFO     2021-07-29 18:53:15.098886000 
+0200
+++ new/google-auth-oauthlib-0.5.1/PKG-INFO     2022-03-15 16:59:55.817356600 
+0100
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: google-auth-oauthlib
-Version: 0.4.5
+Version: 0.5.1
 Summary: Google Authentication Library
 Home-page: 
https://github.com/GoogleCloudPlatform/google-auth-library-python-oauthlib
 Author: Google Cloud Platform
@@ -13,6 +13,7 @@
 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: Development Status :: 3 - Alpha
 Classifier: Intended Audience :: Developers
 Classifier: License :: OSI Approved :: Apache Software License
@@ -32,7 +33,7 @@
 
 This library provides `oauthlib`_ integration with `google-auth`_.
 
-.. |build| image:: 
https://travis-ci.org/googleapis/google-auth-library-python-oauthlib.svg?branch=master
+.. |build| image:: 
https://travis-ci.org/googleapis/google-auth-library-python-oauthlib.svg?branch=main
    :target: 
https://travis-ci.org/googleapis/google-auth-library-python-oauthlib
 .. |docs| image:: 
https://readthedocs.org/projects/google-auth-oauthlib/badge/?version=latest
    :target: https://google-auth-oauthlib.readthedocs.io/en/latest/
@@ -58,11 +59,24 @@
 
 .. _google-auth-oauthlib.readthedocs.io: 
http://google-auth-oauthlib.readthedocs.io/
 
+Supported Python Versions
+-------------------------
+Python >= 3.6
+
+
+Unsupported Python Versions
+---------------------------
+
+Python == 2.7, Python == 3.5.
+
+The last version of this library compatible with Python 2.7 and 3.5 is
+`google-auth-oauthlib==0.4.1`.
+
 License
 -------
 
 Apache 2.0 - See `the LICENSE`_ for more information.
 
-.. _the LICENSE: 
https://github.com/googleapis/google-auth-library-python-oauthlib/blob/master/LICENSE
+.. _the LICENSE: 
https://github.com/googleapis/google-auth-library-python-oauthlib/blob/main/LICENSE
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/google-auth-oauthlib-0.4.5/README.rst 
new/google-auth-oauthlib-0.5.1/README.rst
--- old/google-auth-oauthlib-0.4.5/README.rst   2021-07-29 18:50:38.000000000 
+0200
+++ new/google-auth-oauthlib-0.5.1/README.rst   2022-03-15 16:57:03.000000000 
+0100
@@ -5,7 +5,7 @@
 
 This library provides `oauthlib`_ integration with `google-auth`_.
 
-.. |build| image:: 
https://travis-ci.org/googleapis/google-auth-library-python-oauthlib.svg?branch=master
+.. |build| image:: 
https://travis-ci.org/googleapis/google-auth-library-python-oauthlib.svg?branch=main
    :target: 
https://travis-ci.org/googleapis/google-auth-library-python-oauthlib
 .. |docs| image:: 
https://readthedocs.org/projects/google-auth-oauthlib/badge/?version=latest
    :target: https://google-auth-oauthlib.readthedocs.io/en/latest/
@@ -31,9 +31,22 @@
 
 .. _google-auth-oauthlib.readthedocs.io: 
http://google-auth-oauthlib.readthedocs.io/
 
+Supported Python Versions
+-------------------------
+Python >= 3.6
+
+
+Unsupported Python Versions
+---------------------------
+
+Python == 2.7, Python == 3.5.
+
+The last version of this library compatible with Python 2.7 and 3.5 is
+`google-auth-oauthlib==0.4.1`.
+
 License
 -------
 
 Apache 2.0 - See `the LICENSE`_ for more information.
 
-.. _the LICENSE: 
https://github.com/googleapis/google-auth-library-python-oauthlib/blob/master/LICENSE
+.. _the LICENSE: 
https://github.com/googleapis/google-auth-library-python-oauthlib/blob/main/LICENSE
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/google-auth-oauthlib-0.4.5/google_auth_oauthlib/flow.py 
new/google-auth-oauthlib-0.5.1/google_auth_oauthlib/flow.py
--- old/google-auth-oauthlib-0.4.5/google_auth_oauthlib/flow.py 2021-07-29 
18:50:38.000000000 +0200
+++ new/google-auth-oauthlib-0.5.1/google_auth_oauthlib/flow.py 2022-03-15 
16:57:03.000000000 +0100
@@ -15,46 +15,44 @@
 """OAuth 2.0 Authorization Flow
 
 This module provides integration with `requests-oauthlib`_ for running the
-`OAuth 2.0 Authorization Flow`_ and acquiring user credentials.
+`OAuth 2.0 Authorization Flow`_ and acquiring user credentials.  See
+`Using OAuth 2.0 to Access Google APIs`_ for an overview of OAuth 2.0
+authorization scenarios Google APIs support.
 
-Here's an example of using :class:`Flow` with the installed application
-authorization flow::
+Here's an example of using :class:`InstalledAppFlow`::
 
-    from google_auth_oauthlib.flow import Flow
+    from google_auth_oauthlib.flow import InstalledAppFlow
 
     # Create the flow using the client secrets file from the Google API
     # Console.
-    flow = Flow.from_client_secrets_file(
-        'path/to/client_secrets.json',
-        scopes=['profile', 'email'],
-        redirect_uri='urn:ietf:wg:oauth:2.0:oob')
-
-    # Tell the user to go to the authorization URL.
-    auth_url, _ = flow.authorization_url(prompt='consent')
-
-    print('Please go to this URL: {}'.format(auth_url))
-
-    # The user will get an authorization code. This code is used to get the
-    # access token.
-    code = input('Enter the authorization code: ')
-    flow.fetch_token(code=code)
+    flow = InstalledAppFlow.from_client_secrets_file(
+        'client_secrets.json',
+        scopes=['profile', 'email'])
+
+    flow.run_local_server()
 
     # You can use flow.credentials, or you can just get a requests session
     # using flow.authorized_session.
     session = flow.authorized_session()
-    print(session.get('https://www.googleapis.com/userinfo/v2/me').json())
 
-This particular flow can be handled entirely by using
-:class:`InstalledAppFlow`.
+    profile_info = session.get(
+        'https://www.googleapis.com/userinfo/v2/me').json()
+
+    print(profile_info)
+    # {'name': '...',  'email': '...', ...}
 
 .. _requests-oauthlib: http://requests-oauthlib.readthedocs.io/en/stable/
 .. _OAuth 2.0 Authorization Flow:
     https://tools.ietf.org/html/rfc6749#section-1.2
+.. _Using OAuth 2.0 to Access Google APIs:
+    https://developers.google.com/identity/protocols/oauth2
+
 """
 from base64 import urlsafe_b64encode
 import hashlib
 import json
 import logging
+import warnings
 
 try:
     from secrets import SystemRandom
@@ -67,12 +65,16 @@
 
 import google.auth.transport.requests
 import google.oauth2.credentials
-from six.moves import input
 
 import google_auth_oauthlib.helpers
 
 
 _LOGGER = logging.getLogger(__name__)
+_OOB_REDIRECT_URIS = [
+    "urn:ietf:wg:oauth:2.0:oob",
+    "urn:ietf:wg:oauth:2.0:oob:auto",
+    "oob",
+]
 
 
 class Flow(object):
@@ -120,7 +122,7 @@
                 code_verifier.
         .. _client secrets:
             https://github.com/googleapis/google-api-python-client/blob
-            /master/docs/client-secrets.md
+            /main/docs/client-secrets.md
         """
         self.client_type = client_type
         """str: The client type, either ``'web'`` or ``'installed'``"""
@@ -153,8 +155,7 @@
                 format.
 
         .. _client secrets:
-            https://github.com/googleapis/google-api-python-client/blob/
-            master/docs/client-secrets.md
+            
https://github.com/googleapis/google-api-python-client/blob/main/docs/client-secrets.md
         """
         if "web" in client_config:
             client_type = "web"
@@ -213,6 +214,17 @@
 
     @redirect_uri.setter
     def redirect_uri(self, value):
+        if value in _OOB_REDIRECT_URIS:
+            warnings.warn(
+                "'{}' is an OOB redirect URI. The OAuth out-of-band (OOB) flow 
is deprecated. "
+                "New clients will be unable to use this flow starting on Feb 
28, 2022. "
+                "This flow will be deprecated for all clients on Oct 3, 2022. "
+                "Migrate to an alternative flow. "
+                "See 
https://developers.googleblog.com/2022/02/making-oauth-flows-safer.html?m=1#disallowed-oob".format(
+                    value
+                ),
+                DeprecationWarning,
+            )
         self.oauth2session.redirect_uri = value
 
     def authorization_url(self, **kwargs):
@@ -327,9 +339,7 @@
     local development or applications that are installed on a desktop operating
     system.
 
-    This flow has two strategies: The console strategy provided by
-    :meth:`run_console` and the local server strategy provided by
-    :meth:`run_local_server`.
+    This flow uses a local server strategy provided by 
:meth:`run_local_server`.
 
     Example::
 
@@ -350,14 +360,14 @@
         # {'name': '...',  'email': '...', ...}
 
 
-    Note that these aren't the only two ways to accomplish the installed
-    application flow, they are just the most common ways. You can use the
+    Note that this isn't the only way to accomplish the installed
+    application flow, just one of the most common. You can use the
     :class:`Flow` class to perform the same flow with different methods of
     presenting the authorization URL to the user or obtaining the authorization
     response, such as using an embedded web view.
 
     .. _Installed Application Authorization Flow:
-        
https://github.com/googleapis/google-api-python-client/blob/master/docs/oauth-installed.md
+        
https://github.com/googleapis/google-api-python-client/blob/main/docs/oauth-installed.md
     """
 
     _OOB_REDIRECT_URI = "urn:ietf:wg:oauth:2.0:oob"
@@ -383,6 +393,15 @@
     ):
         """Run the flow using the console strategy.
 
+        .. deprecated:: 0.5.0
+          Use :meth:`run_local_server` instead.
+
+          The OAuth out-of-band (OOB) flow is deprecated. New clients will be 
unable to
+          use this flow starting on Feb 28, 2022. This flow will be deprecated
+          for all clients on Oct 3, 2022. Migrate to an alternative flow.
+
+          See 
https://developers.googleblog.com/2022/02/making-oauth-flows-safer.html?m=1#disallowed-oob";
+
         The console strategy instructs the user to open the authorization URL
         in their browser. Once the authorization is complete the authorization
         server will give the user a code. The user then must copy & paste this
@@ -401,6 +420,13 @@
                 for the user.
         """
         kwargs.setdefault("prompt", "consent")
+        warnings.warn(
+            "New clients will be unable to use `InstalledAppFlow.run_console` "
+            "starting on Feb 28, 2022. All clients will be unable to use this 
method starting on Oct 3, 2022. "
+            "Use `InstalledAppFlow.run_local_server` instead. For details on 
the OOB flow deprecation, "
+            "see 
https://developers.googleblog.com/2022/02/making-oauth-flows-safer.html?m=1#disallowed-oob";,
+            DeprecationWarning,
+        )
 
         self.redirect_uri = self._OOB_REDIRECT_URI
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/google-auth-oauthlib-0.4.5/google_auth_oauthlib/helpers.py 
new/google-auth-oauthlib-0.5.1/google_auth_oauthlib/helpers.py
--- old/google-auth-oauthlib-0.4.5/google_auth_oauthlib/helpers.py      
2021-07-29 18:50:38.000000000 +0200
+++ new/google-auth-oauthlib-0.5.1/google_auth_oauthlib/helpers.py      
2022-03-15 16:57:03.000000000 +0100
@@ -51,8 +51,7 @@
             oauthlib session and the validated client configuration.
 
     .. _client secrets:
-        https://github.com/googleapis/google-api-python-client/blob/master/
-        docs/client-secrets.md
+        
https://github.com/googleapis/google-api-python-client/blob/main/docs/client-secrets.md
     """
 
     if "web" in client_config:
@@ -89,8 +88,7 @@
             oauthlib session and the validated client configuration.
 
     .. _client secrets:
-        https://github.com/googleapis/google-api-python-client/blob/master/
-        docs/client-secrets.md
+        
https://github.com/googleapis/google-api-python-client/blob/main/docs/client-secrets.md
     """
     with open(client_secrets_file, "r") as json_file:
         client_config = json.load(json_file)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/google-auth-oauthlib-0.4.5/google_auth_oauthlib/interactive.py 
new/google-auth-oauthlib-0.5.1/google_auth_oauthlib/interactive.py
--- old/google-auth-oauthlib-0.4.5/google_auth_oauthlib/interactive.py  
2021-07-29 18:50:38.000000000 +0200
+++ new/google-auth-oauthlib-0.5.1/google_auth_oauthlib/interactive.py  
2022-03-15 16:57:03.000000000 +0100
@@ -21,10 +21,68 @@
 
 from __future__ import absolute_import
 
+import contextlib
+import socket
+
 import google_auth_oauthlib.flow
 
 
-def get_user_credentials(scopes, client_id, client_secret):
+LOCALHOST = "localhost"
+DEFAULT_PORTS_TO_TRY = 100
+
+
+def is_port_open(port):
+    """Check if a port is open on localhost.
+    Based on StackOverflow answer: https://stackoverflow.com/a/43238489/101923
+    Parameters
+    ----------
+    port : int
+        A port to check on localhost.
+    Returns
+    -------
+    is_open : bool
+        True if a socket can be opened at the requested port.
+    """
+    with contextlib.closing(socket.socket(socket.AF_INET, socket.SOCK_STREAM)) 
as sock:
+        try:
+            sock.bind((LOCALHOST, port))
+            sock.listen(1)
+        except socket.error:
+            is_open = False
+        else:
+            is_open = True
+    return is_open
+
+
+def find_open_port(start=8080, stop=None):
+    """Find an open port between ``start`` and ``stop``.
+    Parameters
+    ----------
+    start : Optional[int]
+        Beginning of range of ports to try. Defaults to 8080.
+    stop : Optional[int]
+        End of range of ports to try (not including exactly equals ``stop``).
+        This function tries 100 possible ports if no ``stop`` is specified.
+    Returns
+    -------
+    Optional[int]
+        ``None`` if no open port is found, otherwise an integer indicating an
+        open port.
+    """
+    if not stop:
+        stop = start + DEFAULT_PORTS_TO_TRY
+
+    for port in range(start, stop):
+        if is_port_open(port):
+            return port
+
+    # No open ports found.
+    return None
+
+
+def get_user_credentials(
+    scopes, client_id, client_secret, minimum_port=8080, maximum_port=None
+):
     """Gets credentials associated with your Google user account.
 
     This function authenticates using your user credentials by going through
@@ -53,6 +111,12 @@
             A string that verifies your application to Google APIs. Find this
             value in the `Credentials page on the Google Developer's Console
             <https://console.developers.google.com/apis/credentials>`_.
+        minimum_port (int):
+            Beginning of range of ports to try for redirect URI HTTP server.
+            Defaults to 8080.
+        maximum_port (Optional[int]):
+            End of range of ports to try (not including exactly equals 
``stop``).
+            This function tries 100 possible ports if no ``stop`` is specified.
 
     Returns:
         google.oauth2.credentials.Credentials:
@@ -102,4 +166,8 @@
         client_config, scopes=scopes
     )
 
-    return app_flow.run_console()
+    port = find_open_port()
+    if not port:
+        raise ConnectionError("Could not find open port.")
+
+    return app_flow.run_local_server(host=LOCALHOST, port=port)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/google-auth-oauthlib-0.4.5/google_auth_oauthlib.egg-info/PKG-INFO 
new/google-auth-oauthlib-0.5.1/google_auth_oauthlib.egg-info/PKG-INFO
--- old/google-auth-oauthlib-0.4.5/google_auth_oauthlib.egg-info/PKG-INFO       
2021-07-29 18:53:14.000000000 +0200
+++ new/google-auth-oauthlib-0.5.1/google_auth_oauthlib.egg-info/PKG-INFO       
2022-03-15 16:59:55.000000000 +0100
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: google-auth-oauthlib
-Version: 0.4.5
+Version: 0.5.1
 Summary: Google Authentication Library
 Home-page: 
https://github.com/GoogleCloudPlatform/google-auth-library-python-oauthlib
 Author: Google Cloud Platform
@@ -13,6 +13,7 @@
 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: Development Status :: 3 - Alpha
 Classifier: Intended Audience :: Developers
 Classifier: License :: OSI Approved :: Apache Software License
@@ -32,7 +33,7 @@
 
 This library provides `oauthlib`_ integration with `google-auth`_.
 
-.. |build| image:: 
https://travis-ci.org/googleapis/google-auth-library-python-oauthlib.svg?branch=master
+.. |build| image:: 
https://travis-ci.org/googleapis/google-auth-library-python-oauthlib.svg?branch=main
    :target: 
https://travis-ci.org/googleapis/google-auth-library-python-oauthlib
 .. |docs| image:: 
https://readthedocs.org/projects/google-auth-oauthlib/badge/?version=latest
    :target: https://google-auth-oauthlib.readthedocs.io/en/latest/
@@ -58,11 +59,24 @@
 
 .. _google-auth-oauthlib.readthedocs.io: 
http://google-auth-oauthlib.readthedocs.io/
 
+Supported Python Versions
+-------------------------
+Python >= 3.6
+
+
+Unsupported Python Versions
+---------------------------
+
+Python == 2.7, Python == 3.5.
+
+The last version of this library compatible with Python 2.7 and 3.5 is
+`google-auth-oauthlib==0.4.1`.
+
 License
 -------
 
 Apache 2.0 - See `the LICENSE`_ for more information.
 
-.. _the LICENSE: 
https://github.com/googleapis/google-auth-library-python-oauthlib/blob/master/LICENSE
+.. _the LICENSE: 
https://github.com/googleapis/google-auth-library-python-oauthlib/blob/main/LICENSE
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/google-auth-oauthlib-0.4.5/google_auth_oauthlib.egg-info/entry_points.txt 
new/google-auth-oauthlib-0.5.1/google_auth_oauthlib.egg-info/entry_points.txt
--- 
old/google-auth-oauthlib-0.4.5/google_auth_oauthlib.egg-info/entry_points.txt   
    2021-07-29 18:53:14.000000000 +0200
+++ 
new/google-auth-oauthlib-0.5.1/google_auth_oauthlib.egg-info/entry_points.txt   
    2022-03-15 16:59:55.000000000 +0100
@@ -1,3 +1,2 @@
 [console_scripts]
 google-oauthlib-tool = google_auth_oauthlib.tool.__main__:main [tool]
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/google-auth-oauthlib-0.4.5/setup.py 
new/google-auth-oauthlib-0.5.1/setup.py
--- old/google-auth-oauthlib-0.4.5/setup.py     2021-07-29 18:50:38.000000000 
+0200
+++ new/google-auth-oauthlib-0.5.1/setup.py     2022-03-15 16:57:03.000000000 
+0100
@@ -27,7 +27,7 @@
     long_description = fh.read()
 
 
-version = "0.4.5"
+version = "0.5.1"
 
 setup(
     name="google-auth-oauthlib",
@@ -54,6 +54,7 @@
         "Programming Language :: Python :: 3.7",
         "Programming Language :: Python :: 3.8",
         "Programming Language :: Python :: 3.9",
+        "Programming Language :: Python :: 3.10",
         "Development Status :: 3 - Alpha",
         "Intended Audience :: Developers",
         "License :: OSI Approved :: Apache Software License",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/google-auth-oauthlib-0.4.5/tests/unit/test_flow.py 
new/google-auth-oauthlib-0.5.1/tests/unit/test_flow.py
--- old/google-auth-oauthlib-0.4.5/tests/unit/test_flow.py      2021-07-29 
18:50:38.000000000 +0200
+++ new/google-auth-oauthlib-0.5.1/tests/unit/test_flow.py      2022-03-15 
16:57:03.000000000 +0100
@@ -24,7 +24,7 @@
 import mock
 import pytest
 import requests
-from six.moves import urllib
+import urllib
 
 from google_auth_oauthlib import flow
 
@@ -58,6 +58,20 @@
             == mock.sentinel.redirect_uri
         )
 
+    def test_from_client_secrets_file_with_oob_redirect_uri(self):
+        with pytest.deprecated_call():
+            instance = flow.Flow.from_client_secrets_file(
+                CLIENT_SECRETS_FILE,
+                scopes=mock.sentinel.scopes,
+                redirect_uri="urn:ietf:wg:oauth:2.0:oob",
+            )
+
+        assert (
+            instance.redirect_uri
+            == instance.oauth2session.redirect_uri
+            == "urn:ietf:wg:oauth:2.0:oob"
+        )
+
     def test_from_client_config_installed(self):
         client_config = {"installed": CLIENT_SECRETS_INFO["web"]}
         instance = flow.Flow.from_client_config(
@@ -282,11 +296,13 @@
         with fetch_token_patch as fetch_token_mock:
             yield fetch_token_mock
 
-    @mock.patch("google_auth_oauthlib.flow.input", autospec=True)
+    @mock.patch("builtins.input", autospec=True)
     def test_run_console(self, input_mock, instance, mock_fetch_token):
         input_mock.return_value = mock.sentinel.code
         instance.code_verifier = "amanaplanacanalpanama"
-        credentials = instance.run_console()
+
+        with pytest.deprecated_call():
+            credentials = instance.run_console()
 
         assert credentials.token == mock.sentinel.access_token
         assert credentials._refresh_token == mock.sentinel.refresh_token
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/google-auth-oauthlib-0.4.5/tests/unit/test_interactive.py 
new/google-auth-oauthlib-0.5.1/tests/unit/test_interactive.py
--- old/google-auth-oauthlib-0.4.5/tests/unit/test_interactive.py       
2021-07-29 18:50:38.000000000 +0200
+++ new/google-auth-oauthlib-0.5.1/tests/unit/test_interactive.py       
2022-03-15 16:57:03.000000000 +0100
@@ -12,7 +12,47 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+import socket
+
 import mock
+import pytest
+
+
+def test_find_open_port_finds_start_port(monkeypatch):
+    from google_auth_oauthlib import interactive as module_under_test
+
+    monkeypatch.setattr(socket, "socket", mock.create_autospec(socket.socket))
+    port = module_under_test.find_open_port(9999)
+    assert port == 9999
+
+
+def test_find_open_port_finds_stop_port(monkeypatch):
+    from google_auth_oauthlib import interactive as module_under_test
+
+    socket_instance = mock.create_autospec(socket.socket, instance=True)
+
+    def mock_socket(family, type_):
+        return socket_instance
+
+    monkeypatch.setattr(socket, "socket", mock_socket)
+    socket_instance.listen.side_effect = [socket.error] * 99 + [None]
+    port = module_under_test.find_open_port(9000, stop=9100)
+    assert port == 9099
+
+
+def test_find_open_port_returns_none(monkeypatch):
+    from google_auth_oauthlib import interactive as module_under_test
+
+    socket_instance = mock.create_autospec(socket.socket, instance=True)
+
+    def mock_socket(family, type_):
+        return socket_instance
+
+    monkeypatch.setattr(socket, "socket", mock_socket)
+    socket_instance.listen.side_effect = socket.error
+    port = module_under_test.find_open_port(9000)
+    assert port is None
+    socket_instance.listen.assert_has_calls(mock.call(1) for _ in range(100))
 
 
 def test_get_user_credentials():
@@ -33,4 +73,25 @@
     actual_client_config = mock_flow.from_client_config.call_args[0][0]
     assert actual_client_config["installed"]["client_id"] == "some-client-id"
     assert actual_client_config["installed"]["client_secret"] == "shh-secret"
-    mock_flow_instance.run_console.assert_called_once()
+    mock_flow_instance.run_local_server.assert_called_once()
+
+
+def test_get_user_credentials_raises_connectionerror(monkeypatch):
+    from google_auth_oauthlib import flow
+    from google_auth_oauthlib import interactive as module_under_test
+
+    def mock_find_open_port():
+        return None
+
+    monkeypatch.setattr(module_under_test, "find_open_port", 
mock_find_open_port)
+    mock_flow = mock.create_autospec(flow.InstalledAppFlow, instance=True)
+
+    with mock.patch(
+        "google_auth_oauthlib.flow.InstalledAppFlow", autospec=True
+    ) as mock_flow, pytest.raises(ConnectionError):
+        mock_flow.from_client_config.return_value = mock_flow
+        module_under_test.get_user_credentials(
+            ["scopes"], "some-client-id", "shh-secret"
+        )
+
+    mock_flow.run_local_server.assert_not_called()

Reply via email to