google-cloud-modelarmor 0.1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (25) hide show
  1. google/cloud/modelarmor/__init__.py +117 -0
  2. google/cloud/modelarmor/gapic_version.py +16 -0
  3. google/cloud/modelarmor/py.typed +2 -0
  4. google/cloud/modelarmor_v1/__init__.py +114 -0
  5. google/cloud/modelarmor_v1/gapic_metadata.json +163 -0
  6. google/cloud/modelarmor_v1/gapic_version.py +16 -0
  7. google/cloud/modelarmor_v1/py.typed +2 -0
  8. google/cloud/modelarmor_v1/services/__init__.py +15 -0
  9. google/cloud/modelarmor_v1/services/model_armor/__init__.py +22 -0
  10. google/cloud/modelarmor_v1/services/model_armor/async_client.py +1377 -0
  11. google/cloud/modelarmor_v1/services/model_armor/client.py +1772 -0
  12. google/cloud/modelarmor_v1/services/model_armor/pagers.py +197 -0
  13. google/cloud/modelarmor_v1/services/model_armor/transports/__init__.py +36 -0
  14. google/cloud/modelarmor_v1/services/model_armor/transports/base.py +357 -0
  15. google/cloud/modelarmor_v1/services/model_armor/transports/grpc.py +607 -0
  16. google/cloud/modelarmor_v1/services/model_armor/transports/grpc_asyncio.py +730 -0
  17. google/cloud/modelarmor_v1/services/model_armor/transports/rest.py +2143 -0
  18. google/cloud/modelarmor_v1/services/model_armor/transports/rest_base.py +638 -0
  19. google/cloud/modelarmor_v1/types/__init__.py +106 -0
  20. google/cloud/modelarmor_v1/types/service.py +1881 -0
  21. google_cloud_modelarmor-0.1.0.dist-info/LICENSE +202 -0
  22. google_cloud_modelarmor-0.1.0.dist-info/METADATA +139 -0
  23. google_cloud_modelarmor-0.1.0.dist-info/RECORD +25 -0
  24. google_cloud_modelarmor-0.1.0.dist-info/WHEEL +5 -0
  25. google_cloud_modelarmor-0.1.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,197 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Copyright 2024 Google LLC
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+ from typing import (
17
+ Any,
18
+ AsyncIterator,
19
+ Awaitable,
20
+ Callable,
21
+ Iterator,
22
+ Optional,
23
+ Sequence,
24
+ Tuple,
25
+ Union,
26
+ )
27
+
28
+ from google.api_core import gapic_v1
29
+ from google.api_core import retry as retries
30
+ from google.api_core import retry_async as retries_async
31
+
32
+ try:
33
+ OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault, None]
34
+ OptionalAsyncRetry = Union[
35
+ retries_async.AsyncRetry, gapic_v1.method._MethodDefault, None
36
+ ]
37
+ except AttributeError: # pragma: NO COVER
38
+ OptionalRetry = Union[retries.Retry, object, None] # type: ignore
39
+ OptionalAsyncRetry = Union[retries_async.AsyncRetry, object, None] # type: ignore
40
+
41
+ from google.cloud.modelarmor_v1.types import service
42
+
43
+
44
+ class ListTemplatesPager:
45
+ """A pager for iterating through ``list_templates`` requests.
46
+
47
+ This class thinly wraps an initial
48
+ :class:`google.cloud.modelarmor_v1.types.ListTemplatesResponse` object, and
49
+ provides an ``__iter__`` method to iterate through its
50
+ ``templates`` field.
51
+
52
+ If there are more pages, the ``__iter__`` method will make additional
53
+ ``ListTemplates`` requests and continue to iterate
54
+ through the ``templates`` field on the
55
+ corresponding responses.
56
+
57
+ All the usual :class:`google.cloud.modelarmor_v1.types.ListTemplatesResponse`
58
+ attributes are available on the pager. If multiple requests are made, only
59
+ the most recent response is retained, and thus used for attribute lookup.
60
+ """
61
+
62
+ def __init__(
63
+ self,
64
+ method: Callable[..., service.ListTemplatesResponse],
65
+ request: service.ListTemplatesRequest,
66
+ response: service.ListTemplatesResponse,
67
+ *,
68
+ retry: OptionalRetry = gapic_v1.method.DEFAULT,
69
+ timeout: Union[float, object] = gapic_v1.method.DEFAULT,
70
+ metadata: Sequence[Tuple[str, Union[str, bytes]]] = ()
71
+ ):
72
+ """Instantiate the pager.
73
+
74
+ Args:
75
+ method (Callable): The method that was originally called, and
76
+ which instantiated this pager.
77
+ request (google.cloud.modelarmor_v1.types.ListTemplatesRequest):
78
+ The initial request object.
79
+ response (google.cloud.modelarmor_v1.types.ListTemplatesResponse):
80
+ The initial response object.
81
+ retry (google.api_core.retry.Retry): Designation of what errors,
82
+ if any, should be retried.
83
+ timeout (float): The timeout for this request.
84
+ metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be
85
+ sent along with the request as metadata. Normally, each value must be of type `str`,
86
+ but for metadata keys ending with the suffix `-bin`, the corresponding values must
87
+ be of type `bytes`.
88
+ """
89
+ self._method = method
90
+ self._request = service.ListTemplatesRequest(request)
91
+ self._response = response
92
+ self._retry = retry
93
+ self._timeout = timeout
94
+ self._metadata = metadata
95
+
96
+ def __getattr__(self, name: str) -> Any:
97
+ return getattr(self._response, name)
98
+
99
+ @property
100
+ def pages(self) -> Iterator[service.ListTemplatesResponse]:
101
+ yield self._response
102
+ while self._response.next_page_token:
103
+ self._request.page_token = self._response.next_page_token
104
+ self._response = self._method(
105
+ self._request,
106
+ retry=self._retry,
107
+ timeout=self._timeout,
108
+ metadata=self._metadata,
109
+ )
110
+ yield self._response
111
+
112
+ def __iter__(self) -> Iterator[service.Template]:
113
+ for page in self.pages:
114
+ yield from page.templates
115
+
116
+ def __repr__(self) -> str:
117
+ return "{0}<{1!r}>".format(self.__class__.__name__, self._response)
118
+
119
+
120
+ class ListTemplatesAsyncPager:
121
+ """A pager for iterating through ``list_templates`` requests.
122
+
123
+ This class thinly wraps an initial
124
+ :class:`google.cloud.modelarmor_v1.types.ListTemplatesResponse` object, and
125
+ provides an ``__aiter__`` method to iterate through its
126
+ ``templates`` field.
127
+
128
+ If there are more pages, the ``__aiter__`` method will make additional
129
+ ``ListTemplates`` requests and continue to iterate
130
+ through the ``templates`` field on the
131
+ corresponding responses.
132
+
133
+ All the usual :class:`google.cloud.modelarmor_v1.types.ListTemplatesResponse`
134
+ attributes are available on the pager. If multiple requests are made, only
135
+ the most recent response is retained, and thus used for attribute lookup.
136
+ """
137
+
138
+ def __init__(
139
+ self,
140
+ method: Callable[..., Awaitable[service.ListTemplatesResponse]],
141
+ request: service.ListTemplatesRequest,
142
+ response: service.ListTemplatesResponse,
143
+ *,
144
+ retry: OptionalAsyncRetry = gapic_v1.method.DEFAULT,
145
+ timeout: Union[float, object] = gapic_v1.method.DEFAULT,
146
+ metadata: Sequence[Tuple[str, Union[str, bytes]]] = ()
147
+ ):
148
+ """Instantiates the pager.
149
+
150
+ Args:
151
+ method (Callable): The method that was originally called, and
152
+ which instantiated this pager.
153
+ request (google.cloud.modelarmor_v1.types.ListTemplatesRequest):
154
+ The initial request object.
155
+ response (google.cloud.modelarmor_v1.types.ListTemplatesResponse):
156
+ The initial response object.
157
+ retry (google.api_core.retry.AsyncRetry): Designation of what errors,
158
+ if any, should be retried.
159
+ timeout (float): The timeout for this request.
160
+ metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be
161
+ sent along with the request as metadata. Normally, each value must be of type `str`,
162
+ but for metadata keys ending with the suffix `-bin`, the corresponding values must
163
+ be of type `bytes`.
164
+ """
165
+ self._method = method
166
+ self._request = service.ListTemplatesRequest(request)
167
+ self._response = response
168
+ self._retry = retry
169
+ self._timeout = timeout
170
+ self._metadata = metadata
171
+
172
+ def __getattr__(self, name: str) -> Any:
173
+ return getattr(self._response, name)
174
+
175
+ @property
176
+ async def pages(self) -> AsyncIterator[service.ListTemplatesResponse]:
177
+ yield self._response
178
+ while self._response.next_page_token:
179
+ self._request.page_token = self._response.next_page_token
180
+ self._response = await self._method(
181
+ self._request,
182
+ retry=self._retry,
183
+ timeout=self._timeout,
184
+ metadata=self._metadata,
185
+ )
186
+ yield self._response
187
+
188
+ def __aiter__(self) -> AsyncIterator[service.Template]:
189
+ async def async_generator():
190
+ async for page in self.pages:
191
+ for response in page.templates:
192
+ yield response
193
+
194
+ return async_generator()
195
+
196
+ def __repr__(self) -> str:
197
+ return "{0}<{1!r}>".format(self.__class__.__name__, self._response)
@@ -0,0 +1,36 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Copyright 2024 Google LLC
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+ from collections import OrderedDict
17
+ from typing import Dict, Type
18
+
19
+ from .base import ModelArmorTransport
20
+ from .grpc import ModelArmorGrpcTransport
21
+ from .grpc_asyncio import ModelArmorGrpcAsyncIOTransport
22
+ from .rest import ModelArmorRestInterceptor, ModelArmorRestTransport
23
+
24
+ # Compile a registry of transports.
25
+ _transport_registry = OrderedDict() # type: Dict[str, Type[ModelArmorTransport]]
26
+ _transport_registry["grpc"] = ModelArmorGrpcTransport
27
+ _transport_registry["grpc_asyncio"] = ModelArmorGrpcAsyncIOTransport
28
+ _transport_registry["rest"] = ModelArmorRestTransport
29
+
30
+ __all__ = (
31
+ "ModelArmorTransport",
32
+ "ModelArmorGrpcTransport",
33
+ "ModelArmorGrpcAsyncIOTransport",
34
+ "ModelArmorRestTransport",
35
+ "ModelArmorRestInterceptor",
36
+ )
@@ -0,0 +1,357 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Copyright 2024 Google LLC
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+ import abc
17
+ from typing import Awaitable, Callable, Dict, Optional, Sequence, Union
18
+
19
+ import google.api_core
20
+ from google.api_core import exceptions as core_exceptions
21
+ from google.api_core import gapic_v1
22
+ from google.api_core import retry as retries
23
+ import google.auth # type: ignore
24
+ from google.auth import credentials as ga_credentials # type: ignore
25
+ from google.cloud.location import locations_pb2 # type: ignore
26
+ from google.oauth2 import service_account # type: ignore
27
+ from google.protobuf import empty_pb2 # type: ignore
28
+
29
+ from google.cloud.modelarmor_v1 import gapic_version as package_version
30
+ from google.cloud.modelarmor_v1.types import service
31
+
32
+ DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo(
33
+ gapic_version=package_version.__version__
34
+ )
35
+
36
+
37
+ class ModelArmorTransport(abc.ABC):
38
+ """Abstract transport class for ModelArmor."""
39
+
40
+ AUTH_SCOPES = ("https://www.googleapis.com/auth/cloud-platform",)
41
+
42
+ DEFAULT_HOST: str = "modelarmor.googleapis.com"
43
+
44
+ def __init__(
45
+ self,
46
+ *,
47
+ host: str = DEFAULT_HOST,
48
+ credentials: Optional[ga_credentials.Credentials] = None,
49
+ credentials_file: Optional[str] = None,
50
+ scopes: Optional[Sequence[str]] = None,
51
+ quota_project_id: Optional[str] = None,
52
+ client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO,
53
+ always_use_jwt_access: Optional[bool] = False,
54
+ api_audience: Optional[str] = None,
55
+ **kwargs,
56
+ ) -> None:
57
+ """Instantiate the transport.
58
+
59
+ Args:
60
+ host (Optional[str]):
61
+ The hostname to connect to (default: 'modelarmor.googleapis.com').
62
+ credentials (Optional[google.auth.credentials.Credentials]): The
63
+ authorization credentials to attach to requests. These
64
+ credentials identify the application to the service; if none
65
+ are specified, the client will attempt to ascertain the
66
+ credentials from the environment.
67
+ credentials_file (Optional[str]): A file with credentials that can
68
+ be loaded with :func:`google.auth.load_credentials_from_file`.
69
+ This argument is mutually exclusive with credentials.
70
+ scopes (Optional[Sequence[str]]): A list of scopes.
71
+ quota_project_id (Optional[str]): An optional project to use for billing
72
+ and quota.
73
+ client_info (google.api_core.gapic_v1.client_info.ClientInfo):
74
+ The client info used to send a user-agent string along with
75
+ API requests. If ``None``, then default info will be used.
76
+ Generally, you only need to set this if you're developing
77
+ your own client library.
78
+ always_use_jwt_access (Optional[bool]): Whether self signed JWT should
79
+ be used for service account credentials.
80
+ """
81
+
82
+ scopes_kwargs = {"scopes": scopes, "default_scopes": self.AUTH_SCOPES}
83
+
84
+ # Save the scopes.
85
+ self._scopes = scopes
86
+ if not hasattr(self, "_ignore_credentials"):
87
+ self._ignore_credentials: bool = False
88
+
89
+ # If no credentials are provided, then determine the appropriate
90
+ # defaults.
91
+ if credentials and credentials_file:
92
+ raise core_exceptions.DuplicateCredentialArgs(
93
+ "'credentials_file' and 'credentials' are mutually exclusive"
94
+ )
95
+
96
+ if credentials_file is not None:
97
+ credentials, _ = google.auth.load_credentials_from_file(
98
+ credentials_file, **scopes_kwargs, quota_project_id=quota_project_id
99
+ )
100
+ elif credentials is None and not self._ignore_credentials:
101
+ credentials, _ = google.auth.default(
102
+ **scopes_kwargs, quota_project_id=quota_project_id
103
+ )
104
+ # Don't apply audience if the credentials file passed from user.
105
+ if hasattr(credentials, "with_gdch_audience"):
106
+ credentials = credentials.with_gdch_audience(
107
+ api_audience if api_audience else host
108
+ )
109
+
110
+ # If the credentials are service account credentials, then always try to use self signed JWT.
111
+ if (
112
+ always_use_jwt_access
113
+ and isinstance(credentials, service_account.Credentials)
114
+ and hasattr(service_account.Credentials, "with_always_use_jwt_access")
115
+ ):
116
+ credentials = credentials.with_always_use_jwt_access(True)
117
+
118
+ # Save the credentials.
119
+ self._credentials = credentials
120
+
121
+ # Save the hostname. Default to port 443 (HTTPS) if none is specified.
122
+ if ":" not in host:
123
+ host += ":443"
124
+ self._host = host
125
+
126
+ @property
127
+ def host(self):
128
+ return self._host
129
+
130
+ def _prep_wrapped_messages(self, client_info):
131
+ # Precompute the wrapped methods.
132
+ self._wrapped_methods = {
133
+ self.list_templates: gapic_v1.method.wrap_method(
134
+ self.list_templates,
135
+ default_retry=retries.Retry(
136
+ initial=1.0,
137
+ maximum=10.0,
138
+ multiplier=1.3,
139
+ predicate=retries.if_exception_type(
140
+ core_exceptions.ServiceUnavailable,
141
+ ),
142
+ deadline=60.0,
143
+ ),
144
+ default_timeout=60.0,
145
+ client_info=client_info,
146
+ ),
147
+ self.get_template: gapic_v1.method.wrap_method(
148
+ self.get_template,
149
+ default_retry=retries.Retry(
150
+ initial=1.0,
151
+ maximum=10.0,
152
+ multiplier=1.3,
153
+ predicate=retries.if_exception_type(
154
+ core_exceptions.ServiceUnavailable,
155
+ ),
156
+ deadline=60.0,
157
+ ),
158
+ default_timeout=60.0,
159
+ client_info=client_info,
160
+ ),
161
+ self.create_template: gapic_v1.method.wrap_method(
162
+ self.create_template,
163
+ default_timeout=60.0,
164
+ client_info=client_info,
165
+ ),
166
+ self.update_template: gapic_v1.method.wrap_method(
167
+ self.update_template,
168
+ default_timeout=60.0,
169
+ client_info=client_info,
170
+ ),
171
+ self.delete_template: gapic_v1.method.wrap_method(
172
+ self.delete_template,
173
+ default_timeout=60.0,
174
+ client_info=client_info,
175
+ ),
176
+ self.get_floor_setting: gapic_v1.method.wrap_method(
177
+ self.get_floor_setting,
178
+ default_retry=retries.Retry(
179
+ initial=1.0,
180
+ maximum=10.0,
181
+ multiplier=1.3,
182
+ predicate=retries.if_exception_type(
183
+ core_exceptions.ServiceUnavailable,
184
+ ),
185
+ deadline=60.0,
186
+ ),
187
+ default_timeout=60.0,
188
+ client_info=client_info,
189
+ ),
190
+ self.update_floor_setting: gapic_v1.method.wrap_method(
191
+ self.update_floor_setting,
192
+ default_timeout=60.0,
193
+ client_info=client_info,
194
+ ),
195
+ self.sanitize_user_prompt: gapic_v1.method.wrap_method(
196
+ self.sanitize_user_prompt,
197
+ default_retry=retries.Retry(
198
+ initial=1.0,
199
+ maximum=10.0,
200
+ multiplier=1.3,
201
+ predicate=retries.if_exception_type(
202
+ core_exceptions.ServiceUnavailable,
203
+ ),
204
+ deadline=60.0,
205
+ ),
206
+ default_timeout=60.0,
207
+ client_info=client_info,
208
+ ),
209
+ self.sanitize_model_response: gapic_v1.method.wrap_method(
210
+ self.sanitize_model_response,
211
+ default_retry=retries.Retry(
212
+ initial=1.0,
213
+ maximum=10.0,
214
+ multiplier=1.3,
215
+ predicate=retries.if_exception_type(
216
+ core_exceptions.ServiceUnavailable,
217
+ ),
218
+ deadline=60.0,
219
+ ),
220
+ default_timeout=60.0,
221
+ client_info=client_info,
222
+ ),
223
+ self.get_location: gapic_v1.method.wrap_method(
224
+ self.get_location,
225
+ default_timeout=None,
226
+ client_info=client_info,
227
+ ),
228
+ self.list_locations: gapic_v1.method.wrap_method(
229
+ self.list_locations,
230
+ default_timeout=None,
231
+ client_info=client_info,
232
+ ),
233
+ }
234
+
235
+ def close(self):
236
+ """Closes resources associated with the transport.
237
+
238
+ .. warning::
239
+ Only call this method if the transport is NOT shared
240
+ with other clients - this may cause errors in other clients!
241
+ """
242
+ raise NotImplementedError()
243
+
244
+ @property
245
+ def list_templates(
246
+ self,
247
+ ) -> Callable[
248
+ [service.ListTemplatesRequest],
249
+ Union[service.ListTemplatesResponse, Awaitable[service.ListTemplatesResponse]],
250
+ ]:
251
+ raise NotImplementedError()
252
+
253
+ @property
254
+ def get_template(
255
+ self,
256
+ ) -> Callable[
257
+ [service.GetTemplateRequest],
258
+ Union[service.Template, Awaitable[service.Template]],
259
+ ]:
260
+ raise NotImplementedError()
261
+
262
+ @property
263
+ def create_template(
264
+ self,
265
+ ) -> Callable[
266
+ [service.CreateTemplateRequest],
267
+ Union[service.Template, Awaitable[service.Template]],
268
+ ]:
269
+ raise NotImplementedError()
270
+
271
+ @property
272
+ def update_template(
273
+ self,
274
+ ) -> Callable[
275
+ [service.UpdateTemplateRequest],
276
+ Union[service.Template, Awaitable[service.Template]],
277
+ ]:
278
+ raise NotImplementedError()
279
+
280
+ @property
281
+ def delete_template(
282
+ self,
283
+ ) -> Callable[
284
+ [service.DeleteTemplateRequest],
285
+ Union[empty_pb2.Empty, Awaitable[empty_pb2.Empty]],
286
+ ]:
287
+ raise NotImplementedError()
288
+
289
+ @property
290
+ def get_floor_setting(
291
+ self,
292
+ ) -> Callable[
293
+ [service.GetFloorSettingRequest],
294
+ Union[service.FloorSetting, Awaitable[service.FloorSetting]],
295
+ ]:
296
+ raise NotImplementedError()
297
+
298
+ @property
299
+ def update_floor_setting(
300
+ self,
301
+ ) -> Callable[
302
+ [service.UpdateFloorSettingRequest],
303
+ Union[service.FloorSetting, Awaitable[service.FloorSetting]],
304
+ ]:
305
+ raise NotImplementedError()
306
+
307
+ @property
308
+ def sanitize_user_prompt(
309
+ self,
310
+ ) -> Callable[
311
+ [service.SanitizeUserPromptRequest],
312
+ Union[
313
+ service.SanitizeUserPromptResponse,
314
+ Awaitable[service.SanitizeUserPromptResponse],
315
+ ],
316
+ ]:
317
+ raise NotImplementedError()
318
+
319
+ @property
320
+ def sanitize_model_response(
321
+ self,
322
+ ) -> Callable[
323
+ [service.SanitizeModelResponseRequest],
324
+ Union[
325
+ service.SanitizeModelResponseResponse,
326
+ Awaitable[service.SanitizeModelResponseResponse],
327
+ ],
328
+ ]:
329
+ raise NotImplementedError()
330
+
331
+ @property
332
+ def get_location(
333
+ self,
334
+ ) -> Callable[
335
+ [locations_pb2.GetLocationRequest],
336
+ Union[locations_pb2.Location, Awaitable[locations_pb2.Location]],
337
+ ]:
338
+ raise NotImplementedError()
339
+
340
+ @property
341
+ def list_locations(
342
+ self,
343
+ ) -> Callable[
344
+ [locations_pb2.ListLocationsRequest],
345
+ Union[
346
+ locations_pb2.ListLocationsResponse,
347
+ Awaitable[locations_pb2.ListLocationsResponse],
348
+ ],
349
+ ]:
350
+ raise NotImplementedError()
351
+
352
+ @property
353
+ def kind(self) -> str:
354
+ raise NotImplementedError()
355
+
356
+
357
+ __all__ = ("ModelArmorTransport",)