python-service-builder 1.1.0__tar.gz → 1.2.1__tar.gz

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 (16) hide show
  1. {python_service_builder-1.1.0 → python_service_builder-1.2.1}/PKG-INFO +4 -2
  2. {python_service_builder-1.1.0 → python_service_builder-1.2.1}/pyproject.toml +19 -17
  3. {python_service_builder-1.1.0 → python_service_builder-1.2.1}/python_service_builder.egg-info/PKG-INFO +4 -2
  4. {python_service_builder-1.1.0 → python_service_builder-1.2.1}/python_service_builder.egg-info/requires.txt +2 -0
  5. {python_service_builder-1.1.0 → python_service_builder-1.2.1}/service_framework/__init_test.py +3 -3
  6. {python_service_builder-1.1.0 → python_service_builder-1.2.1}/service_framework/list_services.py +29 -7
  7. {python_service_builder-1.1.0 → python_service_builder-1.2.1}/service_framework/service_builder.py +2 -7
  8. python_service_builder-1.2.1/service_framework/services.py +374 -0
  9. {python_service_builder-1.1.0 → python_service_builder-1.2.1}/service_framework/services_test.py +0 -1
  10. python_service_builder-1.1.0/service_framework/services.py +0 -453
  11. {python_service_builder-1.1.0 → python_service_builder-1.2.1}/README.md +0 -0
  12. {python_service_builder-1.1.0 → python_service_builder-1.2.1}/python_service_builder.egg-info/SOURCES.txt +0 -0
  13. {python_service_builder-1.1.0 → python_service_builder-1.2.1}/python_service_builder.egg-info/dependency_links.txt +0 -0
  14. {python_service_builder-1.1.0 → python_service_builder-1.2.1}/python_service_builder.egg-info/top_level.txt +0 -0
  15. {python_service_builder-1.1.0 → python_service_builder-1.2.1}/service_framework/__init__.py +0 -0
  16. {python_service_builder-1.1.0 → python_service_builder-1.2.1}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: python-service-builder
3
- Version: 1.1.0
3
+ Version: 1.2.1
4
4
  Summary: Helper library for easier creation of Google services.
5
5
  Author-email: David Harcombe <david.harcombe@gmail.com>
6
6
  License: Apache 2.0
@@ -11,6 +11,7 @@ Classifier: Operating System :: OS Independent
11
11
  Requires-Python: >=3.10
12
12
  Description-Content-Type: text/markdown
13
13
  Requires-Dist: absl-py>=0.12.0
14
+ Requires-Dist: aenum>=3.1.0
14
15
  Requires-Dist: dataclasses-json>=0.5.2
15
16
  Requires-Dist: gcs-oauth2-boto-plugin>=2.7
16
17
  Requires-Dist: google-api-core>=1.26.1
@@ -24,6 +25,7 @@ Requires-Dist: httplib2>=0.19.0
24
25
  Requires-Dist: immutabledict>=2.2.1
25
26
  Requires-Dist: oauth2client>=4.1.3
26
27
  Requires-Dist: oauthlib>=3.1.0
28
+ Requires-Dist: web.py>=0.62
27
29
 
28
30
  # Python Library for helping to create Python services from Google APIs
29
31
 
@@ -4,31 +4,33 @@ build-backend = 'setuptools.build_meta'
4
4
 
5
5
  [project]
6
6
  name = "python-service-builder"
7
- version = "1.1.0"
7
+ version = "1.2.1"
8
8
  authors = [{ name = "David Harcombe", email = "david.harcombe@gmail.com" }]
9
9
  description = "Helper library for easier creation of Google services."
10
10
  readme = "README.md"
11
11
  requires-python = ">=3.10"
12
12
  classifiers = [
13
- "Programming Language :: Python :: 3",
14
- "Operating System :: OS Independent",
13
+ "Programming Language :: Python :: 3",
14
+ "Operating System :: OS Independent",
15
15
  ]
16
16
  license = { text = "Apache 2.0" }
17
17
  dependencies = [
18
- 'absl-py>=0.12.0',
19
- 'dataclasses-json>=0.5.2',
20
- 'gcs-oauth2-boto-plugin>=2.7',
21
- 'google-api-core>=1.26.1',
22
- 'google-api-python-client>=2.0.2',
23
- 'google-auth-httplib2>=0.1.0',
24
- 'google-auth-oauthlib>=0.4.3',
25
- 'google-auth>=1.28.0',
26
- 'google-reauth>=0.1.1',
27
- 'googleapis-common-protos>=1.53.0',
28
- 'httplib2>=0.19.0',
29
- 'immutabledict>=2.2.1',
30
- 'oauth2client>=4.1.3',
31
- 'oauthlib>=3.1.0',
18
+ 'absl-py>=0.12.0',
19
+ 'aenum>=3.1.0',
20
+ 'dataclasses-json>=0.5.2',
21
+ 'gcs-oauth2-boto-plugin>=2.7',
22
+ 'google-api-core>=1.26.1',
23
+ 'google-api-python-client>=2.0.2',
24
+ 'google-auth-httplib2>=0.1.0',
25
+ 'google-auth-oauthlib>=0.4.3',
26
+ 'google-auth>=1.28.0',
27
+ 'google-reauth>=0.1.1',
28
+ 'googleapis-common-protos>=1.53.0',
29
+ 'httplib2>=0.19.0',
30
+ 'immutabledict>=2.2.1',
31
+ 'oauth2client>=4.1.3',
32
+ 'oauthlib>=3.1.0',
33
+ 'web.py>=0.62',
32
34
  ]
33
35
 
34
36
  [tool.setuptools]
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: python-service-builder
3
- Version: 1.1.0
3
+ Version: 1.2.1
4
4
  Summary: Helper library for easier creation of Google services.
5
5
  Author-email: David Harcombe <david.harcombe@gmail.com>
6
6
  License: Apache 2.0
@@ -11,6 +11,7 @@ Classifier: Operating System :: OS Independent
11
11
  Requires-Python: >=3.10
12
12
  Description-Content-Type: text/markdown
13
13
  Requires-Dist: absl-py>=0.12.0
14
+ Requires-Dist: aenum>=3.1.0
14
15
  Requires-Dist: dataclasses-json>=0.5.2
15
16
  Requires-Dist: gcs-oauth2-boto-plugin>=2.7
16
17
  Requires-Dist: google-api-core>=1.26.1
@@ -24,6 +25,7 @@ Requires-Dist: httplib2>=0.19.0
24
25
  Requires-Dist: immutabledict>=2.2.1
25
26
  Requires-Dist: oauth2client>=4.1.3
26
27
  Requires-Dist: oauthlib>=3.1.0
28
+ Requires-Dist: web.py>=0.62
27
29
 
28
30
  # Python Library for helping to create Python services from Google APIs
29
31
 
@@ -1,4 +1,5 @@
1
1
  absl-py>=0.12.0
2
+ aenum>=3.1.0
2
3
  dataclasses-json>=0.5.2
3
4
  gcs-oauth2-boto-plugin>=2.7
4
5
  google-api-core>=1.26.1
@@ -12,3 +13,4 @@ httplib2>=0.19.0
12
13
  immutabledict>=2.2.1
13
14
  oauth2client>=4.1.3
14
15
  oauthlib>=3.1.0
16
+ web.py>=0.62
@@ -11,14 +11,14 @@
11
11
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
- import unittest
15
-
16
- from service_framework import lazy_property, camel_field
17
14
  import dataclasses
15
+ import unittest
18
16
  from dataclasses import Field, dataclass
19
17
 
20
18
  from dataclasses_json import dataclass_json
21
19
 
20
+ from service_framework import camel_field, lazy_property
21
+
22
22
 
23
23
  class LazyPropertyTest(unittest.TestCase):
24
24
  class Foo(object):
@@ -12,20 +12,41 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- from collections import namedtuple
16
- from pprint import pprint
17
- from absl import app
15
+ import json
16
+ import urllib.parse
18
17
  import urllib.request
