Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-google-api-core for
openSUSE:Factory checked in at 2023-12-17 21:32:24
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-google-api-core (Old)
and /work/SRC/openSUSE:Factory/.python-google-api-core.new.25432 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-google-api-core"
Sun Dec 17 21:32:24 2023 rev:29 rq:1133662 version:2.15.0
Changes:
--------
---
/work/SRC/openSUSE:Factory/python-google-api-core/python-google-api-core.changes
2023-12-07 19:13:19.685727905 +0100
+++
/work/SRC/openSUSE:Factory/.python-google-api-core.new.25432/python-google-api-core.changes
2023-12-17 21:34:47.778972276 +0100
@@ -1,0 +2,13 @@
+Sat Dec 16 19:25:47 UTC 2023 - Dirk Müller <[email protected]>
+
+- update to 2.15.0:
+ * Add support for Python 3.12
+ * Add type annotations to wrapped grpc calls
+ * Add universe_domain argument to ClientOptions
+ * Introduce compatibility with native namespace packages
+ * Fix regression in `bidi` causing `Thread-
+ ConsumeBidirectionalStream caught unexpected exception and
+ will exit` (#562)
+ * Replace deprecated `datetime.datetime.utcnow()`
+
+-------------------------------------------------------------------
Old:
----
google-api-core-2.14.0.tar.gz
New:
----
google-api-core-2.15.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-google-api-core.spec ++++++
--- /var/tmp/diff_new_pack.yW2T3j/_old 2023-12-17 21:34:48.250989426 +0100
+++ /var/tmp/diff_new_pack.yW2T3j/_new 2023-12-17 21:34:48.250989426 +0100
@@ -24,10 +24,9 @@
%define psuffix %{nil}
%bcond_with test
%endif
-%define skip_python2 1
%{?sle15_python_module_pythons}
Name: python-google-api-core
-Version: 2.14.0
+Version: 2.15.0
Release: 0
Summary: Google API client core library
License: Apache-2.0
@@ -38,7 +37,6 @@
BuildRequires: %{python_module google-auth >= 2.14.1}
BuildRequires: %{python_module googleapis-common-protos >= 1.53.0}
BuildRequires: %{python_module grpcio >= 1.33.2}
-BuildRequires: %{python_module grpcio-gcp >= 0.2.2}
BuildRequires: %{python_module grpcio-status >= 1.33.2}
BuildRequires: %{python_module pip}
BuildRequires: %{python_module protobuf >= 3.19.5 with %python-protobuf <
5.0.0.dev0}
@@ -64,7 +62,6 @@
Requires: python-requests >= 2.18.0
Requires: python-setuptools >= 40.3.0
Requires: (python-protobuf >= 3.19.5 with python-protobuf < 5.0.0.dev0)
-Suggests: python-grpcio-gcp >= 0.2.2
BuildArch: noarch
%python_subpackages
@@ -95,7 +92,6 @@
%license LICENSE
%doc README.rst
%{python_sitelib}/google/api_core
-%{python_sitelib}/google_api_core-%{version}*-nspkg.pth
%{python_sitelib}/google_api_core-%{version}*-info
%endif
++++++ google-api-core-2.14.0.tar.gz -> google-api-core-2.15.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/google-api-core-2.14.0/PKG-INFO
new/google-api-core-2.15.0/PKG-INFO
--- old/google-api-core-2.14.0/PKG-INFO 2023-11-10 00:16:17.662312300 +0100
+++ new/google-api-core-2.15.0/PKG-INFO 2023-12-07 17:38:24.526273500 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: google-api-core
-Version: 2.14.0
+Version: 2.15.0
Summary: Google API client core library
Home-page: https://github.com/googleapis/python-api-core
Author: Google LLC
@@ -17,6 +17,7 @@
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
+Classifier: Programming Language :: Python :: 3.12
Classifier: Operating System :: OS Independent
Classifier: Topic :: Internet
Requires-Python: >=3.7
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/google-api-core-2.14.0/google/__init__.py
new/google-api-core-2.15.0/google/__init__.py
--- old/google-api-core-2.14.0/google/__init__.py 2023-11-10
00:14:15.000000000 +0100
+++ new/google-api-core-2.15.0/google/__init__.py 1970-01-01
01:00:00.000000000 +0100
@@ -1,25 +0,0 @@
-# Copyright 2016 Google LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Google namespace package."""
-
-try:
- import pkg_resources
-
- pkg_resources.declare_namespace(__name__)
-except ImportError:
- import pkgutil
-
- # See: https://github.com/python/mypy/issues/1422
- __path__ = pkgutil.extend_path(__path__, __name__) # type: ignore
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/google-api-core-2.14.0/google/api_core/bidi.py
new/google-api-core-2.15.0/google/api_core/bidi.py
--- old/google-api-core-2.14.0/google/api_core/bidi.py 2023-11-10
00:14:15.000000000 +0100
+++ new/google-api-core-2.15.0/google/api_core/bidi.py 2023-12-07
17:36:01.000000000 +0100
@@ -91,8 +91,9 @@
def _is_active(self):
# Note: there is a possibility that this starts *before* the call
# property is set. So we have to check if self.call is set before
- # seeing if it's active.
- return self.call is not None and self.call.is_active()
+ # seeing if it's active. We need to return True if self.call is None.
+ # See https://github.com/googleapis/python-api-core/issues/560.
+ return self.call is None or self.call.is_active()
def __iter__(self):
if self._initial_request is not None:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/google-api-core-2.14.0/google/api_core/client_options.py
new/google-api-core-2.15.0/google/api_core/client_options.py
--- old/google-api-core-2.14.0/google/api_core/client_options.py
2023-11-10 00:14:15.000000000 +0100
+++ new/google-api-core-2.15.0/google/api_core/client_options.py
2023-12-07 17:36:01.000000000 +0100
@@ -75,6 +75,11 @@
authentication flows. Audience is typically a resource identifier.
If not set, the service endpoint value will be used as a default.
An example of a valid ``api_audience`` is:
"https://language.googleapis.com".
+ universe_domain (Optional[str]): The desired universe domain. This
must match
+ the one in credentials. If not set, the default universe domain is
+ `googleapis.com`. If both `api_endpoint` and `universe_domain` are
set,
+ then `api_endpoint` is used as the service endpoint. If
`api_endpoint` is
+ not specified, the format will be `{service}.{universe_domain}`.
Raises:
ValueError: If both ``client_cert_source`` and
``client_encrypted_cert_source``
@@ -91,6 +96,7 @@
scopes=None,
api_key=None,
api_audience=None,
+ universe_domain=None,
):
if client_cert_source and client_encrypted_cert_source:
raise ValueError(
@@ -106,6 +112,7 @@
self.scopes = scopes
self.api_key = api_key
self.api_audience = api_audience
+ self.universe_domain = universe_domain
def __repr__(self):
return "ClientOptions: " + repr(self.__dict__)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/google-api-core-2.14.0/google/api_core/datetime_helpers.py
new/google-api-core-2.15.0/google/api_core/datetime_helpers.py
--- old/google-api-core-2.14.0/google/api_core/datetime_helpers.py
2023-11-10 00:14:15.000000000 +0100
+++ new/google-api-core-2.15.0/google/api_core/datetime_helpers.py
2023-12-07 17:36:01.000000000 +0100
@@ -42,7 +42,7 @@
def utcnow():
"""A :meth:`datetime.datetime.utcnow()` alias to allow mocking in tests."""
- return datetime.datetime.utcnow()
+ return datetime.datetime.now(tz=datetime.timezone.utc).replace(tzinfo=None)
def to_milliseconds(value):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/google-api-core-2.14.0/google/api_core/grpc_helpers.py
new/google-api-core-2.15.0/google/api_core/grpc_helpers.py
--- old/google-api-core-2.14.0/google/api_core/grpc_helpers.py 2023-11-10
00:14:15.000000000 +0100
+++ new/google-api-core-2.15.0/google/api_core/grpc_helpers.py 2023-12-07
17:36:01.000000000 +0100
@@ -13,6 +13,7 @@
# limitations under the License.
"""Helpers for :mod:`grpc`."""
+from typing import Generic, TypeVar, Iterator
import collections
import functools
@@ -54,6 +55,9 @@
_LOGGER = logging.getLogger(__name__)
+# denotes the proto response type for grpc calls
+P = TypeVar("P")
+
def _patch_callable_name(callable_):
"""Fix-up gRPC callable attributes.
@@ -79,7 +83,7 @@
return error_remapped_callable
-class _StreamingResponseIterator(grpc.Call):
+class _StreamingResponseIterator(Generic[P], grpc.Call):
def __init__(self, wrapped, prefetch_first_result=True):
self._wrapped = wrapped
@@ -97,11 +101,11 @@
# ignore stop iteration at this time. This should be handled
outside of retry.
pass
- def __iter__(self):
+ def __iter__(self) -> Iterator[P]:
"""This iterator is also an iterable that returns itself."""
return self
- def __next__(self):
+ def __next__(self) -> P:
"""Get the next response from the stream.
Returns:
@@ -144,6 +148,10 @@
return self._wrapped.trailing_metadata()
+# public type alias denoting the return type of streaming gapic calls
+GrpcStream = _StreamingResponseIterator[P]
+
+
def _wrap_stream_errors(callable_):
"""Wrap errors for Unary-Stream and Stream-Stream gRPC callables.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/google-api-core-2.14.0/google/api_core/grpc_helpers_async.py
new/google-api-core-2.15.0/google/api_core/grpc_helpers_async.py
--- old/google-api-core-2.14.0/google/api_core/grpc_helpers_async.py
2023-11-10 00:14:15.000000000 +0100
+++ new/google-api-core-2.15.0/google/api_core/grpc_helpers_async.py
2023-12-07 17:36:01.000000000 +0100
@@ -21,11 +21,15 @@
import asyncio
import functools
+from typing import Generic, Iterator, AsyncGenerator, TypeVar
+
import grpc
from grpc import aio
from google.api_core import exceptions, grpc_helpers
+# denotes the proto response type for grpc calls
+P = TypeVar("P")
# NOTE(lidiz) Alternatively, we can hack "__getattribute__" to perform
# automatic patching for us. But that means the overhead of creating an
@@ -75,8 +79,8 @@
raise exceptions.from_grpc_error(rpc_error) from rpc_error
-class _WrappedUnaryResponseMixin(_WrappedCall):
- def __await__(self):
+class _WrappedUnaryResponseMixin(Generic[P], _WrappedCall):
+ def __await__(self) -> Iterator[P]:
try:
response = yield from self._call.__await__()
return response
@@ -84,17 +88,17 @@
raise exceptions.from_grpc_error(rpc_error) from rpc_error
-class _WrappedStreamResponseMixin(_WrappedCall):
+class _WrappedStreamResponseMixin(Generic[P], _WrappedCall):
def __init__(self):
self._wrapped_async_generator = None
- async def read(self):
+ async def read(self) -> P:
try:
return await self._call.read()
except grpc.RpcError as rpc_error:
raise exceptions.from_grpc_error(rpc_error) from rpc_error
- async def _wrapped_aiter(self):
+ async def _wrapped_aiter(self) -> AsyncGenerator[P, None]:
try:
# NOTE(lidiz) coverage doesn't understand the exception raised from
# __anext__ method. It is covered by test case:
@@ -104,7 +108,7 @@
except grpc.RpcError as rpc_error:
raise exceptions.from_grpc_error(rpc_error) from rpc_error
- def __aiter__(self):
+ def __aiter__(self) -> AsyncGenerator[P, None]:
if not self._wrapped_async_generator:
self._wrapped_async_generator = self._wrapped_aiter()
return self._wrapped_async_generator
@@ -127,26 +131,32 @@
# NOTE(lidiz) Implementing each individual class separately, so we don't
# expose any API that should not be seen. E.g., __aiter__ in unary-unary
# RPC, or __await__ in stream-stream RPC.
-class _WrappedUnaryUnaryCall(_WrappedUnaryResponseMixin, aio.UnaryUnaryCall):
+class _WrappedUnaryUnaryCall(_WrappedUnaryResponseMixin[P],
aio.UnaryUnaryCall):
"""Wrapped UnaryUnaryCall to map exceptions."""
-class _WrappedUnaryStreamCall(_WrappedStreamResponseMixin,
aio.UnaryStreamCall):
+class _WrappedUnaryStreamCall(_WrappedStreamResponseMixin[P],
aio.UnaryStreamCall):
"""Wrapped UnaryStreamCall to map exceptions."""
class _WrappedStreamUnaryCall(
- _WrappedUnaryResponseMixin, _WrappedStreamRequestMixin, aio.StreamUnaryCall
+ _WrappedUnaryResponseMixin[P], _WrappedStreamRequestMixin,
aio.StreamUnaryCall
):
"""Wrapped StreamUnaryCall to map exceptions."""
class _WrappedStreamStreamCall(
- _WrappedStreamRequestMixin, _WrappedStreamResponseMixin,
aio.StreamStreamCall
+ _WrappedStreamRequestMixin, _WrappedStreamResponseMixin[P],
aio.StreamStreamCall
):
"""Wrapped StreamStreamCall to map exceptions."""
+# public type alias denoting the return type of async streaming gapic calls
+GrpcAsyncStream = _WrappedStreamResponseMixin[P]
+# public type alias denoting the return type of unary gapic calls
+AwaitableGrpcCall = _WrappedUnaryResponseMixin[P]
+
+
def _wrap_unary_errors(callable_):
"""Map errors for Unary-Unary async callables."""
grpc_helpers._patch_callable_name(callable_)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/google-api-core-2.14.0/google/api_core/version.py
new/google-api-core-2.15.0/google/api_core/version.py
--- old/google-api-core-2.14.0/google/api_core/version.py 2023-11-10
00:14:15.000000000 +0100
+++ new/google-api-core-2.15.0/google/api_core/version.py 2023-12-07
17:36:01.000000000 +0100
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "2.14.0"
+__version__ = "2.15.0"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/google-api-core-2.14.0/google_api_core.egg-info/PKG-INFO
new/google-api-core-2.15.0/google_api_core.egg-info/PKG-INFO
--- old/google-api-core-2.14.0/google_api_core.egg-info/PKG-INFO
2023-11-10 00:16:17.000000000 +0100
+++ new/google-api-core-2.15.0/google_api_core.egg-info/PKG-INFO
2023-12-07 17:38:24.000000000 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: google-api-core
-Version: 2.14.0
+Version: 2.15.0
Summary: Google API client core library
Home-page: https://github.com/googleapis/python-api-core
Author: Google LLC
@@ -17,6 +17,7 @@
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
+Classifier: Programming Language :: Python :: 3.12
Classifier: Operating System :: OS Independent
Classifier: Topic :: Internet
Requires-Python: >=3.7
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/google-api-core-2.14.0/google_api_core.egg-info/SOURCES.txt
new/google-api-core-2.15.0/google_api_core.egg-info/SOURCES.txt
--- old/google-api-core-2.14.0/google_api_core.egg-info/SOURCES.txt
2023-11-10 00:16:17.000000000 +0100
+++ new/google-api-core-2.15.0/google_api_core.egg-info/SOURCES.txt
2023-12-07 17:38:24.000000000 +0100
@@ -3,7 +3,6 @@
README.rst
setup.cfg
setup.py
-google/__init__.py
google/api_core/__init__.py
google/api_core/bidi.py
google/api_core/client_info.py
@@ -52,7 +51,6 @@
google_api_core.egg-info/PKG-INFO
google_api_core.egg-info/SOURCES.txt
google_api_core.egg-info/dependency_links.txt
-google_api_core.egg-info/namespace_packages.txt
google_api_core.egg-info/not-zip-safe
google_api_core.egg-info/requires.txt
google_api_core.egg-info/top_level.txt
@@ -79,6 +77,7 @@
tests/unit/test_grpc_helpers.py
tests/unit/test_iam.py
tests/unit/test_operation.py
+tests/unit/test_packaging.py
tests/unit/test_page_iterator.py
tests/unit/test_path_template.py
tests/unit/test_protobuf_helpers.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/google-api-core-2.14.0/google_api_core.egg-info/namespace_packages.txt
new/google-api-core-2.15.0/google_api_core.egg-info/namespace_packages.txt
--- old/google-api-core-2.14.0/google_api_core.egg-info/namespace_packages.txt
2023-11-10 00:16:17.000000000 +0100
+++ new/google-api-core-2.15.0/google_api_core.egg-info/namespace_packages.txt
1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-google
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/google-api-core-2.14.0/setup.py
new/google-api-core-2.15.0/setup.py
--- old/google-api-core-2.14.0/setup.py 2023-11-10 00:14:15.000000000 +0100
+++ new/google-api-core-2.15.0/setup.py 2023-12-07 17:36:01.000000000 +0100
@@ -63,15 +63,11 @@
# Only include packages under the 'google' namespace. Do not include tests,
# benchmarks, etc.
packages = [
- package for package in setuptools.find_packages() if
package.startswith("google")
+ package
+ for package in setuptools.find_namespace_packages()
+ if package.startswith("google")
]
-# Determine which namespaces are needed.
-namespaces = ["google"]
-if "google.cloud" in packages:
- namespaces.append("google.cloud")
-
-
setuptools.setup(
name=name,
version=version,
@@ -92,12 +88,12 @@
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
+ "Programming Language :: Python :: 3.12",
"Operating System :: OS Independent",
"Topic :: Internet",
],
platforms="Posix; MacOS X; Windows",
packages=packages,
- namespace_packages=namespaces,
install_requires=dependencies,
extras_require=extras,
python_requires=">=3.7",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/google-api-core-2.14.0/tests/asyncio/test_grpc_helpers_async.py
new/google-api-core-2.15.0/tests/asyncio/test_grpc_helpers_async.py
--- old/google-api-core-2.14.0/tests/asyncio/test_grpc_helpers_async.py
2023-11-10 00:14:15.000000000 +0100
+++ new/google-api-core-2.15.0/tests/asyncio/test_grpc_helpers_async.py
2023-12-07 17:36:01.000000000 +0100
@@ -266,6 +266,28 @@
wrap_unary_errors.assert_called_once_with(callable_)
+def test_grpc_async_stream():
+ """
+ GrpcAsyncStream type should be both an AsyncIterator and a grpc.aio.Call.
+ """
+ instance = grpc_helpers_async.GrpcAsyncStream[int]()
+ assert isinstance(instance, grpc.aio.Call)
+ # should implement __aiter__ and __anext__
+ assert hasattr(instance, "__aiter__")
+ it = instance.__aiter__()
+ assert hasattr(it, "__anext__")
+
+
+def test_awaitable_grpc_call():
+ """
+ AwaitableGrpcCall type should be an Awaitable and a grpc.aio.Call.
+ """
+ instance = grpc_helpers_async.AwaitableGrpcCall[int]()
+ assert isinstance(instance, grpc.aio.Call)
+ # should implement __await__
+ assert hasattr(instance, "__await__")
+
+
@mock.patch("google.api_core.grpc_helpers_async._wrap_stream_errors")
def test_wrap_errors_streaming(wrap_stream_errors):
callable_ = mock.create_autospec(aio.UnaryStreamMultiCallable)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/google-api-core-2.14.0/tests/asyncio/test_retry_async.py
new/google-api-core-2.15.0/tests/asyncio/test_retry_async.py
--- old/google-api-core-2.14.0/tests/asyncio/test_retry_async.py
2023-11-10 00:14:15.000000000 +0100
+++ new/google-api-core-2.15.0/tests/asyncio/test_retry_async.py
2023-12-07 17:36:01.000000000 +0100
@@ -280,7 +280,6 @@
@mock.patch("asyncio.sleep", autospec=True)
@pytest.mark.asyncio
async def test___call___and_execute_retry(self, sleep, uniform):
-
on_error = mock.Mock(spec=["__call__"], side_effect=[None])
retry_ = retry_async.AsyncRetry(
predicate=retry_async.if_exception_type(ValueError)
@@ -305,7 +304,6 @@
@mock.patch("asyncio.sleep", autospec=True)
@pytest.mark.asyncio
async def test___call___and_execute_retry_hitting_deadline(self, sleep,
uniform):
-
on_error = mock.Mock(spec=["__call__"], side_effect=[None] * 10)
retry_ = retry_async.AsyncRetry(
predicate=retry_async.if_exception_type(ValueError),
@@ -315,7 +313,7 @@
deadline=9.9,
)
- utcnow = datetime.datetime.utcnow()
+ utcnow = datetime.datetime.now(tz=datetime.timezone.utc)
utcnow_patcher = mock.patch(
"google.api_core.datetime_helpers.utcnow", return_value=utcnow
)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/google-api-core-2.14.0/tests/unit/test_client_options.py
new/google-api-core-2.15.0/tests/unit/test_client_options.py
--- old/google-api-core-2.14.0/tests/unit/test_client_options.py
2023-11-10 00:14:15.000000000 +0100
+++ new/google-api-core-2.15.0/tests/unit/test_client_options.py
2023-12-07 17:36:01.000000000 +0100
@@ -38,6 +38,7 @@
"https://www.googleapis.com/auth/cloud-platform.read-only",
],
api_audience="foo2.googleapis.com",
+ universe_domain="googleapis.com",
)
assert options.api_endpoint == "foo.googleapis.com"
@@ -49,6 +50,7 @@
"https://www.googleapis.com/auth/cloud-platform.read-only",
]
assert options.api_audience == "foo2.googleapis.com"
+ assert options.universe_domain == "googleapis.com"
def test_constructor_with_encrypted_cert_source():
@@ -110,6 +112,7 @@
options = client_options.from_dict(
{
"api_endpoint": "foo.googleapis.com",
+ "universe_domain": "googleapis.com",
"client_cert_source": get_client_cert,
"quota_project_id": "quote-proj",
"credentials_file": "path/to/credentials.json",
@@ -122,6 +125,7 @@
)
assert options.api_endpoint == "foo.googleapis.com"
+ assert options.universe_domain == "googleapis.com"
assert options.client_cert_source() == (b"cert", b"key")
assert options.quota_project_id == "quote-proj"
assert options.credentials_file == "path/to/credentials.json"
@@ -148,6 +152,7 @@
expected_keys = set(
[
"api_endpoint",
+ "universe_domain",
"client_cert_source",
"client_encrypted_cert_source",
"quota_project_id",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/google-api-core-2.14.0/tests/unit/test_grpc_helpers.py
new/google-api-core-2.15.0/tests/unit/test_grpc_helpers.py
--- old/google-api-core-2.14.0/tests/unit/test_grpc_helpers.py 2023-11-10
00:14:15.000000000 +0100
+++ new/google-api-core-2.15.0/tests/unit/test_grpc_helpers.py 2023-12-07
17:36:01.000000000 +0100
@@ -195,6 +195,23 @@
wrapped.trailing_metadata.assert_called_once_with()
+class TestGrpcStream(Test_StreamingResponseIterator):
+ @staticmethod
+ def _make_one(wrapped, **kw):
+ return grpc_helpers.GrpcStream(wrapped, **kw)
+
+ def test_grpc_stream_attributes(self):
+ """
+ Should be both a grpc.Call and an iterable
+ """
+ call = self._make_one(None)
+ assert isinstance(call, grpc.Call)
+ # should implement __iter__
+ assert hasattr(call, "__iter__")
+ it = call.__iter__()
+ assert hasattr(it, "__next__")
+
+
def test_wrap_stream_okay():
expected_responses = [1, 2, 3]
callable_ = mock.Mock(spec=["__call__"],
return_value=iter(expected_responses))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/google-api-core-2.14.0/tests/unit/test_iam.py
new/google-api-core-2.15.0/tests/unit/test_iam.py
--- old/google-api-core-2.14.0/tests/unit/test_iam.py 2023-11-10
00:14:15.000000000 +0100
+++ new/google-api-core-2.15.0/tests/unit/test_iam.py 2023-12-07
17:36:01.000000000 +0100
@@ -167,14 +167,15 @@
assert policy.owners == expected
def test_owners_setter(self):
- import warnings
from google.api_core.iam import OWNER_ROLE
MEMBER = "user:[email protected]"
expected = set([MEMBER])
policy = self._make_one()
- with warnings.catch_warnings(record=True) as warned:
+ with pytest.warns(
+ DeprecationWarning, match="Assigning to 'owners' is deprecated."
+ ) as warned:
policy.owners = [MEMBER]
(warning,) = warned
@@ -191,14 +192,15 @@
assert policy.editors == expected
def test_editors_setter(self):
- import warnings
from google.api_core.iam import EDITOR_ROLE
MEMBER = "user:[email protected]"
expected = set([MEMBER])
policy = self._make_one()
- with warnings.catch_warnings(record=True) as warned:
+ with pytest.warns(
+ DeprecationWarning, match="Assigning to 'editors' is deprecated."
+ ) as warned:
policy.editors = [MEMBER]
(warning,) = warned
@@ -215,14 +217,15 @@
assert policy.viewers == expected
def test_viewers_setter(self):
- import warnings
from google.api_core.iam import VIEWER_ROLE
MEMBER = "user:[email protected]"
expected = set([MEMBER])
policy = self._make_one()
- with warnings.catch_warnings(record=True) as warned:
+ with pytest.warns(
+ DeprecationWarning, match="Assigning to 'viewers' is deprecated."
+ ) as warned:
policy.viewers = [MEMBER]
(warning,) = warned
@@ -337,12 +340,13 @@
assert policy.to_api_repr() == {}
def test_to_api_repr_binding_w_duplicates(self):
- import warnings
from google.api_core.iam import OWNER_ROLE
OWNER = "group:[email protected]"
policy = self._make_one()
- with warnings.catch_warnings(record=True):
+ with pytest.warns(
+ DeprecationWarning, match="Assigning to 'owners' is deprecated."
+ ):
policy.owners = [OWNER, OWNER]
assert policy.to_api_repr() == {
"bindings": [{"role": OWNER_ROLE, "members": [OWNER]}]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/google-api-core-2.14.0/tests/unit/test_packaging.py
new/google-api-core-2.15.0/tests/unit/test_packaging.py
--- old/google-api-core-2.14.0/tests/unit/test_packaging.py 1970-01-01
01:00:00.000000000 +0100
+++ new/google-api-core-2.15.0/tests/unit/test_packaging.py 2023-12-07
17:36:01.000000000 +0100
@@ -0,0 +1,28 @@
+# Copyright 2023 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import os
+import subprocess
+import sys
+
+
+def test_namespace_package_compat(tmp_path):
+ # The ``google`` namespace package should not be masked
+ # by the presence of ``google-api-core``.
+ google = tmp_path / "google"
+ google.mkdir()
+ google.joinpath("othermod.py").write_text("")
+ env = dict(os.environ, PYTHONPATH=str(tmp_path))
+ cmd = [sys.executable, "-m", "google.othermod"]
+ subprocess.check_call(cmd, env=env)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/google-api-core-2.14.0/tests/unit/test_retry.py
new/google-api-core-2.15.0/tests/unit/test_retry.py
--- old/google-api-core-2.14.0/tests/unit/test_retry.py 2023-11-10
00:14:15.000000000 +0100
+++ new/google-api-core-2.15.0/tests/unit/test_retry.py 2023-12-07
17:36:01.000000000 +0100
@@ -361,7 +361,6 @@
@mock.patch("random.uniform", autospec=True, side_effect=lambda m, n: n)
@mock.patch("time.sleep", autospec=True)
def test___call___and_execute_retry(self, sleep, uniform):
-
on_error = mock.Mock(spec=["__call__"], side_effect=[None])
retry_ = retry.Retry(predicate=retry.if_exception_type(ValueError))
@@ -383,7 +382,6 @@
@mock.patch("random.uniform", autospec=True, side_effect=lambda m, n: n)
@mock.patch("time.sleep", autospec=True)
def test___call___and_execute_retry_hitting_deadline(self, sleep, uniform):
-
on_error = mock.Mock(spec=["__call__"], side_effect=[None] * 10)
retry_ = retry.Retry(
predicate=retry.if_exception_type(ValueError),
@@ -393,7 +391,7 @@
deadline=30.9,
)
- utcnow = datetime.datetime.utcnow()
+ utcnow = datetime.datetime.now(tz=datetime.timezone.utc)
utcnow_patcher = mock.patch(
"google.api_core.datetime_helpers.utcnow", return_value=utcnow
)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/google-api-core-2.14.0/tests/unit/test_timeout.py
new/google-api-core-2.15.0/tests/unit/test_timeout.py
--- old/google-api-core-2.14.0/tests/unit/test_timeout.py 2023-11-10
00:14:15.000000000 +0100
+++ new/google-api-core-2.15.0/tests/unit/test_timeout.py 2023-12-07
17:36:01.000000000 +0100
@@ -58,10 +58,10 @@
def test_apply(self):
target = mock.Mock(spec=["__call__", "__name__"], __name__="target")
- datetime.datetime.utcnow()
+ datetime.datetime.now(tz=datetime.timezone.utc)
datetime.timedelta(seconds=1)
- now = datetime.datetime.utcnow()
+ now = datetime.datetime.now(tz=datetime.timezone.utc)
times = [
now,
@@ -92,10 +92,10 @@
def test_apply_no_timeout(self):
target = mock.Mock(spec=["__call__", "__name__"], __name__="target")
- datetime.datetime.utcnow()
+ datetime.datetime.now(tz=datetime.timezone.utc)
datetime.timedelta(seconds=1)
- now = datetime.datetime.utcnow()
+ now = datetime.datetime.now(tz=datetime.timezone.utc)
times = [
now,