aboutsummaryrefslogtreecommitdiff
path: root/google/api_core
diff options
context:
space:
mode:
Diffstat (limited to 'google/api_core')
-rw-r--r--google/api_core/future/async_future.py5
-rw-r--r--google/api_core/gapic_v1/__init__.py1
-rw-r--r--google/api_core/gapic_v1/config.py4
-rw-r--r--google/api_core/gapic_v1/config_async.py4
-rw-r--r--google/api_core/gapic_v1/method_async.py19
-rw-r--r--google/api_core/grpc_helpers.py58
-rw-r--r--google/api_core/grpc_helpers_async.py35
-rw-r--r--google/api_core/iam.py5
-rw-r--r--google/api_core/operation.py16
-rw-r--r--google/api_core/operation_async.py8
-rw-r--r--google/api_core/operations_v1/operations_async_client.py16
-rw-r--r--google/api_core/operations_v1/operations_client.py8
-rw-r--r--google/api_core/retry_async.py33
13 files changed, 126 insertions, 86 deletions
diff --git a/google/api_core/future/async_future.py b/google/api_core/future/async_future.py
index e1d158d..0343fbe 100644
--- a/google/api_core/future/async_future.py
+++ b/google/api_core/future/async_future.py
@@ -24,6 +24,7 @@ from google.api_core.future import base
class _OperationNotComplete(Exception):
"""Private exception used for polling via retry."""
+
pass
@@ -145,7 +146,9 @@ class AsyncFuture(base.Future):
is complete.
"""
if self._background_task is None:
- self._background_task = asyncio.get_event_loop().create_task(self._blocking_poll())
+ self._background_task = asyncio.get_event_loop().create_task(
+ self._blocking_poll()
+ )
self._future.add_done_callback(fn)
def set_result(self, result):
diff --git a/google/api_core/gapic_v1/__init__.py b/google/api_core/gapic_v1/__init__.py
index ed95da1..6632047 100644
--- a/google/api_core/gapic_v1/__init__.py
+++ b/google/api_core/gapic_v1/__init__.py
@@ -24,5 +24,6 @@ __all__ = ["client_info", "config", "method", "routing_header"]
if sys.version_info >= (3, 6):
from google.api_core.gapic_v1 import config_async # noqa: F401
from google.api_core.gapic_v1 import method_async # noqa: F401
+
__all__.append("config_async")
__all__.append("method_async")
diff --git a/google/api_core/gapic_v1/config.py b/google/api_core/gapic_v1/config.py
index 2a56cf1..29e8645 100644
--- a/google/api_core/gapic_v1/config.py
+++ b/google/api_core/gapic_v1/config.py
@@ -153,7 +153,9 @@ def parse_method_configs(interface_config, retry_impl=retry.Retry):
if retry_params_name is not None:
retry_params = retry_params_map[retry_params_name]
retry_ = _retry_from_retry_config(
- retry_params, retry_codes_map[method_params["retry_codes_name"]], retry_impl
+ retry_params,
+ retry_codes_map[method_params["retry_codes_name"]],
+ retry_impl,
)
timeout_ = _timeout_from_retry_config(retry_params)
diff --git a/google/api_core/gapic_v1/config_async.py b/google/api_core/gapic_v1/config_async.py
index 00e5e24..13d6a48 100644
--- a/google/api_core/gapic_v1/config_async.py
+++ b/google/api_core/gapic_v1/config_async.py
@@ -38,5 +38,5 @@ def parse_method_configs(interface_config):
configuration.
"""
return config.parse_method_configs(
- interface_config,
- retry_impl=retry_async.AsyncRetry)
+ interface_config, retry_impl=retry_async.AsyncRetry
+ )
diff --git a/google/api_core/gapic_v1/method_async.py b/google/api_core/gapic_v1/method_async.py
index 5210b2b..76e5757 100644
--- a/google/api_core/gapic_v1/method_async.py
+++ b/google/api_core/gapic_v1/method_async.py
@@ -19,16 +19,16 @@ pagination, and long-running operations to gRPC methods.
from google.api_core import general_helpers, grpc_helpers_async
from google.api_core.gapic_v1 import client_info
-from google.api_core.gapic_v1.method import (_GapicCallable, # noqa: F401
- DEFAULT,
- USE_DEFAULT_METADATA)
+from google.api_core.gapic_v1.method import _GapicCallable
+from google.api_core.gapic_v1.method import DEFAULT # noqa: F401
+from google.api_core.gapic_v1.method import USE_DEFAULT_METADATA # noqa: F401
def wrap_method(
- func,
- default_retry=None,
- default_timeout=None,
- client_info=client_info.DEFAULT_CLIENT_INFO,
+ func,
+ default_retry=None,
+ default_timeout=None,
+ client_info=client_info.DEFAULT_CLIENT_INFO,
):
"""Wrap an async RPC method with common behavior.
@@ -41,5 +41,6 @@ def wrap_method(
metadata = [client_info.to_grpc_metadata()] if client_info is not None else None
- return general_helpers.wraps(func)(_GapicCallable(
- func, default_retry, default_timeout, metadata=metadata))
+ return general_helpers.wraps(func)(
+ _GapicCallable(func, default_retry, default_timeout, metadata=metadata)
+ )
diff --git a/google/api_core/grpc_helpers.py b/google/api_core/grpc_helpers.py
index e8f9ee8..62d9e53 100644
--- a/google/api_core/grpc_helpers.py
+++ b/google/api_core/grpc_helpers.py
@@ -157,7 +157,9 @@ def _wrap_stream_errors(callable_):
# hidden flag to see if pre-fetching is disabled.
# https://github.com/googleapis/python-pubsub/issues/93#issuecomment-630762257
prefetch_first = getattr(callable_, "_prefetch_first_result_", True)
- return _StreamingResponseIterator(result, prefetch_first_result=prefetch_first)
+ return _StreamingResponseIterator(
+ result, prefetch_first_result=prefetch_first
+ )
except grpc.RpcError as exc:
six.raise_from(exceptions.from_grpc_error(exc), exc)
@@ -187,13 +189,14 @@ def wrap_errors(callable_):
def _create_composite_credentials(
- credentials=None,
- credentials_file=None,
- default_scopes=None,
- scopes=None,
- ssl_credentials=None,
- quota_project_id=None,
- default_host=None):
+ credentials=None,
+ credentials_file=None,
+ default_scopes=None,
+ scopes=None,
+ ssl_credentials=None,
+ quota_project_id=None,
+ default_host=None,
+):
"""Create the composite credentials for secure channels.
Args:
@@ -227,20 +230,20 @@ def _create_composite_credentials(
if credentials_file:
credentials, _ = google.auth.load_credentials_from_file(
- credentials_file,
- scopes=scopes,
- default_scopes=default_scopes
+ credentials_file, scopes=scopes, default_scopes=default_scopes
)
elif credentials:
credentials = google.auth.credentials.with_scopes_if_required(
- credentials,
- scopes=scopes,
- default_scopes=default_scopes
+ credentials, scopes=scopes, default_scopes=default_scopes
)
else:
- credentials, _ = google.auth.default(scopes=scopes, default_scopes=default_scopes)
+ credentials, _ = google.auth.default(
+ scopes=scopes, default_scopes=default_scopes
+ )
- if quota_project_id and isinstance(credentials, google.auth.credentials.CredentialsWithQuotaProject):
+ if quota_project_id and isinstance(
+ credentials, google.auth.credentials.CredentialsWithQuotaProject
+ ):
credentials = credentials.with_quota_project(quota_project_id)
request = google.auth.transport.requests.Request()
@@ -257,21 +260,20 @@ def _create_composite_credentials(
ssl_credentials = grpc.ssl_channel_credentials()
# Combine the ssl credentials and the authorization credentials.
- return grpc.composite_channel_credentials(
- ssl_credentials, google_auth_credentials
- )
+ return grpc.composite_channel_credentials(ssl_credentials, google_auth_credentials)
def create_channel(
- target,
- credentials=None,
- scopes=None,
- ssl_credentials=None,
- credentials_file=None,
- quota_project_id=None,
- default_scopes=None,
- default_host=None,
- **kwargs):
+ target,
+ credentials=None,
+ scopes=None,
+ ssl_credentials=None,
+ credentials_file=None,
+ quota_project_id=None,
+ default_scopes=None,
+ default_host=None,
+ **kwargs
+):
"""Create a secure channel with credentials.
Args:
diff --git a/google/api_core/grpc_helpers_async.py b/google/api_core/grpc_helpers_async.py
index 14eb5a1..92df645 100644
--- a/google/api_core/grpc_helpers_async.py
+++ b/google/api_core/grpc_helpers_async.py
@@ -36,7 +36,6 @@ HAS_GRPC_GCP = False
class _WrappedCall(aio.Call):
-
def __init__(self):
self._call = None
@@ -80,7 +79,6 @@ class _WrappedCall(aio.Call):
class _WrappedUnaryResponseMixin(_WrappedCall):
-
def __await__(self):
try:
response = yield from self._call.__await__()
@@ -90,7 +88,6 @@ class _WrappedUnaryResponseMixin(_WrappedCall):
class _WrappedStreamResponseMixin(_WrappedCall):
-
def __init__(self):
self._wrapped_async_generator = None
@@ -117,7 +114,6 @@ class _WrappedStreamResponseMixin(_WrappedCall):
class _WrappedStreamRequestMixin(_WrappedCall):
-
async def write(self, request):
try:
await self._call.write(request)
@@ -142,11 +138,15 @@ class _WrappedUnaryStreamCall(_WrappedStreamResponseMixin, aio.UnaryStreamCall):
"""Wrapped UnaryStreamCall to map exceptions."""
-class _WrappedStreamUnaryCall(_WrappedUnaryResponseMixin, _WrappedStreamRequestMixin, aio.StreamUnaryCall):
+class _WrappedStreamUnaryCall(
+ _WrappedUnaryResponseMixin, _WrappedStreamRequestMixin, aio.StreamUnaryCall
+):
"""Wrapped StreamUnaryCall to map exceptions."""
-class _WrappedStreamStreamCall(_WrappedStreamRequestMixin, _WrappedStreamResponseMixin, aio.StreamStreamCall):
+class _WrappedStreamStreamCall(
+ _WrappedStreamRequestMixin, _WrappedStreamResponseMixin, aio.StreamStreamCall
+):
"""Wrapped StreamStreamCall to map exceptions."""
@@ -177,7 +177,7 @@ def _wrap_stream_errors(callable_):
elif isinstance(call, aio.StreamStreamCall):
call = _WrappedStreamStreamCall().with_call(call)
else:
- raise TypeError('Unexpected type of call %s' % type(call))
+ raise TypeError("Unexpected type of call %s" % type(call))
await call.wait_for_connection()
return call
@@ -207,15 +207,16 @@ def wrap_errors(callable_):
def create_channel(
- target,
- credentials=None,
- scopes=None,
- ssl_credentials=None,
- credentials_file=None,
- quota_project_id=None,
- default_scopes=None,
- default_host=None,
- **kwargs):
+ target,
+ credentials=None,
+ scopes=None,
+ ssl_credentials=None,
+ credentials_file=None,
+ quota_project_id=None,
+ default_scopes=None,
+ default_host=None,
+ **kwargs
+):
"""Create an AsyncIO secure channel with credentials.
Args:
@@ -251,7 +252,7 @@ def create_channel(
default_scopes=default_scopes,
ssl_credentials=ssl_credentials,
quota_project_id=quota_project_id,
- default_host=default_host
+ default_host=default_host,
)
return aio.secure_channel(target, composite_credentials, **kwargs)
diff --git a/google/api_core/iam.py b/google/api_core/iam.py
index c498c68..fc35469 100644
--- a/google/api_core/iam.py
+++ b/google/api_core/iam.py
@@ -450,10 +450,7 @@ class Policy(collections_abc.MutableMapping):
for binding in self._bindings:
members = binding.get("members")
if members:
- new_binding = {
- "role": binding["role"],
- "members": sorted(members)
- }
+ new_binding = {"role": binding["role"], "members": sorted(members)}
condition = binding.get("condition")
if condition:
new_binding["condition"] = condition
diff --git a/google/api_core/operation.py b/google/api_core/operation.py
index a806523..b17f753 100644
--- a/google/api_core/operation.py
+++ b/google/api_core/operation.py
@@ -310,8 +310,12 @@ def from_grpc(operation, operations_stub, result_type, grpc_metadata=None, **kwa
~.api_core.operation.Operation: The operation future to track the given
operation.
"""
- refresh = functools.partial(_refresh_grpc, operations_stub, operation.name, metadata=grpc_metadata)
- cancel = functools.partial(_cancel_grpc, operations_stub, operation.name, metadata=grpc_metadata)
+ refresh = functools.partial(
+ _refresh_grpc, operations_stub, operation.name, metadata=grpc_metadata
+ )
+ cancel = functools.partial(
+ _cancel_grpc, operations_stub, operation.name, metadata=grpc_metadata
+ )
return Operation(operation, refresh, cancel, result_type, **kwargs)
@@ -338,6 +342,10 @@ def from_gapic(operation, operations_client, result_type, grpc_metadata=None, **
~.api_core.operation.Operation: The operation future to track the given
operation.
"""
- refresh = functools.partial(operations_client.get_operation, operation.name, metadata=grpc_metadata)
- cancel = functools.partial(operations_client.cancel_operation, operation.name, metadata=grpc_metadata)
+ refresh = functools.partial(
+ operations_client.get_operation, operation.name, metadata=grpc_metadata
+ )
+ cancel = functools.partial(
+ operations_client.cancel_operation, operation.name, metadata=grpc_metadata
+ )
return Operation(operation, refresh, cancel, result_type, **kwargs)
diff --git a/google/api_core/operation_async.py b/google/api_core/operation_async.py
index b137235..6bae865 100644
--- a/google/api_core/operation_async.py
+++ b/google/api_core/operation_async.py
@@ -212,6 +212,10 @@ def from_gapic(operation, operations_client, result_type, grpc_metadata=None, **
~.api_core.operation.Operation: The operation future to track the given
operation.
"""
- refresh = functools.partial(operations_client.get_operation, operation.name, metadata=grpc_metadata)
- cancel = functools.partial(operations_client.cancel_operation, operation.name, metadata=grpc_metadata)
+ refresh = functools.partial(
+ operations_client.get_operation, operation.name, metadata=grpc_metadata
+ )
+ cancel = functools.partial(
+ operations_client.cancel_operation, operation.name, metadata=grpc_metadata
+ )
return AsyncOperation(operation, refresh, cancel, result_type, **kwargs)
diff --git a/google/api_core/operations_v1/operations_async_client.py b/google/api_core/operations_v1/operations_async_client.py
index b3d0135..5a5e556 100644
--- a/google/api_core/operations_v1/operations_async_client.py
+++ b/google/api_core/operations_v1/operations_async_client.py
@@ -125,7 +125,9 @@ class OperationsAsyncClient:
metadata = metadata or []
metadata.append(gapic_v1.routing_header.to_grpc_metadata({"name": name}))
- return await self._get_operation(request, retry=retry, timeout=timeout, metadata=metadata)
+ return await self._get_operation(
+ request, retry=retry, timeout=timeout, metadata=metadata
+ )
async def list_operations(
self,
@@ -192,7 +194,9 @@ class OperationsAsyncClient:
metadata.append(gapic_v1.routing_header.to_grpc_metadata({"name": name}))
# Create the method used to fetch pages
- method = functools.partial(self._list_operations, retry=retry, timeout=timeout, metadata=metadata)
+ method = functools.partial(
+ self._list_operations, retry=retry, timeout=timeout, metadata=metadata
+ )
iterator = page_iterator_async.AsyncGRPCIterator(
client=None,
@@ -260,7 +264,9 @@ class OperationsAsyncClient:
metadata = metadata or []
metadata.append(gapic_v1.routing_header.to_grpc_metadata({"name": name}))
- await self._cancel_operation(request, retry=retry, timeout=timeout, metadata=metadata)
+ await self._cancel_operation(
+ request, retry=retry, timeout=timeout, metadata=metadata
+ )
async def delete_operation(
self,
@@ -311,4 +317,6 @@ class OperationsAsyncClient:
metadata = metadata or []
metadata.append(gapic_v1.routing_header.to_grpc_metadata({"name": name}))
- await self._delete_operation(request, retry=retry, timeout=timeout, metadata=metadata)
+ await self._delete_operation(
+ request, retry=retry, timeout=timeout, metadata=metadata
+ )
diff --git a/google/api_core/operations_v1/operations_client.py b/google/api_core/operations_v1/operations_client.py
index b1218cf..e48eac0 100644
--- a/google/api_core/operations_v1/operations_client.py
+++ b/google/api_core/operations_v1/operations_client.py
@@ -139,7 +139,9 @@ class OperationsClient(object):
metadata = metadata or []
metadata.append(gapic_v1.routing_header.to_grpc_metadata({"name": name}))
- return self._get_operation(request, retry=retry, timeout=timeout, metadata=metadata)
+ return self._get_operation(
+ request, retry=retry, timeout=timeout, metadata=metadata
+ )
def list_operations(
self,
@@ -206,7 +208,9 @@ class OperationsClient(object):
metadata.append(gapic_v1.routing_header.to_grpc_metadata({"name": name}))
# Create the method used to fetch pages
- method = functools.partial(self._list_operations, retry=retry, timeout=timeout, metadata=metadata)
+ method = functools.partial(
+ self._list_operations, retry=retry, timeout=timeout, metadata=metadata
+ )
iterator = page_iterator.GRPCIterator(
client=None,
diff --git a/google/api_core/retry_async.py b/google/api_core/retry_async.py
index f925c3d..2dfa2f6 100644
--- a/google/api_core/retry_async.py
+++ b/google/api_core/retry_async.py
@@ -56,9 +56,12 @@ import datetime
import functools
import logging
-from google.api_core import datetime_helpers, exceptions
-from google.api_core.retry import (exponential_sleep_generator, # noqa: F401
- if_exception_type, if_transient_error)
+from google.api_core import datetime_helpers
+from google.api_core import exceptions
+from google.api_core.retry import exponential_sleep_generator
+from google.api_core.retry import if_exception_type # noqa: F401
+from google.api_core.retry import if_transient_error
+
_LOGGER = logging.getLogger(__name__)
_DEFAULT_INITIAL_DELAY = 1.0 # seconds
@@ -96,7 +99,11 @@ async def retry_target(target, predicate, sleep_generator, deadline, on_error=No
ValueError: If the sleep generator stops yielding values.
Exception: If the target raises a method that isn't retryable.
"""
- deadline_dt = (datetime_helpers.utcnow() + datetime.timedelta(seconds=deadline)) if deadline else None
+ deadline_dt = (
+ (datetime_helpers.utcnow() + datetime.timedelta(seconds=deadline))
+ if deadline
+ else None
+ )
last_exc = None
@@ -107,7 +114,7 @@ async def retry_target(target, predicate, sleep_generator, deadline, on_error=No
else:
return await asyncio.wait_for(
target(),
- timeout=(deadline_dt - datetime_helpers.utcnow()).total_seconds()
+ timeout=(deadline_dt - datetime_helpers.utcnow()).total_seconds(),
)
# pylint: disable=broad-except
# This function explicitly must deal with broad exceptions.
@@ -215,13 +222,15 @@ class AsyncRetry:
return retry_wrapped_func
- def _replace(self,
- predicate=None,
- initial=None,
- maximum=None,
- multiplier=None,
- deadline=None,
- on_error=None):
+ def _replace(
+ self,
+ predicate=None,
+ initial=None,
+ maximum=None,
+ multiplier=None,
+ deadline=None,
+ on_error=None,
+ ):
return AsyncRetry(
predicate=predicate or self._predicate,
initial=initial or self._initial,