18
+ from collections import namedtuple
19
19
  from contextlib import closing, suppress
20
- from urllib.request import urlopen
21
- import urllib.parse
22
- import json
20
+ from pprint import pprint
23
21
  from typing import Mapping
22
+ from urllib.request import urlopen
23
+
24
+ import aenum as enum
25
+ from absl import app
26
+
27
+ from service_framework.services import ServiceDefinition
24
28
 
25
29
  """ _summary_
26
30
  """
27
31
 
28
32
 
33
+ class ServiceFinder(enum.EnumMeta):
34
+ def __call__(cls, value, *args, **kwargs):
35
+ api = ServiceLister().find(name=value.lower())
36
+ if api:
37
+ (service_name, version) = api[0]
38
+ definition = ServiceDefinition(
39
+ service_name=service_name,
40
+ version=version,
41
+ discovery_service_url=(
42
+ f'https://{service_name}.googleapis.com/$discovery/rest'
43
+ f'?version={version}'))
44
+ return definition
45
+
46
+ else:
47
+ raise Exception(f'No service found for {value}')
48
+
49
+
29
50
  class ServiceLister(object):
30
51
  def find_all(self) -> Mapping[str, str]:
31
52
  return self.find(None)
@@ -67,7 +88,8 @@ class ServiceLister(object):
67
88
  def main(unused) -> None:
68
89
  del unused
69
90
 
70
- apis = ServiceLister().find(name='CHAT'.lower())
91
+ # apis = ServiceLister().find(name='CHAT'.lower())
92
+ apis = ServiceLister().find_all()
71
93
  pprint(apis, indent=2)
72
94
 
73
95
 
@@ -18,20 +18,15 @@ Authenticate and fetch a discoverable API service.
18
18
  from __future__ import annotations
19
19
 
20
20
  import dataclasses
21
- import logging
22
- from typing import Any, List, Mapping, Optional, Union
21
+ from typing import List, Mapping, Optional, Union
23
22
 
24
23
  import dataclasses_json
25
24
  import google_auth_httplib2
26
25
  from apiclient import discovery
27
- from google.auth import exceptions
28
26
  from google.oauth2 import credentials as oauth
29
- from httplib2 import Http
30
- from oauth2client import service_account
31
- from oauth2client import client
32
27
 
33
- from service_framework.services import Service
34
28
  from service_framework import snake_field
29
+ from service_framework.services import Service
35
30
 
36
31
 
37
32
  @dataclasses_json.dataclass_json(undefined=dataclasses_json.Undefined.EXCLUDE)
