This repository was archived by the owner on Mar 31, 2026. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 174
Expand file tree
/
Copy pathgrpc_client.py
More file actions
122 lines (101 loc) · 4.53 KB
/
grpc_client.py
File metadata and controls
122 lines (101 loc) · 4.53 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
# Copyright 2025 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.
"""A client for interacting with Google Cloud Storage using the gRPC API."""
from google.cloud.client import ClientWithProject
from google.cloud import _storage_v2 as storage_v2
_marker = object()
class GrpcClient(ClientWithProject):
"""A client for interacting with Google Cloud Storage using the gRPC API.
:type project: str or None
:param project: The project which the client acts on behalf of. If not
passed, falls back to the default inferred from the
environment.
:type credentials: :class:`~google.auth.credentials.Credentials`
:param credentials: (Optional) The OAuth2 Credentials to use for this
client. If not passed, falls back to the default
inferred from the environment.
:type client_info: :class:`~google.api_core.client_info.ClientInfo`
:param client_info:
The client info used to send a user-agent string along with API
requests. If ``None``, then default info will be used. Generally,
you only need to set this if you're developing your own library
or partner tool.
:type client_options: :class:`~google.api_core.client_options.ClientOptions` or :class:`dict`
:param client_options: (Optional) Client options used to set user options
on the client. A non-default universe domain or API endpoint should be
set through client_options.
:type api_key: string
:param api_key:
(Optional) An API key. Mutually exclusive with any other credentials.
This parameter is an alias for setting `client_options.api_key` and
will supersede any API key set in the `client_options` parameter.
:type attempt_direct_path: bool
:param attempt_direct_path:
(Optional) Whether to attempt to use DirectPath for gRPC connections.
This provides a direct, unproxied connection to GCS for lower latency
and higher throughput, and is highly recommended when running on Google
Cloud infrastructure. Defaults to ``True``.
"""
def __init__(
self,
project=_marker,
credentials=None,
client_info=None,
client_options=None,
*,
api_key=None,
attempt_direct_path=True,
):
super(GrpcClient, self).__init__(project=project, credentials=credentials)
if isinstance(client_options, dict):
if api_key:
client_options["api_key"] = api_key
elif client_options is None:
client_options = {} if not api_key else {"api_key": api_key}
elif api_key:
client_options.api_key = api_key
self._grpc_client = self._create_gapic_client(
credentials=credentials,
client_info=client_info,
client_options=client_options,
attempt_direct_path=attempt_direct_path,
)
def _create_gapic_client(
self,
credentials=None,
client_info=None,
client_options=None,
attempt_direct_path=True,
):
"""Creates and configures the low-level GAPIC `storage_v2` client."""
transport_cls = storage_v2.StorageClient.get_transport_class("grpc")
channel = transport_cls.create_channel(attempt_direct_path=attempt_direct_path)
transport = transport_cls(credentials=credentials, channel=channel)
return storage_v2.StorageClient(
credentials=credentials,
transport=transport,
client_info=client_info,
client_options=client_options,
)
@property
def grpc_client(self):
"""The underlying gRPC client.
This property gives users direct access to the `storage_v2.StorageClient`
instance. This can be useful for accessing
newly added or experimental RPCs that are not yet exposed through
the high-level GrpcClient.
Returns:
google.cloud.storage_v2.StorageClient: The configured GAPIC client.
"""
return self._grpc_client