Hello community,
here is the log from the commit of package python-pydata-google-auth for
openSUSE:Factory checked in at 2020-02-03 11:13:40
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-pydata-google-auth (Old)
and /work/SRC/openSUSE:Factory/.python-pydata-google-auth.new.26092 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-pydata-google-auth"
Mon Feb 3 11:13:40 2020 rev:2 rq:768932 version:0.2.1
Changes:
--------
---
/work/SRC/openSUSE:Factory/python-pydata-google-auth/python-pydata-google-auth.changes
2019-07-26 12:43:32.601825525 +0200
+++
/work/SRC/openSUSE:Factory/.python-pydata-google-auth.new.26092/python-pydata-google-auth.changes
2020-02-03 11:13:46.537858801 +0100
@@ -1,0 +2,19 @@
+Thu Jan 30 15:20:11 UTC 2020 - Todd R <[email protected]>
+
+- Update to 0.2.1
+ * Re-enable ``auth_local_webserver`` in ``default`` method. Show warning,
+ rather than fallback to console.
+- Update to 0.2.0
+ + Deprecations
+ * **Deprecate** ``auth_local_webserver`` argument in favor of
+ ``use_local_webserver`` argument
+ + New Features
+ * Adds :func:`pydata_google_auth.save_user_credentials` function to get
user
+ credentials and then save them to a specified JSON path.
+ + Bug Fixes
+ * Update OAuth2 token endpoint to latest URI from Google.
+ * Don't raise error when the ``APPDATA`` environment variable isn't set on
+ Windows.
+
+
+-------------------------------------------------------------------
Old:
----
pydata-google-auth-0.1.3.tar.gz
New:
----
pydata-google-auth-0.2.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-pydata-google-auth.spec ++++++
--- /var/tmp/diff_new_pack.Cl8fwY/_old 2020-02-03 11:13:47.177859124 +0100
+++ /var/tmp/diff_new_pack.Cl8fwY/_new 2020-02-03 11:13:47.177859124 +0100
@@ -1,7 +1,7 @@
#
# spec file for package python-pydata-google-auth
#
-# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2020 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -12,26 +12,27 @@
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
-# Please submit bugfixes or comments via http://bugs.opensuse.org/
+# Please submit bugfixes or comments via https://bugs.opensuse.org/
+#
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
Name: python-pydata-google-auth
-Version: 0.1.3
+Version: 0.2.1
Release: 0
-License: BSD-3-Clause
Summary: PyData helpers for authenticating to Google APIs
-Url: https://github.com/pydata/pydata-google-auth
+License: BSD-3-Clause
Group: Development/Languages/Python
+URL: https://github.com/pydata/pydata-google-auth
Source:
https://github.com/pydata/pydata-google-auth/archive/%{version}.tar.gz#/pydata-google-auth-%{version}.tar.gz
BuildRequires: %{python_module setuptools}
BuildRequires: fdupes
BuildRequires: python-rpm-macros
# SECTION test requirements
+BuildRequires: %{python_module google-auth-oauthlib}
+BuildRequires: %{python_module google-auth}
BuildRequires: %{python_module pyfakefs}
BuildRequires: %{python_module pytest}
-BuildRequires: %{python_module google-auth}
-BuildRequires: %{python_module google-auth-oauthlib}
BuildRequires: python-mock
# /SECTION
Requires: python-google-auth
@@ -55,7 +56,7 @@
%python_expand %fdupes %{buildroot}%{$python_sitelib}
%check
-%python_exec setup.py test
+%pytest tests/unit
%files %{python_files}
%doc README.rst
++++++ pydata-google-auth-0.1.3.tar.gz -> pydata-google-auth-0.2.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pydata-google-auth-0.1.3/docs/source/api.rst
new/pydata-google-auth-0.2.1/docs/source/api.rst
--- old/pydata-google-auth-0.1.3/docs/source/api.rst 2019-02-26
23:04:04.000000000 +0100
+++ new/pydata-google-auth-0.2.1/docs/source/api.rst 2019-12-13
00:04:28.000000000 +0100
@@ -9,6 +9,7 @@
default
get_user_credentials
+ save_user_credentials
cache.CredentialsCache
cache.READ_WRITE
cache.REAUTH
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pydata-google-auth-0.1.3/docs/source/changelog.rst
new/pydata-google-auth-0.2.1/docs/source/changelog.rst
--- old/pydata-google-auth-0.1.3/docs/source/changelog.rst 2019-02-26
23:04:04.000000000 +0100
+++ new/pydata-google-auth-0.2.1/docs/source/changelog.rst 2019-12-13
00:04:28.000000000 +0100
@@ -1,6 +1,35 @@
Changelog
=========
+.. _changelog-0.2.1:
+
+0.2.1 / (2019-12-12)
+--------------------
+
+- Re-enable ``auth_local_webserver`` in ``default`` method. Show warning,
+ rather than fallback to console.
+
+.. _changelog-0.2.0:
+
+0.2.0 / (2019-12-12)
+--------------------
+
+- **Deprecate** ``auth_local_webserver`` argument in favor of
+ ``use_local_webserver`` argument (:issue:`20`).
+
+New Features
+^^^^^^^^^^^^^
+
+- Adds :func:`pydata_google_auth.save_user_credentials` function to get user
+ credentials and then save them to a specified JSON path. (:issue:`22`)
+
+Bug Fixes
+^^^^^^^^^
+
+- Update OAuth2 token endpoint to latest URI from Google. (:issue:`27`)
+- Don't raise error when the ``APPDATA`` environment variable isn't set on
+ Windows. (:issue:`29`)
+
.. _changelog-0.1.3:
0.1.3 / (2019-02-26)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/pydata-google-auth-0.1.3/pydata_google_auth/__init__.py
new/pydata-google-auth-0.2.1/pydata_google_auth/__init__.py
--- old/pydata-google-auth-0.1.3/pydata_google_auth/__init__.py 2019-02-26
23:04:04.000000000 +0100
+++ new/pydata-google-auth-0.2.1/pydata_google_auth/__init__.py 2019-12-13
00:04:28.000000000 +0100
@@ -1,5 +1,6 @@
from .auth import default
from .auth import get_user_credentials
+from .auth import save_user_credentials
from ._version import get_versions
versions = get_versions()
@@ -11,4 +12,10 @@
This package provides helpers for fetching Google API credentials.
"""
-__all__ = ["__version__", "__git_revision__", "default",
"get_user_credentials"]
+__all__ = [
+ "__version__",
+ "__git_revision__",
+ "default",
+ "get_user_credentials",
+ "save_user_credentials",
+]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/pydata-google-auth-0.1.3/pydata_google_auth/_version.py
new/pydata-google-auth-0.2.1/pydata_google_auth/_version.py
--- old/pydata-google-auth-0.1.3/pydata_google_auth/_version.py 2019-02-26
23:04:04.000000000 +0100
+++ new/pydata-google-auth-0.2.1/pydata_google_auth/_version.py 2019-12-13
00:04:28.000000000 +0100
@@ -22,9 +22,9 @@
# setup.py/versioneer.py will grep for the variable names, so they must
# each be defined on a line of their own. _version.py will just call
# get_keywords().
- git_refnames = " (tag: 0.1.3)"
- git_full = "1bbc5a62a7feb7f61b7be3048a3ba85179d89c08"
- git_date = "2019-02-26 16:04:04 -0600"
+ git_refnames = " (HEAD -> master, tag: 0.2.1)"
+ git_full = "d0644d2e0d760ee201f4f4259e7905981e205c69"
+ git_date = "2019-12-12 15:04:28 -0800"
keywords = {"refnames": git_refnames, "full": git_full, "date": git_date}
return keywords
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pydata-google-auth-0.1.3/pydata_google_auth/auth.py
new/pydata-google-auth-0.2.1/pydata_google_auth/auth.py
--- old/pydata-google-auth-0.1.3/pydata_google_auth/auth.py 2019-02-26
23:04:04.000000000 +0100
+++ new/pydata-google-auth-0.2.1/pydata_google_auth/auth.py 2019-12-13
00:04:28.000000000 +0100
@@ -17,6 +17,8 @@
CLIENT_ID =
"262006177488-3425ks60hkk80fssi9vpohv88g6q1iqd.apps.googleusercontent.com"
CLIENT_SECRET = "JSF-iczmzEgbTR-XK-2xaWAc"
+GOOGLE_AUTH_URI = "https://accounts.google.com/o/oauth2/auth"
+GOOGLE_TOKEN_URI = "https://oauth2.googleapis.com/token"
def default(
@@ -24,7 +26,8 @@
client_id=None,
client_secret=None,
credentials_cache=cache.READ_WRITE,
- auth_local_webserver=False,
+ use_local_webserver=False,
+ auth_local_webserver=None,
):
"""
Get credentials and default project for accessing Google APIs.
@@ -64,10 +67,12 @@
``$HOME/.config/pydata/pydata_google_credentials.json`` or
``$APPDATA/.config/pydata/pydata_google_credentials.json`` on
Windows.
- auth_local_webserver : bool, optional
+ use_local_webserver : bool, optional
Use a local webserver for the user authentication
:class:`google_auth_oauthlib.flow.InstalledAppFlow`. Defaults to
``False``, which requests a token via the console.
+ auth_local_webserver : deprecated
+ Use the ``use_local_webserver`` parameter instead.
Returns
-------
@@ -84,6 +89,9 @@
pydata_google_auth.exceptions.PyDataCredentialsError
If unable to get valid credentials.
"""
+ if auth_local_webserver is not None:
+ use_local_webserver = auth_local_webserver
+
# Try to retrieve Application Default Credentials
credentials, default_project = get_application_default_credentials(scopes)
@@ -95,7 +103,7 @@
client_id=client_id,
client_secret=client_secret,
credentials_cache=credentials_cache,
- auth_local_webserver=auth_local_webserver,
+ use_local_webserver=use_local_webserver,
)
if not credentials or not credentials.valid:
@@ -150,7 +158,8 @@
client_id=None,
client_secret=None,
credentials_cache=cache.READ_WRITE,
- auth_local_webserver=False,
+ use_local_webserver=False,
+ auth_local_webserver=None,
):
"""
Gets user account credentials.
@@ -199,10 +208,12 @@
``$HOME/.config/pydata/pydata_google_credentials.json`` or
``$APPDATA/.config/pydata/pydata_google_credentials.json`` on
Windows.
- auth_local_webserver : bool, optional
+ use_local_webserver : bool, optional
Use a local webserver for the user authentication
:class:`google_auth_oauthlib.flow.InstalledAppFlow`. Defaults to
``False``, which requests a token via the console.
+ auth_local_webserver : deprecated
+ Use the ``use_local_webserver`` parameter instead.
Returns
-------
@@ -214,6 +225,9 @@
pydata_google_auth.exceptions.PyDataCredentialsError
If unable to get valid user credentials.
"""
+ if auth_local_webserver is not None:
+ use_local_webserver = auth_local_webserver
+
# Use None as default for client_id and client_secret so that the values
# aren't included in the docs. A string of bytes isn't useful for the
# documentation and might encourage the values to be used outside of this
@@ -230,8 +244,8 @@
"client_id": client_id,
"client_secret": client_secret,
"redirect_uris": ["urn:ietf:wg:oauth:2.0:oob"],
- "auth_uri": "https://accounts.google.com/o/oauth2/auth",
- "token_uri": "https://accounts.google.com/o/oauth2/token",
+ "auth_uri": GOOGLE_AUTH_URI,
+ "token_uri": GOOGLE_TOKEN_URI,
}
}
@@ -241,7 +255,7 @@
)
try:
- if auth_local_webserver:
+ if use_local_webserver:
credentials = app_flow.run_local_server()
else:
credentials = app_flow.run_console()
@@ -257,3 +271,84 @@
credentials.refresh(request)
return credentials
+
+
+def save_user_credentials(
+ scopes, path, client_id=None, client_secret=None, use_local_webserver=False
+):
+ """
+ Gets user account credentials and saves them to a JSON file at ``path``.
+
+ This function authenticates using user credentials by going through the
+ OAuth 2.0 flow.
+
+ Parameters
+ ----------
+
+ scopes : list[str]
+ A list of scopes to use when authenticating to Google APIs. See the
+ `list of OAuth 2.0 scopes for Google APIs
+ <https://developers.google.com/identity/protocols/googlescopes>`_.
+ path : str
+ Path to save credentials JSON file.
+ client_id : str, optional
+ The client secrets to use when prompting for user credentials.
+ Defaults to a client ID associated with pydata-google-auth.
+
+ If you are a tool or library author, you must override the default
+ value with a client ID associated with your project. Per the `Google
+ APIs terms of service <https://developers.google.com/terms/>`_, you
+ must not mask your API client's identity when using Google APIs.
+ client_secret : str, optional
+ The client secrets to use when prompting for user credentials.
+ Defaults to a client secret associated with pydata-google-auth.
+
+ If you are a tool or library author, you must override the default
+ value with a client secret associated with your project. Per the
+ `Google APIs terms of service
+ <https://developers.google.com/terms/>`_, you must not mask your API
+ client's identity when using Google APIs.
+ use_local_webserver : bool, optional
+ Use a local webserver for the user authentication
+ :class:`google_auth_oauthlib.flow.InstalledAppFlow`. Defaults to
+ ``False``, which requests a token via the console.
+
+ Returns
+ -------
+
+ None
+
+ Raises
+ ------
+ pydata_google_auth.exceptions.PyDataCredentialsError
+ If unable to get valid user credentials.
+
+ Examples
+ --------
+
+ Get credentials for Google Cloud Platform and save them to
+ ``/home/username/keys/google-credentials.json``.
+
+ .. code-block:: python
+
+ pydata_google_auth.save_user_credentials(
+ ["https://www.googleapis.com/auth/cloud-platform"],
+ "/home/username/keys/google-credentials.json",
+ use_local_webserver=True,
+ )
+
+ Set the ``GOOGLE_APPLICATION_CREDENTIALS`` environment variable to use
+ these credentials with Google Application Default Credentials.
+
+ .. code-block:: bash
+
+ export
GOOGLE_APPLICATION_CREDENTIALS='/home/username/keys/google-credentials.json'
+ """
+ credentials = get_user_credentials(
+ scopes,
+ client_id=client_id,
+ client_secret=client_secret,
+ credentials_cache=cache.NOOP,
+ use_local_webserver=use_local_webserver,
+ )
+ cache._save_user_account_credentials(credentials, path)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pydata-google-auth-0.1.3/pydata_google_auth/cache.py
new/pydata-google-auth-0.2.1/pydata_google_auth/cache.py
--- old/pydata-google-auth-0.1.3/pydata_google_auth/cache.py 2019-02-26
23:04:04.000000000 +0100
+++ new/pydata-google-auth-0.2.1/pydata_google_auth/cache.py 2019-12-13
00:04:28.000000000 +0100
@@ -25,9 +25,11 @@
str
Path to the Google user credentials
"""
+ config_path = None
+
if os.name == "nt":
- config_path = os.environ["APPDATA"]
- else:
+ config_path = os.getenv("APPDATA")
+ if not config_path:
config_path = os.path.join(os.path.expanduser("~"), ".config")
config_path = os.path.join(config_path, credentials_dirname)
@@ -111,6 +113,10 @@
"client_id": credentials.client_id,
"client_secret": credentials.client_secret,
"scopes": credentials.scopes,
+ # Required for Application Default Credentials to detect the
+ # credentials type. See:
+ # https://github.com/pydata/pydata-google-auth/issues/22
+ "type": "authorized_user",
}
json.dump(credentials_json, credentials_file)
except IOError:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pydata-google-auth-0.1.3/tests/system/test_auth.py
new/pydata-google-auth-0.2.1/tests/system/test_auth.py
--- old/pydata-google-auth-0.1.3/tests/system/test_auth.py 2019-02-26
23:04:04.000000000 +0100
+++ new/pydata-google-auth-0.2.1/tests/system/test_auth.py 2019-12-13
00:04:28.000000000 +0100
@@ -14,9 +14,8 @@
def test_default_gets_valid_credentials():
import pydata_google_auth
- credentials, _ = pydata_google_auth.default(TEST_SCOPES,
auth_local_webserver=True)
+ credentials, _ = pydata_google_auth.default(TEST_SCOPES,
use_local_webserver=True)
assert credentials.valid
- assert credentials.has_scopes(TEST_SCOPES)
def test_default_gets_user_credentials():
@@ -25,22 +24,20 @@
# Mock google.auth.default to fail, forcing user credentials.
with mock.patch("google.auth.default",
side_effect=DefaultCredentialsError()):
credentials, _ = pydata_google_auth.default(
- TEST_SCOPES, auth_local_webserver=True
+ TEST_SCOPES, use_local_webserver=True
)
assert credentials.valid
- assert credentials.has_scopes(TEST_SCOPES)
def test_get_user_credentials_gets_valid_credentials():
import pydata_google_auth
credentials = pydata_google_auth.get_user_credentials(
- TEST_SCOPES, auth_local_webserver=True
+ TEST_SCOPES, use_local_webserver=True
)
assert credentials.valid
- assert credentials.has_scopes(TEST_SCOPES)
def test_get_user_credentials_noop_gets_valid_credentials():
@@ -50,7 +47,7 @@
credentials = pydata_google_auth.get_user_credentials(
TEST_SCOPES,
credentials_cache=pydata_google_auth.cache.NOOP,
- auth_local_webserver=True,
+ use_local_webserver=True,
)
assert credentials.valid
@@ -64,7 +61,7 @@
credentials = pydata_google_auth.get_user_credentials(
TEST_SCOPES,
credentials_cache=pydata_google_auth.cache.REAUTH,
- auth_local_webserver=True,
+ use_local_webserver=True,
)
assert credentials.valid
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pydata-google-auth-0.1.3/tests/unit/test_cache.py
new/pydata-google-auth-0.2.1/tests/unit/test_cache.py
--- old/pydata-google-auth-0.1.3/tests/unit/test_cache.py 2019-02-26
23:04:04.000000000 +0100
+++ new/pydata-google-auth-0.2.1/tests/unit/test_cache.py 2019-12-13
00:04:28.000000000 +0100
@@ -34,6 +34,19 @@
assert module_under_test.NOOP is not None
+def test__get_default_credentials_path_windows_wo_appdata(
+ module_under_test, monkeypatch
+):
+ # Ensure default path returns something sensible on Windows, even if
+ # APPDATA is not set. See:
+ # https://github.com/pydata/pydata-google-auth/issues/29
+ monkeypatch.setattr(os, "name", "nt")
+ monkeypatch.delenv("APPDATA", raising=False)
+
+ creds_path = module_under_test._get_default_credentials_path("dirname",
"filename")
+ assert creds_path is not None
+
+
def test__save_user_account_credentials_wo_directory(module_under_test, fs):
"""Directories should be created if they don't exist."""
@@ -55,6 +68,11 @@
serialized_data = json.load(fp)
assert serialized_data["refresh_token"] == "refresh_token"
+ # Set the type so that the cached credentials file can be used as
+ # application default credentials. See:
+ # https://github.com/pydata/pydata-google-auth/issues/22
+ assert serialized_data["type"] == "authorized_user"
+
def test_ReadWriteCredentialsCache_sets_path(module_under_test):
"""ReadWriteCredentialsCache ctor should respect dirname and filename.