@@ -0,0 +1,374 @@
1
+ # Copyright 2022 David Harcombe
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # https://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+ from __future__ import annotations
15
+
16
+ import dataclasses
17
+ from typing import Optional
18
+
19
+ import aenum as enum
20
+ import dataclasses_json
21
+ import immutabledict
22
+
23
+ from . import camel_field, lazy_property
24
+
25
+
26
+ @dataclasses_json.dataclass_json
27
+ @dataclasses.dataclass
28
+ class ServiceDefinition(object):
29
+ """Defines a Google Service for the builder."""
30
+ service_name: Optional[str] = camel_field()
31
+ version: Optional[str] = camel_field()
32
+ discovery_service_url: Optional[str] = camel_field()
33
+
34
+
35
+ class S(enum.Enum):
36
+ """Defines the generic Enum for any service.
37
+
38
+ Raises:
39
+ ValueError: if no enum is defined.
40
+ """
41
+ @lazy_property
42
+ def definition(self) -> ServiceDefinition:
43
+ """Fetch the ServiceDefinition.
44
+
45
+ Lazily returns the dataclass containing the service definition
46
+ details. It has to be lazy, as it can't be defined at
47
+ initialization time.
48
+
49
+ Returns:
50
+ ServiceDefinition: the service definition
51
+ """
52
+ (service_name, version) = SERVICE_DEFINITIONS.get(self.name)
53
+ return ServiceDefinition(
54
+ service_name=service_name,
55
+ version=version,
56
+ discovery_service_url=(
57
+ f'https://{service_name}.googleapis.com/$discovery/rest'
58
+ f'?version={version}'))
59
+
60
+ @classmethod
61
+ def from_value(cls, value: str) -> S:
62
+ """Creates a service enum from the name of the service.
63
+
64
+ Args:
65
+ value (str): the service name
66
+
67
+ Raises:
68
+ ValueError: no service found
69
+
70
+ Returns:
71
+ S: the service definition
72
+ """
73
+ for k, v in cls.__members__.items():
74
+ if k == value.upper():
75
+ return v
76
+ else:
77
+ raise ValueError(f"'{cls.__name__}' enum not found for '{value}'")
78
+
79
+
80
+ SERVICE_DEFINITIONS = \
81
+ immutabledict.immutabledict(
82
+ {'ABUSIVEEXPERIENCEREPORT': ('abusiveexperiencereport', 'v1'),
83
+ 'ACCELERATEDMOBILEPAGEURL': ('acceleratedmobilepageurl', 'v1'),
84
+ 'ACCESSAPPROVAL': ('accessapproval', 'v1'),
85
+ 'ACCESSCONTEXTMANAGER': ('accesscontextmanager', 'v1'),
86
+ 'ADDRESSVALIDATION': ('addressvalidation', 'v1'),
87
+ 'ADEXCHANGEBUYER2': ('adexchangebuyer2', 'v2beta1'),
88
+ 'ADEXPERIENCEREPORT': ('adexperiencereport', 'v1'),
89
+ 'ADMIN': ('admin', 'reports_v1'),
90
+ 'ADMOB': ('admob', 'v1'),
91
+ 'ADSENSE': ('adsense', 'v2'),
92
+ 'ADSENSEPLATFORM': ('adsenseplatform', 'v1'),
93
+ 'ADVISORYNOTIFICATIONS': ('advisorynotifications', 'v1'),
94
+ 'AIPLATFORM': ('aiplatform', 'v1'),
95
+ 'AIRQUALITY': ('airquality', 'v1'),
96
+ 'ALERTCENTER': ('alertcenter', 'v1beta1'),
97
+ 'ALLOYDB': ('alloydb', 'v1'),
98
+ 'ANALYTICS': ('analytics', 'v3'),
99
+ 'ANALYTICSADMIN': ('analyticsadmin', 'v1beta'),
100
+ 'ANALYTICSDATA': ('analyticsdata', 'v1beta'),
101
+ 'ANALYTICSHUB': ('analyticshub', 'v1'),
102
+ 'ANALYTICSREPORTING': ('analyticsreporting', 'v4'),
103
+ 'ANDROIDDEVICEPROVISIONING': ('androiddeviceprovisioning', 'v1'),
104
+ 'ANDROIDENTERPRISE': ('androidenterprise', 'v1'),
105
+ 'ANDROIDMANAGEMENT': ('androidmanagement', 'v1'),
106
+ 'ANDROIDPUBLISHER': ('androidpublisher', 'v3'),
107
+ 'APIGATEWAY': ('apigateway', 'v1'),
108
+ 'APIGEE': ('apigee', 'v1'),
109
+ 'APIGEEREGISTRY': ('apigeeregistry', 'v1'),
110
+ 'APIKEYS': ('apikeys', 'v2'),
111
+ 'APIM': ('apim', 'v1alpha'),
112
+ 'APPENGINE': ('appengine', 'v1'),
113
+ 'APPHUB': ('apphub', 'v1'),
114
+ 'AREA120TABLES': ('area120tables', 'v1alpha1'),
115
+ 'AREAINSIGHTS': ('areainsights', 'v1'),
116
+ 'ARTIFACTREGISTRY': ('artifactregistry', 'v1'),
117
+ 'ASSUREDWORKLOADS': ('assuredworkloads', 'v1'),
118
+ 'AUTHORIZEDBUYERSMARKETPLACE': ('authorizedbuyersmarketplace', 'v1'),
119
+ 'BACKUPDR': ('backupdr', 'v1'),
120
+ 'BAREMETALSOLUTION': ('baremetalsolution', 'v2'),
121
+ 'BATCH': ('batch', 'v1'),
122
+ 'BEYONDCORP': ('beyondcorp', 'v1'),
123
+ 'BIGLAKE': ('biglake', 'v1'),
124
+ 'BIGQUERY': ('bigquery', 'v2'),
125
+ 'BIGQUERYCONNECTION': ('bigqueryconnection', 'v1'),
126
+ 'BIGQUERYDATAPOLICY': ('bigquerydatapolicy', 'v1'),
127
+ 'BIGQUERYDATATRANSFER': ('bigquerydatatransfer', 'v1'),
128
+ 'BIGQUERYRESERVATION': ('bigqueryreservation', 'v1'),
129
+ 'BIGTABLEADMIN': ('bigtableadmin', 'v2'),
130
+ 'BILLINGBUDGETS': ('billingbudgets', 'v1'),
131
+ 'BINARYAUTHORIZATION': ('binaryauthorization', 'v1'),
132
+ 'BLOCKCHAINNODEENGINE': ('blockchainnodeengine', 'v1'),
133
+ 'BLOGGER': ('blogger', 'v3'),
134
+ 'BOOKS': ('books', 'v1'),
135
+ 'BUSINESSPROFILEPERFORMANCE': ('businessprofileperformance', 'v1'),
136
+ 'CALENDAR': ('calendar', 'v3'),
137
+ 'CERTIFICATEMANAGER': ('certificatemanager', 'v1'),
138
+ 'CHAT': ('chat', 'v1'),
139
+ 'CHECKS': ('checks', 'v1alpha'),
140
+ 'CHROMEMANAGEMENT': ('chromemanagement', 'v1'),
141
+ 'CHROMEPOLICY': ('chromepolicy', 'v1'),
142
+ 'CHROMEUXREPORT': ('chromeuxreport', 'v1'),
143
+ 'CIVICINFO': ('civicinfo', 'v2'),
144
+ 'CLASSROOM': ('classroom', 'v1'),
145
+ 'CLOUDASSET': ('cloudasset', 'v1'),
146
+ 'CLOUDBILLING': ('cloudbilling', 'v1'),
147
+ 'CLOUDBUILD': ('cloudbuild', 'v2'),
148
+ 'CLOUDCHANNEL': ('cloudchannel', 'v1'),
149
+ 'CLOUDCONTROLSPARTNER': ('cloudcontrolspartner', 'v1'),
150
+ 'CLOUDDEPLOY': ('clouddeploy', 'v1'),
151
+ 'CLOUDERRORREPORTING': ('clouderrorreporting', 'v1beta1'),
152
+ 'CLOUDFUNCTIONS': ('cloudfunctions', 'v2'),
153
+ 'CLOUDIDENTITY': ('cloudidentity', 'v1'),
154
+ 'CLOUDKMS': ('cloudkms', 'v1'),
155
+ 'CLOUDPROFILER': ('cloudprofiler', 'v2'),
156
+ 'CLOUDRESOURCEMANAGER': ('cloudresourcemanager', 'v3'),
157
+ 'CLOUDSCHEDULER': ('cloudscheduler', 'v1'),
158
+ 'CLOUDSEARCH': ('cloudsearch', 'v1'),
159
+ 'CLOUDSHELL': ('cloudshell', 'v1'),
160
+ 'CLOUDSUPPORT': ('cloudsupport', 'v2'),
161
+ 'CLOUDTASKS': ('cloudtasks', 'v2'),
162
+ 'CLOUDTRACE': ('cloudtrace', 'v2'),
163
+ 'COMPOSER': ('composer', 'v1'),
164
+ 'COMPUTE': ('compute', 'v1'),
165
+ 'CONFIG': ('config', 'v1'),
166
+ 'CONNECTORS': ('connectors', 'v2'),
167
+ 'CONTACTCENTERAIPLATFORM': ('contactcenteraiplatform', 'v1alpha1'),
168
+ 'CONTACTCENTERINSIGHTS': ('contactcenterinsights', 'v1'),
169
+ 'CONTAINER': ('container', 'v1'),
170
+ 'CONTAINERANALYSIS': ('containeranalysis', 'v1'),
171
+ 'CONTENT': ('content', 'v2.1'),
172
+ 'CONTENTWAREHOUSE': ('contentwarehouse', 'v1'),
173
+ 'CSS': ('css', 'v1'),
174
+ 'CUSTOMSEARCH': ('customsearch', 'v1'),
175
+ 'DATACATALOG': ('datacatalog', 'v1'),
176
+ 'DATAFLOW': ('dataflow', 'v1b3'),
177
+ 'DATAFORM': ('dataform', 'v1beta1'),
178
+ 'DATAFUSION': ('datafusion', 'v1'),
179
+ 'DATALABELING': ('datalabeling', 'v1beta1'),
180
+ 'DATALINEAGE': ('datalineage', 'v1'),
181
+ 'DATAMIGRATION': ('datamigration', 'v1'),
182
+ 'DATAPIPELINES': ('datapipelines', 'v1'),
183
+ 'DATAPLEX': ('dataplex', 'v1'),
184
+ 'DATAPORTABILITY': ('dataportability', 'v1'),
185
+ 'DATAPROC': ('dataproc', 'v1'),
186
+ 'DATASTORE': ('datastore', 'v1'),
187
+ 'DATASTREAM': ('datastream', 'v1'),
188
+ 'DEPLOYMENTMANAGER': ('deploymentmanager', 'v2'),
189
+ 'DEVELOPERCONNECT': ('developerconnect', 'v1'),
190
+ 'DFAREPORTING': ('dfareporting', 'v4'),
191
+ 'DIALOGFLOW': ('dialogflow', 'v3'),
192
+ 'DIGITALASSETLINKS': ('digitalassetlinks', 'v1'),
193
+ 'DISCOVERY': ('discovery', 'v1'),
194
+ 'DISCOVERYENGINE': ('discoveryengine', 'v1'),
195
+ 'DISPLAYVIDEO': ('displayvideo', 'v4'),
196
+ 'DLP': ('dlp', 'v2'),
197
+ 'DNS': ('dns', 'v1'),
198
+ 'DOCS': ('docs', 'v1'),
199
+ 'DOCUMENTAI': ('documentai', 'v1'),
200
+ 'DOMAINS': ('domains', 'v1'),
201
+ 'DOUBLECLICKBIDMANAGER': ('doubleclickbidmanager', 'v2'),
202
+ 'DOUBLECLICKSEARCH': ('doubleclicksearch', 'v2'),
203
+ 'DRIVE': ('drive', 'v3'),
204
+ 'DRIVEACTIVITY': ('driveactivity', 'v2'),
205
+ 'DRIVELABELS': ('drivelabels', 'v2'),
206
+ 'ESSENTIALCONTACTS': ('essentialcontacts', 'v1'),
207
+ 'EVENTARC': ('eventarc', 'v1'),
208
+ 'FACTCHECKTOOLS': ('factchecktools', 'v1alpha1'),
209
+ 'FCM': ('fcm', 'v1'),
210
+ 'FCMDATA': ('fcmdata', 'v1beta1'),
211
+ 'FILE': ('file', 'v1'),
212
+ 'FIREBASE': ('firebase', 'v1beta1'),
213
+ 'FIREBASEAPPCHECK': ('firebaseappcheck', 'v1'),
214
+ 'FIREBASEAPPDISTRIBUTION': ('firebaseappdistribution', 'v1'),
215
+ 'FIREBASEDATABASE': ('firebasedatabase', 'v1beta'),
216
+ 'FIREBASEDATACONNECT': ('firebasedataconnect', 'v1beta'),
217
+ 'FIREBASEDYNAMICLINKS': ('firebasedynamiclinks', 'v1'),
218
+ 'FIREBASEHOSTING': ('firebasehosting', 'v1'),
219
+ 'FIREBASEML': ('firebaseml', 'v1'),
220
+ 'FIREBASERULES': ('firebaserules', 'v1'),
221
+ 'FIREBASESTORAGE': ('firebasestorage', 'v1beta'),
222
+ 'FIRESTORE': ('firestore', 'v1'),
223
+ 'FITNESS': ('fitness', 'v1'),
224
+ 'FORMS': ('forms', 'v1'),
225
+ 'GAMES': ('games', 'v1'),
226
+ 'GAMESCONFIGURATION': ('gamesConfiguration', 'v1configuration'),
227
+ 'GAMESMANAGEMENT': ('gamesManagement', 'v1management'),
228
+ 'GKEBACKUP': ('gkebackup', 'v1'),
229
+ 'GKEHUB': ('gkehub', 'v2'),
230
+ 'GKEONPREM': ('gkeonprem', 'v1'),
231
+ 'GMAIL': ('gmail', 'v1'),
232
+ 'GMAILPOSTMASTERTOOLS': ('gmailpostmastertools', 'v1'),
233
+ 'GROUPSMIGRATION': ('groupsmigration', 'v1'),
234
+ 'GROUPSSETTINGS': ('groupssettings', 'v1'),
235
+ 'HEALTHCARE': ('healthcare', 'v1'),
236
+ 'HOMEGRAPH': ('homegraph', 'v1'),
237
+ 'IAM': ('iam', 'v2'),
238
+ 'IAMCREDENTIALS': ('iamcredentials', 'v1'),
239
+ 'IAP': ('iap', 'v1'),
240
+ 'IDENTITYTOOLKIT': ('identitytoolkit', 'v3'),
241
+ 'IDS': ('ids', 'v1'),
242
+ 'INDEXING': ('indexing', 'v3'),
243
+ 'INTEGRATIONS': ('integrations', 'v1'),
244
+ 'JOBS': ('jobs', 'v4'),
245
+ 'KEEP': ('keep', 'v1'),
246
+ 'KGSEARCH': ('kgsearch', 'v1'),
247
+ 'KMSINVENTORY': ('kmsinventory', 'v1'),
248
+ 'LANGUAGE': ('language', 'v2'),
249
+ 'LIBRARYAGENT': ('libraryagent', 'v1'),
250
+ 'LICENSING': ('licensing', 'v1'),
251
+ 'LIFESCIENCES': ('lifesciences', 'v2beta'),
252
+ 'LOCALSERVICES': ('localservices', 'v1'),
253
+ 'LOGGING': ('logging', 'v2'),
254
+ 'LOOKER': ('looker', 'v1'),
255
+ 'MANAGEDIDENTITIES': ('managedidentities', 'v1'),
256
+ 'MANAGEDKAFKA': ('managedkafka', 'v1'),
257
+ 'MANUFACTURERS': ('manufacturers', 'v1'),
258
+ 'MARKETINGPLATFORMADMIN': ('marketingplatformadmin', 'v1alpha'),
259
+ 'MEET': ('meet', 'v2'),
260
+ 'MEMCACHE': ('memcache', 'v1'),
261
+ 'MERCHANTAPI': ('merchantapi', 'reviews_v1beta'),
262
+ 'METASTORE': ('metastore', 'v2'),
263
+ 'MIGRATIONCENTER': ('migrationcenter', 'v1'),
264
+ 'ML': ('ml', 'v1'),
265
+ 'MONITORING': ('monitoring', 'v3'),
266
+ 'MYBUSINESSACCOUNTMANAGEMENT': ('mybusinessaccountmanagement', 'v1'),
267
+ 'MYBUSINESSBUSINESSINFORMATION': ('mybusinessbusinessinformation', 'v1'),
268
+ 'MYBUSINESSLODGING': ('mybusinesslodging', 'v1'),
269
+ 'MYBUSINESSNOTIFICATIONS': ('mybusinessnotifications', 'v1'),
270
+ 'MYBUSINESSPLACEACTIONS': ('mybusinessplaceactions', 'v1'),
271
+ 'MYBUSINESSQANDA': ('mybusinessqanda', 'v1'),
272
+ 'MYBUSINESSVERIFICATIONS': ('mybusinessverifications', 'v1'),
273
+ 'NETAPP': ('netapp', 'v1'),
274
+ 'NETWORKCONNECTIVITY': ('networkconnectivity', 'v1'),
275
+ 'NETWORKMANAGEMENT': ('networkmanagement', 'v1'),
276
+ 'NETWORKSECURITY': ('networksecurity', 'v1'),
277
+ 'NETWORKSERVICES': ('networkservices', 'v1'),
278
+ 'NOTEBOOKS': ('notebooks', 'v2'),
279
+ 'OAUTH2': ('oauth2', 'v2'),
280
+ 'ONDEMANDSCANNING': ('ondemandscanning', 'v1'),
281
+ 'ORACLEDATABASE': ('oracledatabase', 'v1'),
282
+ 'ORGPOLICY': ('orgpolicy', 'v2'),
283
+ 'OSCONFIG': ('osconfig', 'v1'),
284
+ 'OSLOGIN': ('oslogin', 'v1'),
285
+ 'PAGESPEEDONLINE': ('pagespeedonline', 'v5'),
286
+ 'PARALLELSTORE': ('parallelstore', 'v1'),
287
+ 'PAYMENTSRESELLERSUBSCRIPTION': ('paymentsresellersubscription', 'v1'),
288
+ 'PEOPLE': ('people', 'v1'),
289
+ 'PLACES': ('places', 'v1'),
290
+ 'PLAYCUSTOMAPP': ('playcustomapp', 'v1'),
291
+ 'PLAYDEVELOPERREPORTING': ('playdeveloperreporting', 'v1beta1'),
292
+ 'PLAYGROUPING': ('playgrouping', 'v1alpha1'),
293
+ 'PLAYINTEGRITY': ('playintegrity', 'v1'),
294
+ 'POLICYANALYZER': ('policyanalyzer', 'v1'),
295
+ 'POLICYSIMULATOR': ('policysimulator', 'v1'),
296
+ 'POLICYTROUBLESHOOTER': ('policytroubleshooter', 'v1'),
297
+ 'POLLEN': ('pollen', 'v1'),
298
+ 'POLY': ('poly', 'v1'),
299
+ 'PRIVATECA': ('privateca', 'v1'),
300
+ 'PROD_TT_SASPORTAL': ('prod_tt_sasportal', 'v1alpha1'),
301
+ 'PUBLICCA': ('publicca', 'v1'),
302
+ 'PUBSUB': ('pubsub', 'v1'),
303
+ 'PUBSUBLITE': ('pubsublite', 'v1'),
304
+ 'RAPIDMIGRATIONASSESSMENT': ('rapidmigrationassessment', 'v1'),
305
+ 'READERREVENUESUBSCRIPTIONLINKING': ('readerrevenuesubscriptionlinking',
306
+ 'v1'),
307
+ 'REALTIMEBIDDING': ('realtimebidding', 'v1'),
308
+ 'RECAPTCHAENTERPRISE': ('recaptchaenterprise', 'v1'),
309
+ 'RECOMMENDATIONENGINE': ('recommendationengine', 'v1beta1'),
310
+ 'RECOMMENDER': ('recommender', 'v1'),
311
+ 'REDIS': ('redis', 'v1'),
312
+ 'RESELLER': ('reseller', 'v1'),
313
+ 'RETAIL': ('retail', 'v2'),
314
+ 'RUN': ('run', 'v2'),
315
+ 'RUNTIMECONFIG': ('runtimeconfig', 'v1'),
316
+ 'SAFEBROWSING': ('safebrowsing', 'v5'),
317
+ 'SASPORTAL': ('sasportal', 'v1alpha1'),
318
+ 'SCRIPT': ('script', 'v1'),
319
+ 'SEARCHADS360': ('searchads360', 'v0'),
320
+ 'SEARCHCONSOLE': ('searchconsole', 'v1'),
321
+ 'SECRETMANAGER': ('secretmanager', 'v1'),
322
+ 'SECURITYCENTER': ('securitycenter', 'v1'),
323
+ 'SECURITYPOSTURE': ('securityposture', 'v1'),
324
+ 'SERVICECONSUMERMANAGEMENT': ('serviceconsumermanagement', 'v1'),
325
+ 'SERVICECONTROL': ('servicecontrol', 'v2'),
326
+ 'SERVICEDIRECTORY': ('servicedirectory', 'v1'),
327
+ 'SERVICEMANAGEMENT': ('servicemanagement', 'v1'),
328
+ 'SERVICENETWORKING': ('servicenetworking', 'v1'),
329
+ 'SERVICEUSAGE': ('serviceusage', 'v1'),
330
+ 'SHEETS': ('sheets', 'v4'),
331
+ 'SITEVERIFICATION': ('siteVerification', 'v1'),
332
+ 'SLIDES': ('slides', 'v1'),
333
+ 'SMARTDEVICEMANAGEMENT': ('smartdevicemanagement', 'v1'),
334
+ 'SOLAR': ('solar', 'v1'),
335
+ 'SPANNER': ('spanner', 'v1'),
336
+ 'SPEECH': ('speech', 'v1'),
337
+ 'SQLADMIN': ('sqladmin', 'v1'),
338
+ 'STORAGE': ('storage', 'v1'),
339
+ 'STORAGETRANSFER': ('storagetransfer', 'v1'),
340
+ 'STREETVIEWPUBLISH': ('streetviewpublish', 'v1'),
341
+ 'STS': ('sts', 'v1'),
342
+ 'TAGMANAGER': ('tagmanager', 'v2'),
343
+ 'TASKS': ('tasks', 'v1'),
344
+ 'TESTING': ('testing', 'v1'),
345
+ 'TEXTTOSPEECH': ('texttospeech', 'v1'),
346
+ 'TOOLRESULTS': ('toolresults', 'v1beta3'),
347
+ 'TPU': ('tpu', 'v2'),
348
+ 'TRAFFICDIRECTOR': ('trafficdirector', 'v3'),
349
+ 'TRANSCODER': ('transcoder', 'v1'),
350
+ 'TRANSLATE': ('translate', 'v3'),
351
+ 'TRAVELIMPACTMODEL': ('travelimpactmodel', 'v1'),
352
+ 'VAULT': ('vault', 'v1'),
353
+ 'VERIFIEDACCESS': ('verifiedaccess', 'v2'),
354
+ 'VERSIONHISTORY': ('versionhistory', 'v1'),
355
+ 'VIDEOINTELLIGENCE': ('videointelligence', 'v1'),
356
+ 'VISION': ('vision', 'v1'),
357
+ 'VMMIGRATION': ('vmmigration', 'v1'),
358
+ 'VMWAREENGINE': ('vmwareengine', 'v1'),
359
+ 'VPCACCESS': ('vpcaccess', 'v1'),
360
+ 'WALLETOBJECTS': ('walletobjects', 'v1'),
361
+ 'WEBFONTS': ('webfonts', 'v1'),
362
+ 'WEBRISK': ('webrisk', 'v1'),
363
+ 'WEBSECURITYSCANNER': ('websecurityscanner', 'v1'),
364
+ 'WORKFLOWEXECUTIONS': ('workflowexecutions', 'v1'),
365
+ 'WORKFLOWS': ('workflows', 'v1'),
366
+ 'WORKLOADMANAGER': ('workloadmanager', 'v1'),
367
+ 'WORKSPACEEVENTS': ('workspaceevents', 'v1'),
368
+ 'WORKSTATIONS': ('workstations', 'v1'),
369
+ 'YOUTUBE': ('youtube', 'v3'),
370
+ 'YOUTUBEANALYTICS': ('youtubeAnalytics', 'v2'),
371
+ 'YOUTUBEREPORTING': ('youtubereporting', 'v1')})
372
+
373
+
374
+ Service = S('Service', list(SERVICE_DEFINITIONS.keys()))
@@ -33,4 +33,3 @@ class ServicesTest(unittest.TestCase):
33
33
 
34
34
  def test_single_definition(self):
35
35
  self.assertEqual(SA360_DEFINITION, services.Service.DOUBLECLICKSEARCH.definition)
36
-
@@ -1,453 +0,0 @@
1
- # Copyright 2022 David Harcombe
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # https://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
14
- from __future__ import annotations
15
-
16
- import dataclasses
17
- import aenum as enum
18
- from typing import Any, Optional
19
-
20
- import dataclasses_json
21
- import immutabledict
22
-
23
- from . import camel_field, lazy_property
24
- from .list_services import ServiceLister
25
-
26
-
27
- @dataclasses_json.dataclass_json
28
- @dataclasses.dataclass
29
- class ServiceDefinition(object):
30
- """Defines a Google Service for the builder."""
31
- service_name: Optional[str] = camel_field()
32
- version: Optional[str] = camel_field()
33
- discovery_service_url: Optional[str] = camel_field()
34
-
35
-
36
- DEFINITIONS = {'UNDEFINED': ('undefined', 'undefined')}
37
-
38
-
39
- class ServiceFinder(enum.EnumMeta):
40
- def __call__(cls, value, *args, **kwargs):
41
- api = ServiceLister().find(name=value.lower())
42
- if api:
43
- (service_name, version) = ('foo', 'v1') # api[value]
44
- definition = ServiceDefinition(
45
- service_name=service_name,
46
- version=version,
47
- discovery_service_url=(
48
- f'https://{service_name}.googleapis.com/$discovery/rest'
49
- f'?version={version}'))
50
- DEFINITIONS |= {value.upper(): (service_name, version)}
51
- return definition
52
-
53
- else:
54
- raise Exception(f'No service found for {value}')
55
-
56
-
57
- class DS(enum.Enum): #, metaclass=ServiceFinder):
58
- """Defines the generic Enum for any service.
59
-
60
- Raises:
61
- ValueError: if no enum is defined and a service cannot be found.
62
- """
63
-
64
- @lazy_property
65
- def definition(self) -> ServiceDefinition:
66
- """Fetch the ServiceDefinition.
67
-
68
- Lazily returns the dataclass containing the service definition
69
- details. It has to be lazy, as it can't be defined at
70
- initialization time.
71
-
72
- Returns:
73
- ServiceDefinition: the service definition
74
- """
75
- (service_name, version) = DEFINITIONS.get(self.name)
76
- return ServiceDefinition(
77
- service_name=service_name,
78
- version=version,
79
- discovery_service_url=(
80
- f'https://{service_name}.googleapis.com/$discovery/rest'
81
- f'?version={version}'))
82
-
83
- @classmethod
84
- def from_value(cls, value: str) -> DS:
85
- """Creates a service enum from the name of the service.
86
-
87
- Args:
88
- value (str): the service name
89
-
90
- Raises:
91
- ValueError: no service found
92
-
93
- Returns:
94
- S: the service definition
95
- """
96
- for k, v in cls.__members__.items():
97
- if k == value.upper():
98
- return v.value
99
- else:
100
- api = ServiceLister().find(name=value.lower())
101
- if api:
102
- (service_name, version) = api[value]
103
- definition = ServiceDefinition(
104
- service_name=service_name,
105
- version=version,
106
- discovery_service_url=(
107
- f'https://{service_name}.googleapis.com/$discovery/rest'
108
- f'?version={version}'))
109
- enum.extend_enum(cls, value.upper(), definition)
110
- return definition
111
-
112
- raise ValueError(f"'{cls.__name__}' enum not found for '{value}'")
113
-
114
-
115
- DynamicService = DS('DynamicService', list(DEFINITIONS.keys()))
116
-
117
-
118
- class S(enum.Enum):
119
- """Defines the generic Enum for any service.
120
-
121
- Raises:
122
- ValueError: if no enum is defined.
123
- """
124
- @lazy_property
125
- def definition(self) -> ServiceDefinition:
126
- """Fetch the ServiceDefinition.
127
-
128
- Lazily returns the dataclass containing the service definition
129
- details. It has to be lazy, as it can't be defined at
130
- initialization time.
131
-
132
- Returns:
133
- ServiceDefinition: the service definition
134
- """
135
- (service_name, version) = SERVICE_DEFINITIONS.get(self.name)
136
- return ServiceDefinition(
137
- service_name=service_name,
138
- version=version,
139
- discovery_service_url=(
140
- f'https://{service_name}.googleapis.com/$discovery/rest'
141
- f'?version={version}'))
142
-
143
- @classmethod
144
- def from_value(cls, value: str) -> S:
145
- """Creates a service enum from the name of the service.
146
-
147
- Args:
148
- value (str): the service name
149
-
150
- Raises:
151
- ValueError: no service found
152
-
153
- Returns:
154
- S: the service definition
155
- """
156
- for k, v in cls.__members__.items():
157
- if k == value.upper():
158
- return v
159
- else:
160
- raise ValueError(f"'{cls.__name__}' enum not found for '{value}'")
161
-
162
-
163
- SERVICE_DEFINITIONS = \
164
- immutabledict.immutabledict({
165
- 'ABUSIVEEXPERIENCEREPORT': ('abusiveexperiencereport', 'v1'),
166
- 'ACCELERATEDMOBILEPAGEURL': ('acceleratedmobilepageurl', 'v1'),
167
- 'ACCESSAPPROVAL': ('accessapproval', 'v1'),
168
- 'ACCESSCONTEXTMANAGER': ('accesscontextmanager', 'v1'),
169
- 'ADDRESSVALIDATION': ('addressvalidation', 'v1'),
170
- 'ADEXCHANGEBUYER2': ('adexchangebuyer2', 'v2beta1'),
171
- 'ADEXPERIENCEREPORT': ('adexperiencereport', 'v1'),
172
- 'ADMIN': ('admin', 'reports_v1'),
173
- 'ADMOB': ('admob', 'v1'),
174
- 'ADSENSE': ('adsense', 'v2'),
175
- 'ADSENSEPLATFORM': ('adsenseplatform', 'v1'),
176
- 'ADVISORYNOTIFICATIONS': ('advisorynotifications', 'v1'),
177
- 'AIPLATFORM': ('aiplatform', 'v1'),
178
- 'AIRQUALITY': ('airquality', 'v1'),
179
- 'ALERTCENTER': ('alertcenter', 'v1beta1'),
180
- 'ALLOYDB': ('alloydb', 'v1'),
181
- 'ANALYTICS': ('analytics', 'v3'),
182
- 'ANALYTICSADMIN': ('analyticsadmin', 'v1beta'),
183
- 'ANALYTICSDATA': ('analyticsdata', 'v1beta'),
184
- 'ANALYTICSHUB': ('analyticshub', 'v1'),
185
- 'ANALYTICSREPORTING': ('analyticsreporting', 'v4'),
186
- 'ANDROIDDEVICEPROVISIONING': ('androiddeviceprovisioning', 'v1'),
187
- 'ANDROIDENTERPRISE': ('androidenterprise', 'v1'),
188
- 'ANDROIDMANAGEMENT': ('androidmanagement', 'v1'),
189
- 'ANDROIDPUBLISHER': ('androidpublisher', 'v3'),
190
- 'APIGATEWAY': ('apigateway', 'v1'),
191
- 'APIGEE': ('apigee', 'v1'),
192
- 'APIGEEREGISTRY': ('apigeeregistry', 'v1'),
193
- 'APIKEYS': ('apikeys', 'v2'),
194
- 'APIM': ('apim', 'v1alpha'),
195
- 'APPENGINE': ('appengine', 'v1'),
196
- 'APPHUB': ('apphub', 'v1'),
197
- 'AREA120TABLES': ('area120tables', 'v1aha1'),
198
- 'ARTIFACTREGISTRY': ('artifactregistry''v1'),
199
- 'ASSUREDWORKLOADS': ('assuredworkloads''v1'),
200
- 'AUTHORIZEDBUYERSMARKETPLACE': ('authorizedbuyersmarketplace', 'v1'),
201
- 'BACKUPDR': ('backupdr', 'v1'),
202
- 'BAREMETALSOLUTION': ('baremetalsolution', 'v2'),
203
- 'BATCH': ('batch', 'v1'),
204
- 'BEYONDCORP': ('beyondcorp', 'v1'),
205
- 'BIGLAKE': ('biglake', 'v1'),
206
- 'BIGQUERY': ('bigquery', 'v2'),
207
- 'BIGQUERYCONNECTION': ('bigqueryconnection', 'v1'),
208
- 'BIGQUERYDATAPOLICY': ('bigquerydatapolicy', 'v1'),
209
- 'BIGQUERYDATATRANSFER': ('bigquerydatatransfer', 'v1'),
210
- 'BIGQUERYRESERVATION': ('bigqueryreservation', 'v1'),
211
- 'BIGTABLEADMIN': ('bigtableadmin', 'v2'),
212
- 'BILLINGBUDGETS': ('billingbudgets', 'v1'),
213
- 'BINARYAUTHORIZATION': ('binaryauthorization', 'v1'),
214
- 'BLOCKCHAINNODEENGINE': ('blockchainnodeengine', 'v1'),
215
- 'BLOGGER': ('blogger', 'v3'),
216
- 'BOOKS': ('books', 'v1'),
217
- 'BUSINESSPROFILEPERFORMANCE': ('businessprofileperformance', 'v1'),
218
- 'CALENDAR': ('calendar', 'v3'),
219
- 'CERTIFICATEMANAGER': ('certificatemanager', 'v1'),
220
- 'CHAT': ('chat', 'v1'),
221
- 'CHECKS': ('checks', 'v1alpha'),
222
- 'CHROMEMANAGEMENT': ('chromemanagement', 'v1'),
223
- 'CHROMEPOLICY': ('chromepolicy', 'v1'),
224
- 'CHROMEUXREPORT': ('chromeuxreport', 'v1'),
225
- 'CIVICINFO': ('civicinfo', 'v2'),
226
- 'CLASSROOM': ('classroom', 'v1'),
227
- 'CLOUDASSET': ('cloudasset', 'v1'),
228
- 'CLOUDBILLING': ('cloudbilling', 'v1'),
229
- 'CLOUDBUILD': ('cloudbuild', 'v2'),
230
- 'CLOUDCHANNEL': ('cloudchannel', 'v1'),
231
- 'CLOUDCONTROLSPARTNER': ('cloudcontrolspartner', 'v1'),
232
- 'CLOUDDEPLOY': ('clouddeploy', 'v1'),
233
- 'CLOUDERRORREPORTING': ('clouderrorreporting', 'v1beta1'),
234
- 'CLOUDFUNCTIONS': ('cloudfunctions', 'v2'),
235
- 'CLOUDIDENTITY': ('cloudidentity', 'v1'),
236
- 'CLOUDKMS': ('cloudkms', 'v1'),
237
- 'CLOUDPROFILER': ('cloudprofiler', 'v2'),
238
- 'CLOUDRESOURCEMANAGER': ('cloudresourcemanager', 'v3'),
239
- 'CLOUDSCHEDULER': ('cloudscheduler', 'v1'),
240
- 'CLOUDSEARCH': ('cloudsearch', 'v1'),
241
- 'CLOUDSHELL': ('cloudshell', 'v1'),
242
- 'CLOUDSUPPORT': ('cloudsupport', 'v2'),
243
- 'CLOUDTASKS': ('cloudtasks', 'v2'),
244
- 'CLOUDTRACE': ('cloudtrace', 'v2'),
245
- 'COMPOSER': ('composer', 'v1'),
246
- 'COMPUTE': ('compute', 'v1'),
247
- 'CONFIG': ('config', 'v1'),
248
- 'CONNECTORS': ('connectors', 'v2'),
249
- 'CONTACTCENTERAIPLATFORM': ('contactcenteraiplatform', 'v1alpha1'),
250
- 'CONTACTCENTERINSIGHTS': ('contactcenterinsights', 'v1'),
251
- 'CONTAINER': ('container', 'v1'),
252
- 'CONTAINERANALYSIS': ('containeranalysis', 'v1'),
253
- 'CONTENT': ('content', 'v2.1'),
254
- 'CONTENTWAREHOUSE': ('contentwarehouse', 'v1'),
255
- 'CSS': ('css', 'v1'),
256
- 'CUSTOMSEARCH': ('customsearch', 'v1'),
257
- 'DATACATALOG': ('datacatalog', 'v1'),
258
- 'DATAFLOW': ('dataflow', 'v1b3'),
259
- 'DATAFORM': ('dataform', 'v1beta1'),
260
- 'DATAFUSION': ('datafusion', 'v1'),
261
- 'DATALABELING': ('datalabeling', 'v1beta1'),
262
- 'DATALINEAGE': ('datalineage', 'v1'),
263
- 'DATAMIGRATION': ('datamigration', 'v1'),
264
- 'DATAPIPELINES': ('datapipelines', 'v1'),
265
- 'DATAPLEX': ('dataplex', 'v1'),
266
- 'DATAPORTABILITY': ('dataportability', 'v1'),
267
- 'DATAPROC': ('dataproc', 'v1'),
268
- 'DATASTORE': ('datastore', 'v1'),
269
- 'DATASTREAM': ('datastream', 'v1'),
270
- 'DEPLOYMENTMANAGER': ('deploymentmanager', 'v2'),
271
- 'DEVELOPERCONNECT': ('developerconnect', 'v1'),
272
- 'DFAREPORTING': ('dfareporting', 'v4'),
273
- 'DIALOGFLOW': ('dialogflow', 'v3'),
274
- 'DIGITALASSETLINKS': ('digitalassetlinks', 'v1'),
275
- 'DISCOVERY': ('discovery', 'v1'),
276
- 'DISCOVERYENGINE': ('discoveryengine', 'v1'),
277
- 'DISPLAYVIDEO': ('displayvideo', 'v3'),
278
- 'DLP': ('dlp', 'v2'),
279
- 'DNS': ('dns', 'v1'),
280
- 'DOCS': ('docs', 'v1'),
281
- 'DOCUMENTAI': ('documentai', 'v1'),
282
- 'DOMAINS': ('domains', 'v1'),
283
- 'DOUBLECLICKBIDMANAGER': ('doubleclickbidmanager', 'v2'),
284
- 'DOUBLECLICKSEARCH': ('doubleclicksearch', 'v2'),
285
- 'DRIVE': ('drive', 'v3'),
286
- 'DRIVEACTIVITY': ('driveactivity', 'v2'),
287
- 'DRIVELABELS': ('drivelabels', 'v2'),
288
- 'ESSENTIALCONTACTS': ('essentialcontacts', 'v1'),
289
- 'EVENTARC': ('eventarc', 'v1'),
290
- 'FACTCHECKTOOLS': ('factchecktools', 'v1alpha1'),
291
- 'FCM': ('fcm', 'v1'),
292
- 'FCMDATA': ('fcmdata', 'v1beta1'),
293
- 'FILE': ('file', 'v1'),
294
- 'FIREBASE': ('firebase', 'v1beta1'),
295
- 'FIREBASEAPPCHECK': ('firebaseappcheck', 'v1'),
296
- 'FIREBASEAPPDISTRIBUTION': ('firebaseappdistribution', 'v1'),
297
- 'FIREBASEDATABASE': ('firebasedatabase', 'v1beta'),
298
- 'FIREBASEDATACONNECT': ('firebasedataconnect', 'v1beta'),
299
- 'FIREBASEDYNAMICLINKS': ('firebasedynamiclinks', 'v1'),
300
- 'FIREBASEHOSTING': ('firebasehosting', 'v1'),
301
- 'FIREBASEML': ('firebaseml', 'v1'),
302
- 'FIREBASERULES': ('firebaserules', 'v1'),
303
- 'FIREBASESTORAGE': ('firebasestorage', 'v1beta'),
304
- 'FIRESTORE': ('firestore', 'v1'),
305
- 'FITNESS': ('fitness', 'v1'),
306
- 'FORMS': ('forms', 'v1'),
307
- 'GAMES': ('games', 'v1'),
308
- 'GAMESCONFIGURATION': ('gamesConfiguration', 'v1configuration'),
309
- 'GAMESMANAGEMENT': ('gamesManagement', 'v1management'),
310
- 'GKEBACKUP': ('gkebackup', 'v1'),
311
- 'GKEHUB': ('gkehub', 'v2'),
312
- 'GKEONPREM': ('gkeonprem', 'v1'),
313
- 'GMAIL': ('gmail', 'v1'),
314
- 'GMAILPOSTMASTERTOOLS': ('gmailpostmastertools', 'v1'),
315
- 'GROUPSMIGRATION': ('groupsmigration', 'v1'),
316
- 'GROUPSSETTINGS': ('groupssettings', 'v1'),
317
- 'HEALTHCARE': ('healthcare', 'v1'),
318
- 'HOMEGRAPH': ('homegraph', 'v1'),
319
- 'IAM': ('iam', 'v2'),
320
- 'IAMCREDENTIALS': ('iamcredentials', 'v1'),
321
- 'IAP': ('iap', 'v1'),
322
- 'IDENTITYTOOLKIT': ('identitytoolkit', 'v3'),
323
- 'IDS': ('ids', 'v1'),
324
- 'INDEXING': ('indexing', 'v3'),
325
- 'INTEGRATIONS': ('integrations', 'v1'),
326
- 'JOBS': ('jobs', 'v4'),
327
- 'KEEP': ('keep', 'v1'),
328
- 'KGSEARCH': ('kgsearch', 'v1'),
329
- 'KMSINVENTORY': ('kmsinventory', 'v1'),
330
- 'LANGUAGE': ('language', 'v2'),
331
- 'LIBRARYAGENT': ('libraryagent', 'v1'),
332
- 'LICENSING': ('licensing', 'v1'),
333
- 'LIFESCIENCES': ('lifesciences', 'v2beta'),
334
- 'LOCALSERVICES': ('localservices', 'v1'),
335
- 'LOGGING': ('logging', 'v2'),
336
- 'LOOKER': ('looker', 'v1'),
337
- 'MANAGEDIDENTITIES': ('managedidentities', 'v1'),
338
- 'MANUFACTURERS': ('manufacturers', 'v1'),
339
- 'MARKETINGPLATFORMADMIN': ('marketingplatformadmin', 'v1alpha'),
340
- 'MEET': ('meet', 'v2'),
341
- 'MEMCACHE': ('memcache', 'v1'),
342
- 'MERCHANTAPI': ('merchantapi', 'reviews_v1beta'),
343
- 'METASTORE': ('metastore', 'v1'),
344
- 'MIGRATIONCENTER': ('migrationcenter', 'v1'),
345
- 'ML': ('ml', 'v1'),
346
- 'MONITORING': ('monitoring', 'v3'),
347
- 'MYBUSINESSACCOUNTMANAGEMENT': ('mybusinessaccountmanagement', 'v1'),
348
- 'MYBUSINESSBUSINESSINFORMATION': ('mybusinessbusinessinformation', 'v1'),
349
- 'MYBUSINESSLODGING': ('mybusinesslodging', 'v1'),
350
- 'MYBUSINESSNOTIFICATIONS': ('mybusinessnotifications', 'v1'),
351
- 'MYBUSINESSPLACEACTIONS': ('mybusinessplaceactions', 'v1'),
352
- 'MYBUSINESSQANDA': ('mybusinessqanda', 'v1'),
353
- 'MYBUSINESSVERIFICATIONS': ('mybusinessverifications', 'v1'),
354
- 'NETAPP': ('netapp', 'v1'),
355
- 'NETWORKCONNECTIVITY': ('networkconnectivity', 'v1'),
356
- 'NETWORKMANAGEMENT': ('networkmanagement', 'v1'),
357
- 'NETWORKSECURITY': ('networksecurity', 'v1'),
358
- 'NETWORKSERVICES': ('networkservices', 'v1'),
359
- 'NOTEBOOKS': ('notebooks', 'v2'),
360
- 'OAUTH2': ('oauth2', 'v2'),
361
- 'ONDEMANDSCANNING': ('ondemandscanning', 'v1'),
362
- 'ORACLEDATABASE': ('oracledatabase', 'v1'),
363
- 'ORGPOLICY': ('orgpolicy', 'v2'),
364
- 'OSCONFIG': ('osconfig', 'v1'),
365
- 'OSLOGIN': ('oslogin', 'v1'),
366
- 'PAGESPEEDONLINE': ('pagespeedonline', 'v5'),
367
- 'PAYMENTSRESELLERSUBSCRIPTION': ('paymentsresellersubscription', 'v1'),
368
- 'PEOPLE': ('people', 'v1'),
369
- 'PLACES': ('places', 'v1'),
370
- 'PLAYCUSTOMAPP': ('playcustomapp', 'v1'),
371
- 'PLAYDEVELOPERREPORTING': ('playdeveloperreporting', 'v1beta1'),
372
- 'PLAYGROUPING': ('playgrouping', 'v1alpha1'),
373
- 'PLAYINTEGRITY': ('playintegrity', 'v1'),
374
- 'POLICYANALYZER': ('policyanalyzer', 'v1'),
375
- 'POLICYSIMULATOR': ('policysimulator', 'v1'),
376
- 'POLICYTROUBLESHOOTER': ('policytroubleshooter', 'v1'),
377
- 'POLLEN': ('pollen', 'v1'),
378
- 'POLY': ('poly', 'v1'),
379
- 'PRIVATECA': ('privateca', 'v1'),
380
- 'PROD_TT_SASPORTAL': ('prod_tt_sasportal', 'v1alpha1'),
381
- 'PUBLICCA': ('publicca', 'v1'),
382
- 'PUBSUB': ('pubsub', 'v1'),
383
- 'PUBSUBLITE': ('pubsublite', 'v1'),
384
- 'RAPIDMIGRATIONASSESSMENT': ('rapidmigrationassessment', 'v1'),
385
- 'READERREVENUESUBSCRIPTIONLINKING': ('readerrevenuesubscriptionlinking', 'v1'),
386
- 'REALTIMEBIDDING': ('realtimebidding', 'v1'),
387
- 'RECAPTCHAENTERPRISE': ('recaptchaenterprise', 'v1'),
388
- 'RECOMMENDATIONENGINE': ('recommendationengine', 'v1beta1'),
389
- 'RECOMMENDER': ('recommender', 'v1'),
390
- 'REDIS': ('redis', 'v1'),
391
- 'RESELLER': ('reseller', 'v1'),
392
- 'RESOURCESETTINGS': ('resourcesettings', 'v1'),
393
- 'RETAIL': ('retail', 'v2'),
394
- 'RUN': ('run', 'v2'),
395
- 'RUNTIMECONFIG': ('runtimeconfig', 'v1'),
396
- 'SAFEBROWSING': ('safebrowsing', 'v5'),
397
- 'SASPORTAL': ('sasportal', 'v1alpha1'),
398
- 'SCRIPT': ('script', 'v1'),
399
- 'SEARCHADS360': ('searchads360', 'v0'),
400
- 'SEARCHCONSOLE': ('searchconsole', 'v1'),
401
- 'SECRETMANAGER': ('secretmanager', 'v1'),
402
- 'SECURITYCENTER': ('securitycenter', 'v1'),
403
- 'SERVICECONSUMERMANAGEMENT': ('serviceconsumermanagement', 'v1'),
404
- 'SERVICECONTROL': ('servicecontrol', 'v2'),
405
- 'SERVICEDIRECTORY': ('servicedirectory', 'v1'),
406
- 'SERVICEMANAGEMENT': ('servicemanagement', 'v1'),
407
- 'SERVICENETWORKING': ('servicenetworking', 'v1'),
408
- 'SERVICEUSAGE': ('serviceusage', 'v1'),
409
- 'SHEETS': ('sheets', 'v4'),
410
- 'SITEVERIFICATION': ('siteVerification', 'v1'),
411
- 'SLIDES': ('slides', 'v1'),
412
- 'SMARTDEVICEMANAGEMENT': ('smartdevicemanagement', 'v1'),
413
- 'SOLAR': ('solar', 'v1'),
414
- 'SPANNER': ('spanner', 'v1'),
415
- 'SPEECH': ('speech', 'v1'),
416
- 'SQLADMIN': ('sqladmin', 'v1'),
417
- 'STORAGE': ('storage', 'v1'),
418
- 'STORAGETRANSFER': ('storagetransfer', 'v1'),
419
- 'STREETVIEWPUBLISH': ('streetviewpublish', 'v1'),
420
- 'STS': ('sts', 'v1'),
421
- 'TAGMANAGER': ('tagmanager', 'v2'),
422
- 'TASKS': ('tasks', 'v1'),
423
- 'TESTING': ('testing', 'v1'),
424
- 'TEXTTOSPEECH': ('texttospeech', 'v1'),
425
- 'TOOLRESULTS': ('toolresults', 'v1beta3'),
426
- 'TPU': ('tpu', 'v2'),
427
- 'TRAFFICDIRECTOR': ('trafficdirector', 'v3'),
428
- 'TRANSCODER': ('transcoder', 'v1'),
429
- 'TRANSLATE': ('translate', 'v3'),
430
- 'TRAVELIMPACTMODEL': ('travelimpactmodel', 'v1'),
431
- 'VAULT': ('vault', 'v1'),
432
- 'VERIFIEDACCESS': ('verifiedaccess', 'v2'),
433
- 'VERSIONHISTORY': ('versionhistory', 'v1'),
434
- 'VIDEOINTELLIGENCE': ('videointelligence', 'v1'),
435
- 'VISION': ('vision', 'v1'),
436
- 'VMMIGRATION': ('vmmigration', 'v1'),
437
- 'VMWAREENGINE': ('vmwareengine', 'v1'),
438
- 'VPCACCESS': ('vpcaccess', 'v1'),
439
- 'WALLETOBJECTS': ('walletobjects', 'v1'),
440
- 'WEBFONTS': ('webfonts', 'v1'),
441
- 'WEBRISK': ('webrisk', 'v1'),
442
- 'WEBSECURITYSCANNER': ('websecurityscanner', 'v1'),
443
- 'WORKFLOWEXECUTIONS': ('workflowexecutions', 'v1'),
444
- 'WORKFLOWS': ('workflows', 'v1'),
445
- 'WORKLOADMANAGER': ('workloadmanager', 'v1'),
446
- 'WORKSPACEEVENTS': ('workspaceevents', 'v1'),
447
- 'WORKSTATIONS': ('workstations', 'v1'),
448
- 'YOUTUBE': ('youtube', 'v3'),
449
- 'YOUTUBEANALYTICS': ('youtubeAnalytics', 'v2'),
450
- 'YOUTUBEREPORTING': ('youtubereporting', 'v1')})
451
-
452
-
453
- Service = S('Service', list(SERVICE_DEFINITIONS.keys()))