gam7 7.3.4__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.

Potentially problematic release.


This version of gam7 might be problematic. Click here for more details.

Files changed (72) hide show
  1. gam/__init__.py +77555 -0
  2. gam/__main__.py +40 -0
  3. gam/atom/__init__.py +1460 -0
  4. gam/atom/auth.py +41 -0
  5. gam/atom/client.py +214 -0
  6. gam/atom/core.py +535 -0
  7. gam/atom/data.py +327 -0
  8. gam/atom/http.py +354 -0
  9. gam/atom/http_core.py +599 -0
  10. gam/atom/http_interface.py +144 -0
  11. gam/atom/mock_http.py +123 -0
  12. gam/atom/mock_http_core.py +313 -0
  13. gam/atom/mock_service.py +235 -0
  14. gam/atom/service.py +723 -0
  15. gam/atom/token_store.py +105 -0
  16. gam/atom/url.py +130 -0
  17. gam/cacerts.pem +1130 -0
  18. gam/cbcm-v1.1beta1.json +593 -0
  19. gam/contactdelegation-v1.json +249 -0
  20. gam/datastudio-v1.json +486 -0
  21. gam/gamlib/__init__.py +17 -0
  22. gam/gamlib/glaction.py +308 -0
  23. gam/gamlib/glapi.py +837 -0
  24. gam/gamlib/glcfg.py +616 -0
  25. gam/gamlib/glclargs.py +1184 -0
  26. gam/gamlib/glentity.py +831 -0
  27. gam/gamlib/glgapi.py +817 -0
  28. gam/gamlib/glgdata.py +98 -0
  29. gam/gamlib/glglobals.py +307 -0
  30. gam/gamlib/glindent.py +46 -0
  31. gam/gamlib/glmsgs.py +547 -0
  32. gam/gamlib/glskus.py +246 -0
  33. gam/gamlib/gluprop.py +279 -0
  34. gam/gamlib/glverlibs.py +33 -0
  35. gam/gamlib/yubikey.py +202 -0
  36. gam/gdata/__init__.py +825 -0
  37. gam/gdata/alt/__init__.py +20 -0
  38. gam/gdata/alt/app_engine.py +101 -0
  39. gam/gdata/alt/appengine.py +321 -0
  40. gam/gdata/apps/__init__.py +526 -0
  41. gam/gdata/apps/audit/__init__.py +1 -0
  42. gam/gdata/apps/audit/service.py +278 -0
  43. gam/gdata/apps/contacts/__init__.py +874 -0
  44. gam/gdata/apps/contacts/service.py +355 -0
  45. gam/gdata/apps/service.py +544 -0
  46. gam/gdata/apps/sites/__init__.py +283 -0
  47. gam/gdata/apps/sites/service.py +246 -0
  48. gam/gdata/service.py +1714 -0
  49. gam/gdata/urlfetch.py +247 -0
  50. gam/googleapiclient/__init__.py +27 -0
  51. gam/googleapiclient/_auth.py +167 -0
  52. gam/googleapiclient/_helpers.py +207 -0
  53. gam/googleapiclient/channel.py +315 -0
  54. gam/googleapiclient/discovery.py +1662 -0
  55. gam/googleapiclient/discovery_cache/__init__.py +78 -0
  56. gam/googleapiclient/discovery_cache/appengine_memcache.py +55 -0
  57. gam/googleapiclient/discovery_cache/base.py +46 -0
  58. gam/googleapiclient/discovery_cache/file_cache.py +145 -0
  59. gam/googleapiclient/errors.py +197 -0
  60. gam/googleapiclient/http.py +1962 -0
  61. gam/googleapiclient/mimeparse.py +183 -0
  62. gam/googleapiclient/model.py +429 -0
  63. gam/googleapiclient/schema.py +317 -0
  64. gam/googleapiclient/version.py +15 -0
  65. gam/iso8601/__init__.py +28 -0
  66. gam/iso8601/iso8601.py +160 -0
  67. gam/serviceaccountlookup-v1.json +141 -0
  68. gam/six.py +982 -0
  69. gam7-7.3.4.dist-info/METADATA +69 -0
  70. gam7-7.3.4.dist-info/RECORD +72 -0
  71. gam7-7.3.4.dist-info/WHEEL +4 -0
  72. gam7-7.3.4.dist-info/licenses/LICENSE +201 -0
gam/gamlib/glclargs.py ADDED
@@ -0,0 +1,1184 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ # Copyright (C) 2024 Ross Scroggs All Rights Reserved.
4
+ #
5
+ # All Rights Reserved.
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License"); you may
8
+ # not use this file except in compliance with the License. You may obtain
9
+ # a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
15
+ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
16
+ # License for the specific language governing permissions and limitations
17
+ # under the License.
18
+
19
+ """GAM command line argument processing
20
+
21
+ """
22
+
23
+ class GamCLArgs():
24
+
25
+ # GAM entity types as specified on the command line
26
+ ENTITY_BROWSER = 'ids'
27
+ ENTITY_BROWSER_OU = 'browserou'
28
+ ENTITY_BROWSER_OUS = 'browserous'
29
+ ENTITY_BROWSER_QUERIES = 'browserqueies'
30
+ ENTITY_BROWSER_QUERY = 'browserquery'
31
+ ENTITY_CIGROUP = 'cigroup'
32
+ ENTITY_CIGROUPS = 'cigroups'
33
+ ENTITY_CIGROUP_USERS = 'cigroup_users'
34
+ ENTITY_COURSEPARTICIPANTS = 'courseparticipants'
35
+ ENTITY_CROS = 'cros'
36
+ ENTITY_CROS_QUERIES = 'crosqueries'
37
+ ENTITY_CROS_QUERY = 'crosquery'
38
+ ENTITY_CROS_OU = 'cros_ou'
39
+ ENTITY_CROS_OU_AND_CHILDREN = 'cros_ou_and_children'
40
+ ENTITY_CROS_OUS = 'cros_ous'
41
+ ENTITY_CROS_OUS_AND_CHILDREN = 'cros_ous_and_children'
42
+ ENTITY_CROS_OU_QUERY = 'cros_ou_query'
43
+ ENTITY_CROS_OU_AND_CHILDREN_QUERY = 'cros_ou_and_children_query'
44
+ ENTITY_CROS_OUS_QUERY = 'cros_ous_query'
45
+ ENTITY_CROS_OUS_AND_CHILDREN_QUERY = 'cros_ous_and_children_query'
46
+ ENTITY_CROS_OU_QUERIES = 'cros_ou_queries'
47
+ ENTITY_CROS_OU_AND_CHILDREN_QUERIES = 'cros_ou_and_children_queries'
48
+ ENTITY_CROS_OUS_QUERIES = 'cros_ous_queries'
49
+ ENTITY_CROS_OUS_AND_CHILDREN_QUERIES = 'cros_ous_and_children_queries'
50
+ ENTITY_CROS_SN = 'cros_sn'
51
+ ENTITY_DOMAINS = 'domains'
52
+ ENTITY_DOMAINS_NS = 'domains_ns'
53
+ ENTITY_DOMAINS_SUSP = 'domains_susp'
54
+ ENTITY_GROUP = 'group'
55
+ ENTITY_GROUP_INDE = 'group_inde'
56
+ ENTITY_GROUP_NS = 'group_ns'
57
+ ENTITY_GROUP_SUSP = 'group_susp'
58
+ ENTITY_GROUPS = 'groups'
59
+ ENTITY_GROUPS_INDE = 'groups_inde'
60
+ ENTITY_GROUPS_NS = 'groups_ns'
61
+ ENTITY_GROUPS_SUSP = 'groups_susp'
62
+ ENTITY_GROUP_USERS = 'group_users'
63
+ ENTITY_GROUP_USERS_NS = 'group_users_ns'
64
+ ENTITY_GROUP_USERS_SUSP = 'group_users_susp'
65
+ ENTITY_GROUP_USERS_SELECT = 'group_users_select'
66
+ ENTITY_LICENSES = 'licenses'
67
+ ENTITY_OAUTHUSER = 'oauthuser'
68
+ ENTITY_OU = 'ou'
69
+ ENTITY_OU_NS = 'ou_ns'
70
+ ENTITY_OU_SUSP = 'ou_susp'
71
+ ENTITY_OU_AND_CHILDREN = 'ou_and_children'
72
+ ENTITY_OU_AND_CHILDREN_NS = 'ou_and_children_ns'
73
+ ENTITY_OU_AND_CHILDREN_SUSP = 'ou_and_children_susp'
74
+ ENTITY_OUS = 'ous'
75
+ ENTITY_OUS_NS = 'ous_ns'
76
+ ENTITY_OUS_SUSP = 'ous_susp'
77
+ ENTITY_OUS_AND_CHILDREN = 'ous_and_children'
78
+ ENTITY_OUS_AND_CHILDREN_NS = 'ous_and_children_ns'
79
+ ENTITY_OUS_AND_CHILDREN_SUSP = 'ous_and_children_susp'
80
+ ENTITY_QUERIES = 'queries'
81
+ ENTITY_QUERY = 'query'
82
+ ENTITY_STUDENTS = 'students'
83
+ ENTITY_TEACHERS = 'teachers'
84
+ ENTITY_USER = 'user'
85
+ ENTITY_USERS = 'users'
86
+ ENTITY_USERS_NS = 'users_ns'
87
+ ENTITY_USERS_NS_SUSP = 'users_ns_susp'
88
+ ENTITY_USERS_SUSP = 'users_susp'
89
+ #
90
+ BROWSER_ENTITIES = [
91
+ ENTITY_BROWSER,
92
+ ENTITY_BROWSER_QUERIES,
93
+ ENTITY_BROWSER_QUERY,
94
+ ENTITY_BROWSER_OU,
95
+ ENTITY_BROWSER_OUS,
96
+ ]
97
+ CROS_ENTITIES = [
98
+ ENTITY_CROS,
99
+ ENTITY_CROS_QUERIES,
100
+ ENTITY_CROS_QUERY,
101
+ ENTITY_CROS_OU,
102
+ ENTITY_CROS_OU_AND_CHILDREN,
103
+ ENTITY_CROS_OUS,
104
+ ENTITY_CROS_OUS_AND_CHILDREN,
105
+ ENTITY_CROS_OU_QUERY,
106
+ ENTITY_CROS_OU_AND_CHILDREN_QUERY,
107
+ ENTITY_CROS_OUS_QUERY,
108
+ ENTITY_CROS_OUS_AND_CHILDREN_QUERY,
109
+ ENTITY_CROS_OU_QUERIES,
110
+ ENTITY_CROS_OU_AND_CHILDREN_QUERIES,
111
+ ENTITY_CROS_OUS_QUERIES,
112
+ ENTITY_CROS_OUS_AND_CHILDREN_QUERIES,
113
+ ENTITY_CROS_SN,
114
+ ]
115
+ USER_ENTITIES = [
116
+ ENTITY_CIGROUP,
117
+ ENTITY_CIGROUPS,
118
+ ENTITY_CIGROUP_USERS,
119
+ ENTITY_COURSEPARTICIPANTS,
120
+ ENTITY_DOMAINS,
121
+ ENTITY_DOMAINS_NS,
122
+ ENTITY_DOMAINS_SUSP,
123
+ ENTITY_GROUP,
124
+ ENTITY_GROUP_INDE,
125
+ ENTITY_GROUP_NS,
126
+ ENTITY_GROUP_SUSP,
127
+ ENTITY_GROUPS,
128
+ ENTITY_GROUPS_INDE,
129
+ ENTITY_GROUPS_NS,
130
+ ENTITY_GROUPS_SUSP,
131
+ ENTITY_GROUP_USERS,
132
+ ENTITY_GROUP_USERS_NS,
133
+ ENTITY_GROUP_USERS_SUSP,
134
+ ENTITY_GROUP_USERS_SELECT,
135
+ ENTITY_LICENSES,
136
+ ENTITY_OAUTHUSER,
137
+ ENTITY_OU,
138
+ ENTITY_OU_NS,
139
+ ENTITY_OU_SUSP,
140
+ ENTITY_OU_AND_CHILDREN,
141
+ ENTITY_OU_AND_CHILDREN_NS,
142
+ ENTITY_OU_AND_CHILDREN_SUSP,
143
+ ENTITY_OUS,
144
+ ENTITY_OUS_NS,
145
+ ENTITY_OUS_SUSP,
146
+ ENTITY_OUS_AND_CHILDREN,
147
+ ENTITY_OUS_AND_CHILDREN_NS,
148
+ ENTITY_OUS_AND_CHILDREN_SUSP,
149
+ ENTITY_QUERIES,
150
+ ENTITY_QUERY,
151
+ ENTITY_STUDENTS,
152
+ ENTITY_TEACHERS,
153
+ ENTITY_USER,
154
+ ENTITY_USERS,
155
+ ]
156
+ # Aliases for CL entity types
157
+ ENTITY_ALIAS_MAP = {
158
+ 'browsers': ENTITY_BROWSER,
159
+ 'browserorg': ENTITY_BROWSER_OU,
160
+ 'browserorgs': ENTITY_BROWSER_OUS,
161
+ 'crosorg': ENTITY_CROS_OU,
162
+ 'crosorg_and_child': ENTITY_CROS_OU_AND_CHILDREN,
163
+ 'crosorg_and_children': ENTITY_CROS_OU_AND_CHILDREN,
164
+ 'crosorgs': ENTITY_CROS_OUS,
165
+ 'crosorgs_and_child': ENTITY_CROS_OUS_AND_CHILDREN,
166
+ 'crosorgs_and_children': ENTITY_CROS_OUS_AND_CHILDREN,
167
+ 'crosou_and_child': ENTITY_CROS_OU_AND_CHILDREN,
168
+ 'crosou_and_childen': ENTITY_CROS_OU_AND_CHILDREN,
169
+ 'crosous_and_child': ENTITY_CROS_OUS_AND_CHILDREN,
170
+ 'crosous_and_children': ENTITY_CROS_OUS_AND_CHILDREN,
171
+ 'cros_org': ENTITY_CROS_OU,
172
+ 'cros_org_and_child': ENTITY_CROS_OU_AND_CHILDREN,
173
+ 'cros_org_and_children': ENTITY_CROS_OU_AND_CHILDREN,
174
+ 'cros_orgs': ENTITY_CROS_OUS,
175
+ 'cros_orgs_and_child': ENTITY_CROS_OUS_AND_CHILDREN,
176
+ 'cros_orgs_and_children': ENTITY_CROS_OUS_AND_CHILDREN,
177
+ 'cros_ou_and_child': ENTITY_CROS_OU_AND_CHILDREN,
178
+ 'cros_ou_and_childen': ENTITY_CROS_OU_AND_CHILDREN,
179
+ 'cros_ous_and_child': ENTITY_CROS_OUS_AND_CHILDREN,
180
+ 'cros_ous_and_children': ENTITY_CROS_OUS_AND_CHILDREN,
181
+ 'crosorg_query': ENTITY_CROS_OU_QUERY,
182
+ 'crosorg_and_child_query': ENTITY_CROS_OU_AND_CHILDREN_QUERY,
183
+ 'crosorg_and_children_query': ENTITY_CROS_OU_AND_CHILDREN_QUERY,
184
+ 'crosorgs_query': ENTITY_CROS_OUS_QUERY,
185
+ 'crosorgs_and_child_query': ENTITY_CROS_OUS_AND_CHILDREN_QUERY,
186
+ 'crosorgs_and_children_query': ENTITY_CROS_OUS_AND_CHILDREN_QUERY,
187
+ 'crosou_and_child_query': ENTITY_CROS_OU_AND_CHILDREN_QUERY,
188
+ 'crosou_and_childen_query': ENTITY_CROS_OU_AND_CHILDREN_QUERY,
189
+ 'crosous_and_child_query': ENTITY_CROS_OUS_AND_CHILDREN_QUERY,
190
+ 'crosous_and_children_query': ENTITY_CROS_OUS_AND_CHILDREN_QUERY,
191
+ 'cros_org_query': ENTITY_CROS_OU_QUERY,
192
+ 'cros_org_and_child_query': ENTITY_CROS_OU_AND_CHILDREN_QUERY,
193
+ 'cros_org_and_children_query': ENTITY_CROS_OU_AND_CHILDREN_QUERY,
194
+ 'cros_orgs_query': ENTITY_CROS_OUS_QUERY,
195
+ 'cros_orgs_and_child_query': ENTITY_CROS_OUS_AND_CHILDREN_QUERY,
196
+ 'cros_orgs_and_children_query': ENTITY_CROS_OUS_AND_CHILDREN_QUERY,
197
+ 'cros_ou_and_child_query': ENTITY_CROS_OU_AND_CHILDREN_QUERY,
198
+ 'cros_ou_and_childen_query': ENTITY_CROS_OU_AND_CHILDREN_QUERY,
199
+ 'cros_ous_and_child_query': ENTITY_CROS_OUS_AND_CHILDREN_QUERY,
200
+ 'cros_ous_and_children_query': ENTITY_CROS_OUS_AND_CHILDREN_QUERY,
201
+ 'crosorg_queries': ENTITY_CROS_OU_QUERIES,
202
+ 'crosorg_and_child_queries': ENTITY_CROS_OU_AND_CHILDREN_QUERIES,
203
+ 'crosorg_and_children_queries': ENTITY_CROS_OU_AND_CHILDREN_QUERIES,
204
+ 'crosorgs_queries': ENTITY_CROS_OUS_QUERIES,
205
+ 'crosorgs_and_child_queries': ENTITY_CROS_OUS_AND_CHILDREN_QUERIES,
206
+ 'crosorgs_and_children_queries': ENTITY_CROS_OUS_AND_CHILDREN_QUERIES,
207
+ 'crosou_and_child_queries': ENTITY_CROS_OU_AND_CHILDREN_QUERIES,
208
+ 'crosou_and_childen_queries': ENTITY_CROS_OU_AND_CHILDREN_QUERIES,
209
+ 'crosous_and_child_queries': ENTITY_CROS_OUS_AND_CHILDREN_QUERIES,
210
+ 'crosous_and_children_queries': ENTITY_CROS_OUS_AND_CHILDREN_QUERIES,
211
+ 'cros_org_queries': ENTITY_CROS_OU_QUERIES,
212
+ 'cros_org_and_child_queries': ENTITY_CROS_OU_AND_CHILDREN_QUERIES,
213
+ 'cros_org_and_children_queries': ENTITY_CROS_OU_AND_CHILDREN_QUERIES,
214
+ 'cros_orgs_queries': ENTITY_CROS_OUS_QUERIES,
215
+ 'cros_orgs_and_child_queries': ENTITY_CROS_OUS_AND_CHILDREN_QUERIES,
216
+ 'cros_orgs_and_children_queries': ENTITY_CROS_OUS_AND_CHILDREN_QUERIES,
217
+ 'cros_ou_and_child_queries': ENTITY_CROS_OU_AND_CHILDREN_QUERIES,
218
+ 'cros_ou_and_childen_queries': ENTITY_CROS_OU_AND_CHILDREN_QUERIES,
219
+ 'cros_ous_and_child_queries': ENTITY_CROS_OUS_AND_CHILDREN_QUERIES,
220
+ 'cros_ous_and_children_queries': ENTITY_CROS_OUS_AND_CHILDREN_QUERIES,
221
+ 'license': ENTITY_LICENSES,
222
+ 'licence': ENTITY_LICENSES,
223
+ 'licences': ENTITY_LICENSES,
224
+ 'org': ENTITY_OU,
225
+ 'org_ns': ENTITY_OU_NS,
226
+ 'org_susp': ENTITY_OU_SUSP,
227
+ 'org_and_child': ENTITY_OU_AND_CHILDREN,
228
+ 'org_and_child_ns': ENTITY_OU_AND_CHILDREN_NS,
229
+ 'org_and_child_susp': ENTITY_OU_AND_CHILDREN_SUSP,
230
+ 'org_and_children': ENTITY_OU_AND_CHILDREN,
231
+ 'org_and_children_ns': ENTITY_OU_AND_CHILDREN_NS,
232
+ 'org_and_children_susp': ENTITY_OU_AND_CHILDREN_SUSP,
233
+ 'orgs': ENTITY_OUS,
234
+ 'orgs_ns': ENTITY_OUS_NS,
235
+ 'orgs_susp': ENTITY_OUS_SUSP,
236
+ 'orgs_and_child': ENTITY_OUS_AND_CHILDREN,
237
+ 'orgs_and_child_ns': ENTITY_OUS_AND_CHILDREN_NS,
238
+ 'orgs_and_child_susp': ENTITY_OUS_AND_CHILDREN_SUSP,
239
+ 'orgs_and_children': ENTITY_OUS_AND_CHILDREN,
240
+ 'orgs_and_children_ns': ENTITY_OUS_AND_CHILDREN_NS,
241
+ 'orgs_and_children_susp': ENTITY_OUS_AND_CHILDREN_SUSP,
242
+ 'ou_and_child': ENTITY_OU_AND_CHILDREN,
243
+ 'ou_and_child_ns': ENTITY_OU_AND_CHILDREN_NS,
244
+ 'ou_and_child_susp': ENTITY_OU_AND_CHILDREN_SUSP,
245
+ 'ous_and_child': ENTITY_OUS_AND_CHILDREN,
246
+ 'ous_and_child_ns': ENTITY_OUS_AND_CHILDREN_NS,
247
+ 'ous_and_child_susp': ENTITY_OUS_AND_CHILDREN_SUSP,
248
+ }
249
+ # CL entity source selectors
250
+ ENTITY_SELECTOR_ALL = 'all'
251
+ ENTITY_SELECTOR_CSV = 'csv'
252
+ ENTITY_SELECTOR_CSVDATAFILE = 'csvdatafile'
253
+ ENTITY_SELECTOR_CSVFILE = 'csvfile'
254
+ ENTITY_SELECTOR_FILE = 'file'
255
+ ENTITY_SELECTOR_DATAFILE = 'datafile'
256
+ ENTITY_SELECTOR_CROSCSV = 'croscsv'
257
+ ENTITY_SELECTOR_CROSCSV_SN = 'croscsv_sn'
258
+ ENTITY_SELECTOR_CROSCSVFILE = 'croscsvfile'
259
+ ENTITY_SELECTOR_CROSCSVFILE_SN = 'croscsvfile_sn'
260
+ ENTITY_SELECTOR_CROSFILE = 'crosfile'
261
+ ENTITY_SELECTOR_CROSFILE_SN = 'crosfile_sn'
262
+ ENTITY_SELECTOR_CSVKMD = 'csvkmd'
263
+ ENTITY_SELECTOR_CSVSUBKEY = 'csvsubkey'
264
+ ENTITY_SELECTOR_CSVDATA = 'csvdata'
265
+ ENTITY_SELECTOR_CROSCSVDATA = 'croscsvdata'
266
+ #
267
+ SERVICE_ACCOUNT_ONLY_ENTITY_SELECTORS = [
268
+ ENTITY_SELECTOR_CSVDATAFILE,
269
+ ENTITY_SELECTOR_CSVKMD,
270
+ ENTITY_SELECTOR_CSVSUBKEY,
271
+ ENTITY_SELECTOR_DATAFILE,
272
+ ]
273
+ ENTITY_LIST_SELECTORS = [
274
+ ENTITY_SELECTOR_CSVKMD,
275
+ ENTITY_SELECTOR_CSVSUBKEY,
276
+ ENTITY_SELECTOR_CSV,
277
+ ENTITY_SELECTOR_CSVFILE,
278
+ ENTITY_SELECTOR_FILE,
279
+ ENTITY_SELECTOR_CSVDATA,
280
+ ]
281
+ BASE_ENTITY_SELECTORS = [
282
+ ENTITY_SELECTOR_ALL,
283
+ ENTITY_SELECTOR_CSVDATAFILE,
284
+ ENTITY_SELECTOR_CSVKMD,
285
+ ENTITY_SELECTOR_CSVSUBKEY,
286
+ ENTITY_SELECTOR_DATAFILE,
287
+ ]
288
+ BROWSER_ENTITY_SELECTORS = [
289
+ ENTITY_SELECTOR_CSV,
290
+ ENTITY_SELECTOR_CSVFILE,
291
+ ENTITY_SELECTOR_FILE,
292
+ ]
293
+ CROS_ENTITY_SELECTORS = [
294
+ ENTITY_SELECTOR_CROSCSV,
295
+ ENTITY_SELECTOR_CROSCSV_SN,
296
+ ENTITY_SELECTOR_CROSCSVFILE,
297
+ ENTITY_SELECTOR_CROSCSVFILE_SN,
298
+ ENTITY_SELECTOR_CROSFILE,
299
+ ENTITY_SELECTOR_CROSFILE_SN,
300
+ ]
301
+ USER_ENTITY_SELECTORS = [
302
+ ENTITY_SELECTOR_CSV,
303
+ ENTITY_SELECTOR_CSVFILE,
304
+ ENTITY_SELECTOR_FILE,
305
+ ]
306
+ CROS_CSVDATA_ENTITY_SELECTORS = [
307
+ ENTITY_SELECTOR_CROSCSVDATA,
308
+ ]
309
+ USER_CSVDATA_ENTITY_SELECTORS = [
310
+ ENTITY_SELECTOR_CSVDATA,
311
+ ]
312
+ # Allowed values for CL source selector all
313
+ CROS_ENTITY_SELECTOR_ALL_SUBTYPES = [
314
+ ENTITY_CROS,
315
+ ]
316
+ USER_ENTITY_SELECTOR_ALL_SUBTYPES = [
317
+ ENTITY_USERS,
318
+ ENTITY_USERS_NS,
319
+ ENTITY_USERS_NS_SUSP,
320
+ ENTITY_USERS_SUSP,
321
+ ]
322
+ #
323
+ ENTITY_ALL_CROS = ENTITY_SELECTOR_ALL+' '+ENTITY_CROS
324
+ ENTITY_ALL_USERS = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS
325
+ ENTITY_ALL_USERS_NS = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS_NS
326
+ ENTITY_ALL_USERS_NS_SUSP = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS_NS_SUSP
327
+ ENTITY_ALL_USERS_SUSP = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS_SUSP
328
+ #
329
+ ALL_USERS_QUERY_MAP = {
330
+ ENTITY_ALL_USERS: 'isSuspended=False',
331
+ ENTITY_ALL_USERS_NS: 'isSuspended=False',
332
+ ENTITY_ALL_USERS_NS_SUSP: None,
333
+ ENTITY_ALL_USERS_SUSP: 'isSuspended=True',
334
+ }
335
+ #
336
+ ENTITY_SELECTOR_ALL_SUBTYPES_MAP = {
337
+ ENTITY_CROS: ENTITY_ALL_CROS,
338
+ ENTITY_USERS: ENTITY_ALL_USERS,
339
+ ENTITY_USERS_NS: ENTITY_ALL_USERS_NS,
340
+ ENTITY_USERS_NS_SUSP: ENTITY_ALL_USERS_NS_SUSP,
341
+ ENTITY_USERS_SUSP: ENTITY_ALL_USERS_SUSP,
342
+ }
343
+ # Allowed values for CL source selector datafile, csvkmd
344
+ CROS_ENTITY_SELECTOR_DATAFILE_CSVKMD_SUBTYPES = [
345
+ ENTITY_CROS,
346
+ ENTITY_CROS_OUS,
347
+ ENTITY_CROS_OUS_AND_CHILDREN,
348
+ ENTITY_CROS_SN,
349
+ ]
350
+ USER_ENTITY_SELECTOR_DATAFILE_CSVKMD_SUBTYPES = [
351
+ ENTITY_USERS,
352
+ ENTITY_CIGROUPS,
353
+ ENTITY_CIGROUP_USERS,
354
+ ENTITY_DOMAINS,
355
+ ENTITY_DOMAINS_NS,
356
+ ENTITY_DOMAINS_SUSP,
357
+ ENTITY_GROUPS,
358
+ ENTITY_GROUPS_INDE,
359
+ ENTITY_GROUPS_NS,
360
+ ENTITY_GROUPS_SUSP,
361
+ ENTITY_GROUP_USERS,
362
+ ENTITY_GROUP_USERS_NS,
363
+ ENTITY_GROUP_USERS_SUSP,
364
+ ENTITY_GROUP_USERS_SELECT,
365
+ ENTITY_OUS,
366
+ ENTITY_OUS_NS,
367
+ ENTITY_OUS_SUSP,
368
+ ENTITY_OUS_AND_CHILDREN,
369
+ ENTITY_OUS_AND_CHILDREN_NS,
370
+ ENTITY_OUS_AND_CHILDREN_SUSP,
371
+ ENTITY_COURSEPARTICIPANTS,
372
+ ENTITY_STUDENTS,
373
+ ENTITY_TEACHERS,
374
+ ]
375
+ # Batch file commands
376
+ EXECUTE_CMD = 'execute'
377
+ GAM_CMD = 'gam'
378
+ COMMIT_BATCH_CMD = 'commit-batch'
379
+ PRINT_CMD = 'print'
380
+ SET_CMD = 'set'
381
+ CLEAR_CMD = 'clear'
382
+ SLEEP_CMD = 'sleep'
383
+ # Command line batch/csv/loop/tbatch keywords
384
+ BATCH_CMD = 'batch'
385
+ CSV_CMD = 'csv'
386
+ CSVTEST_CMD = 'csvtest'
387
+ LOOP_CMD = 'loop'
388
+ TBATCH_CMD = 'tbatch'
389
+ # Command line select/showsections/selectfilter/selectoutputfilter/selectinputfilter/config/redirect arguments
390
+ SELECT_CMD = 'select'
391
+ SHOWSECTIONS_CMD = 'showsections'
392
+ SELECTFILTER_CMD = 'selectfilter'
393
+ SELECTOUTPUTFILTER_CMD = 'selectoutputfilter'
394
+ SELECTINPUTFILTER_CMD = 'selectinputfilter'
395
+ CONFIG_CMD = 'config'
396
+ MULTIPROCESSEXIT_CMD = 'multiprocessexit'
397
+ REDIRECT_CMD = 'redirect'
398
+ GAM_META_COMMANDS = [SELECT_CMD, SHOWSECTIONS_CMD, SELECTFILTER_CMD, SELECTOUTPUTFILTER_CMD, SELECTINPUTFILTER_CMD,
399
+ CONFIG_CMD, MULTIPROCESSEXIT_CMD, REDIRECT_CMD]
400
+ # Command line arguments
401
+ ARG_3LO = '3lo'
402
+ ARG_ACL = 'acl'
403
+ ARG_ACLS = 'acls'
404
+ ARG_ADDRESSES = 'addresses'
405
+ ARG_ADMIN = 'admin'
406
+ ARG_ADMINS = 'admins'
407
+ ARG_ADMINROLE = 'adminrole'
408
+ ARG_ADMINROLES = 'adminroles'
409
+ ARG_ALERT = 'alert'
410
+ ARG_ALERTS = 'alerts'
411
+ ARG_ALERTFEEDBACK = 'alertfeedback'
412
+ ARG_ALERTFEEDBACKS = 'alertfeedbacks'
413
+ ARG_ALERTSFEEDBACK = 'alertsfeedback'
414
+ ARG_ALIAS = 'alias'
415
+ ARG_ALIASES = 'aliases'
416
+ ARG_ALIASDOMAIN = 'aliasdomain'
417
+ ARG_ALIASDOMAINS = 'aliasdomains'
418
+ ARG_ANALYTICACCOUNT = 'analyticaccount'
419
+ ARG_ANALYTICACCOUNTS = 'analyticaccounts'
420
+ ARG_ANALYTICACCOUNTSUMMARY = 'analyticaccountsummary'
421
+ ARG_ANALYTICACCOUNTSUMMARIES = 'analyticaccountsummaries'
422
+ ARG_ANALYTICDATASTREAM = 'analyticdatastream'
423
+ ARG_ANALYTICDATASTREAMS = 'analyticdatastreams'
424
+ ARG_ANALYTICPROPERTY = 'analyticproperty'
425
+ ARG_ANALYTICPROPERTIES = 'analyticproperties'
426
+ ARG_ANALYTICUAPROPERTY = 'analyticuaproperty'
427
+ ARG_ANALYTICUAPROPERTIES = 'analyticuaproperties'
428
+ ARG_API = 'api'
429
+ ARG_APIS = 'apis'
430
+ ARG_APIPROJECT = 'apiproject'
431
+ ARG_APPACCESSSETTINGS = 'appaccesssettings'
432
+ ARG_APPDETAILS = 'appdetails'
433
+ ARG_APPLICATIONSPECIFICPASSWORDS = 'applicationspecificpasswords'
434
+ ARG_ASP = 'asp'
435
+ ARG_ASPS = 'asps'
436
+ ARG_BACKUPCODE = 'backupcode'
437
+ ARG_BACKUPCODES = 'backupcodes'
438
+ ARG_BROWSER = 'browser'
439
+ ARG_BROWSERS = 'browsers'
440
+ ARG_BROWSERTOKEN = 'browsertoken'
441
+ ARG_BROWSERTOKENS = 'browsertokens'
442
+ ARG_BUCKET = 'bucket'
443
+ ARG_BUCKETS = 'buckets'
444
+ ARG_BUILDING = 'building'
445
+ ARG_BUILDINGS = 'buildings'
446
+ ARG_CAALEVEL = 'caalevel'
447
+ ARG_CAALEVELS = 'caalevels'
448
+ ARG_CALATTENDEES = 'calattendees'
449
+ ARG_CALENDAR = 'calendar'
450
+ ARG_CALENDARS = 'calendars'
451
+ ARG_CALENDARACL = 'calendaracl'
452
+ ARG_CALENDARACLS = 'calendaracls'
453
+ ARG_CALENDARTRASH = 'calendartrash'
454
+ ARG_CALSETTINGS = 'calsettings'
455
+ ARG_CHANNELCUSTOMER = 'channelcustomer'
456
+ ARG_CHANNELCUSTOMERS = 'channelcustomers'
457
+ ARG_CHANNELCUSTOMERENTITLEMENT = 'channelcustomerentitlement'
458
+ ARG_CHANNELCUSTOMERENTITLEMENTS = 'channelcustomerentitlements'
459
+ ARG_CHANNELOFFER = 'channeloffer'
460
+ ARG_CHANNELOFFERS = 'channeloffers'
461
+ ARG_CHANNELPRODUCT = 'channelproduct'
462
+ ARG_CHANNELPRODUCTS = 'channelproducts'
463
+ ARG_CHANNELSKU = 'channelsku'
464
+ ARG_CHANNELSKUS = 'channelskus'
465
+ ARG_CHAT = 'chat'
466
+ ARG_CHATEVENT = 'chatevent'
467
+ ARG_CHATEVENTS = 'chatevents'
468
+ ARG_CHATMEMBER = 'chatmember'
469
+ ARG_CHATMEMBERS = 'chatmembers'
470
+ ARG_CHATMESSAGE = 'chatmessage'
471
+ ARG_CHATMESSAGES = 'chatmessages'
472
+ ARG_CHATSPACE = 'chatspace'
473
+ ARG_CHATSPACES = 'chatspaces'
474
+ ARG_CHATSPACEDM = 'chatspacedm'
475
+ ARG_CHROMEAPP = 'chromeapp'
476
+ ARG_CHROMEAPPS = 'chromeapps'
477
+ ARG_CHROMEAPPDEVICES = 'chromeappdevices'
478
+ ARG_CHROMEAUES = 'chromeaues'
479
+ ARG_CHROMEHISTORY = 'chromehistory'
480
+ ARG_CHROMENEEDSATTN = 'chromeneedsattn'
481
+ ARG_CHROMENETWORK = 'chromenetwork'
482
+ ARG_CHROMENETWORKS = 'chromenetworks'
483
+ ARG_CHROMEPOLICYIMAGE = 'chromepolicyimage'
484
+ ARG_CHROMEPOLICY = 'chromepolicy'
485
+ ARG_CHROMEPOLICIES = 'chromepolicies'
486
+ ARG_CHROMEPROFILE = 'chromeprofile'
487
+ ARG_CHROMEPROFILES = 'chromeprofiles'
488
+ ARG_CHROMESCHEMA = 'chromeschema'
489
+ ARG_CHROMESCHEMAS = 'chromeschemas'
490
+ ARG_CHROMESNVALIDITY = 'chromesnvalidity'
491
+ ARG_CHROMEVERSIONS = 'chromeversions'
492
+ ARG_CIGROUP = 'cigroup'
493
+ ARG_CIGROUPS = 'cigroups'
494
+ ARG_CIGROUPMEMBERS = 'cigroupmembers'
495
+ ARG_CIGROUPSMEMBERS = 'cigroupsmembers'
496
+ ARG_CIMEMBER = 'cimember'
497
+ ARG_CIMEMBERS = 'cimembers'
498
+ ARG_CIPOLICY = 'policy'
499
+ ARG_CIPOLICIES = 'policies'
500
+ ARG_CLASSIFICATIONLABEL = 'classificationlabel'
501
+ ARG_CLASSIFICATIONLABELS = 'classificationlabels'
502
+ ARG_CLASSIFICATIONLABELPERMISSION = 'classificationlabelpermission'
503
+ ARG_CLASSIFICATIONLABELPERMISSIONS = 'classificationlabelpermissions'
504
+ ARG_CLASS = 'class'
505
+ ARG_CLASSES = 'classes'
506
+ ARG_CLASSPARTICIPANTS = 'classparticipants'
507
+ ARG_CLASSROOMINVITATION = 'classroominvitation'
508
+ ARG_CLASSROOMINVITATIONS = 'classroominvitations'
509
+ ARG_CLASSROOMOAUTH2 = 'classroomoauth2'
510
+ ARG_CLASSROOMPROFILE = 'classroomprofile'
511
+ ARG_CONTACT = 'contact'
512
+ ARG_CONTACTS = 'contacts'
513
+ ARG_CONTACTDELEGATE = 'contactdelegate'
514
+ ARG_CONTACTDELEGATES = 'contactdelegates'
515
+ ARG_CONTACTGROUP = 'contactgroup'
516
+ ARG_CONTACTGROUPS = 'contactgroups'
517
+ ARG_CONTACTPHOTO = 'contactphoto'
518
+ ARG_CONTACTPHOTOS = 'contactphotos'
519
+ ARG_COUNT = 'count'
520
+ ARG_COUNTS = 'counts'
521
+ ARG_COURSE = 'course'
522
+ ARG_COURSES = 'courses'
523
+ ARG_COURSEANNOUNCEMENTS = 'courseannouncements'
524
+ ARG_COURSEMATERIALS = 'coursematerials'
525
+ ARG_COURSEPARTICIPANTS = 'courseparticipants'
526
+ ARG_COURSESUBMISSIONS = 'coursesubmissions'
527
+ ARG_COURSETOPICS = 'coursetopics'
528
+ ARG_COURSEWORK = 'coursework'
529
+ ARG_CROS = 'cros'
530
+ ARG_CROSES = 'croses'
531
+ ARG_CROSACTIVITY = 'crosactivity'
532
+ ARG_CROSTELEMETRY = 'crostelemetry'
533
+ ARG_CSEIDENTITY = 'cseidentity'
534
+ ARG_CSEIDENTITIES = 'cseidentities'
535
+ ARG_CSEKEYPAIR = 'csekeypair'
536
+ ARG_CSEKEYPAIRS = 'csekeypairs'
537
+ ARG_CURRENTPROJECTID = 'currentprojectid'
538
+ ARG_CUSTOMER = 'customer'
539
+ ARG_DATASTUDIOASSET = 'datastudioasset'
540
+ ARG_DATASTUDIOASSETS = 'datastudioassets'
541
+ ARG_DATASTUDIOPERMISSION = 'datastudiopermission'
542
+ ARG_DATASTUDIOPERMISSIONS = 'datastudiopermissions'
543
+ ARG_LOOKERSTUDIOASSET = 'lookerstudioasset'
544
+ ARG_LOOKERSTUDIOASSETS = 'lookerstudioassets'
545
+ ARG_LOOKERSTUDIOPERMISSION = 'lookerstudiopermission'
546
+ ARG_LOOKERSTUDIOPERMISSIONS = 'lookerstudiopermissions'
547
+ ARG_DATATRANSFER = 'datatransfer'
548
+ ARG_DATATRANSFERS = 'datatransfers'
549
+ ARG_DELEGATE = 'delegate'
550
+ ARG_DELEGATES = 'delegates'
551
+ ARG_DEVICE = 'device'
552
+ ARG_DEVICES = 'devices'
553
+ ARG_DEVICEFILE = 'devicefile'
554
+ ARG_DEVICEFILES = 'devicefiles'
555
+ ARG_DEVICEUSER = 'deviceuser'
556
+ ARG_DEVICEUSERS = 'deviceusers'
557
+ ARG_DEVICEUSERSTATE = 'deviceuserstate'
558
+ ARG_DISKUSAGE = 'diskusage'
559
+ ARG_DOCUMENT = 'document'
560
+ ARG_DOMAIN = 'domain'
561
+ ARG_DOMAINS = 'domains'
562
+ ARG_DOMAINALIAS = 'domainalias'
563
+ ARG_DOMAINALIASES = 'domainaliases'
564
+ ARG_DOMAINCONTACT = 'domaincontact'
565
+ ARG_DOMAINCONTACTS = 'domaincontacts'
566
+ ARG_DOMAINCONTACTPHOTO = 'domaincontactphoto'
567
+ ARG_DOMAINCONTACTPHOTOS = 'domaincontactphotas'
568
+ ARG_DOMAINPROFILE = 'domainprofile'
569
+ ARG_DOMAINPROFILES = 'domainprofiles'
570
+ ARG_DRIVE = 'drive'
571
+ ARG_DRIVEACTIVITY = 'driveactivity'
572
+ ARG_DRIVEFILE = 'drivefile'
573
+ ARG_DRIVEFILEACL = 'drivefileacl'
574
+ ARG_DRIVEFILEACLS = 'drivefileacls'
575
+ ARG_DRIVEFILESHORTCUT = 'drivefileshortcut'
576
+ ARG_DRIVEFILESHORTCUTS = 'drivefileshortcuts'
577
+ ARG_DRIVEFOLDERPATH = 'drivefolderpath'
578
+ ARG_DRIVELABEL = 'drivelabel'
579
+ ARG_DRIVELABELS = 'drivelabels'
580
+ ARG_DRIVELABELPERMISSION = 'drivelabelpermission'
581
+ ARG_DRIVELABELPERMISSIONS = 'drivelabelpermissions'
582
+ ARG_DRIVESETTINGS = 'drivesettings'
583
+ ARG_DRIVETRASH = 'drivetrash'
584
+ ARG_EMPTYDRIVEFOLDERS = 'emptydrivefolders'
585
+ ARG_EVENT = 'event'
586
+ ARG_EVENTS = 'events'
587
+ ARG_EXPORT = 'export'
588
+ ARG_EXPORTS = 'exports'
589
+ ARG_FEATURE = 'feature'
590
+ ARG_FEATURES = 'features'
591
+ ARG_FILECOMMENT = 'filecomment'
592
+ ARG_FILECOMMENTS = 'filecomments'
593
+ ARG_FILECOUNT = 'filecount'
594
+ ARG_FILECOUNTS = 'filecounts'
595
+ ARG_FILEDRIVELABEL = 'filedrivelabel'
596
+ ARG_FILEDRIVELABELS = 'filedrivelabels'
597
+ ARG_FILEINFO = 'fileinfo'
598
+ ARG_FILELIST = 'filelist'
599
+ ARG_FILEPARENTTREE = 'fileparenttree'
600
+ ARG_FILEPATH = 'filepath'
601
+ ARG_FILEPATHS = 'filepaths'
602
+ ARG_FILEREVISION = 'filerevision'
603
+ ARG_FILEREVISIONS = 'filerevisions'
604
+ ARG_FILESHARECOUNT = 'filesharecount'
605
+ ARG_FILESHARECOUNTS = 'filesharecounts'
606
+ ARG_FILETREE = 'filetree'
607
+ ARG_FILTER = 'filter'
608
+ ARG_FILTERS = 'filters'
609
+ ARG_FOCUSTIME = 'focustime'
610
+ ARG_FOCUSTIMES = 'focustimes'
611
+ ARG_FORM = 'form'
612
+ ARG_FORMS = 'forms'
613
+ ARG_FORMRESPONSE = 'formresponse'
614
+ ARG_FORMRESPONSES = 'formresponses'
615
+ ARG_FORWARD = 'forward'
616
+ ARG_FORWARDS = 'forwards'
617
+ ARG_FORWARDINGADDRESS = 'forwardingaddress'
618
+ ARG_FORWARDINGADDRESSES = 'forwardingaddresses'
619
+ ARG_GAL = 'gal'
620
+ ARG_GCPFOLDER = 'gcpfolder'
621
+ ARG_GCPSERVICEACCOUNT = 'gcpserviceaccount'
622
+ ARG_GMAIL = 'gmail'
623
+ ARG_GMAILPROFILE = 'gmailprofile'
624
+ ARG_GROUP = 'group'
625
+ ARG_GROUPS = 'groups'
626
+ ARG_GROUPLIST = 'grouplist'
627
+ ARG_GROUPSLIST = 'groupslist'
628
+ ARG_GROUPMEMBERS = 'groupmembers'
629
+ ARG_GROUPSMEMBERS = 'groupsmembers'
630
+ ARG_GROUPTREE = 'grouptree'
631
+ ARG_GUARDIAN = 'guardian'
632
+ ARG_GUARDIANS = 'guardians'
633
+ ARG_GUARDIANINVITE = 'guardianinvite'
634
+ ARG_GUARDIANINVITATION = 'guardianinvitation'
635
+ ARG_GUARDIANINVITATIONS = 'guardianinvitations'
636
+ ARG_HOLD = 'hold'
637
+ ARG_HOLDS = 'holds'
638
+ ARG_IMAP = 'imap'
639
+ ARG_IMAP4 = 'imap4'
640
+ ARG_INBOUNDSSOASSIGNMENT = 'inboundssoassignment'
641
+ ARG_INBOUNDSSOASSIGNMENTS = 'inboundssoassignments'
642
+ ARG_INBOUNDSSOCREDENTIAL = 'inboundssocredential'
643
+ ARG_INBOUNDSSOCREDENTIALS = 'inboundssocredentials'
644
+ ARG_INBOUNDSSOPROFILE = 'inboundssoprofile'
645
+ ARG_INBOUNDSSOPROFILES = 'inboundssoprofiles'
646
+ ARG_INSTANCE = 'instance'
647
+ ARG_INVITEGUARDIAN = 'inviteguardian'
648
+ ARG_ISINVITABLE = 'isinvitable'
649
+ ARG_LABEL = 'label'
650
+ ARG_LABELS = 'labels'
651
+ ARG_LABELLIST = 'labellist'
652
+ ARG_LABELID = 'labelid'
653
+ ARG_LABELIDLIST = 'labelidlist'
654
+ ARG_LABELSETTINGS = 'labelsettings'
655
+ ARG_LANGUAGE = 'language'
656
+ ARG_LICENCE = 'licence'
657
+ ARG_LICENCES = 'licences'
658
+ ARG_LICENSE = 'license'
659
+ ARG_LICENSES = 'licenses'
660
+ ARG_MATTER = 'matter'
661
+ ARG_MATTERS = 'matters'
662
+ ARG_MEETSPACE = 'meetspace'
663
+ ARG_MEETSPACES = 'meetspaces'
664
+ ARG_MEETCONFERENCE = 'meetconference'
665
+ ARG_MEETCONFERENCES = 'meetconferences'
666
+ ARG_MEETPARTICIPANT = 'meetparticipant'
667
+ ARG_MEETPARTICIPANTS = 'meetparticipants'
668
+ ARG_MEETRECORDING = 'meetrecording'
669
+ ARG_MEETRECORDINGS = 'meetrecordings'
670
+ ARG_MEETTRANSCRIPT = 'meettranscript'
671
+ ARG_MEETTRANSCRIPTS = 'meettranscripts'
672
+ ARG_MEMBER = 'member'
673
+ ARG_MEMBERS = 'members'
674
+ ARG_MESSAGE = 'message'
675
+ ARG_MESSAGES = 'messages'
676
+ ARG_MESSAGEHISTORY = 'messagehistory'
677
+ ARG_MOBILE = 'mobile'
678
+ ARG_MOBILES = 'mobiles'
679
+ ARG_NICKNAME = 'nickname'
680
+ ARG_NICKNAMES = 'nicknames'
681
+ ARG_NOTE = 'note'
682
+ ARG_NOTES = 'notes'
683
+ ARG_NOTEACL = 'noteacl'
684
+ ARG_NOTEACLS = 'noteacls'
685
+ ARG_NOTESACL = 'notesacl'
686
+ ARG_NOTESACLS = 'notesacls'
687
+ ARG_NOTEATTACHMENT = 'noteattachment'
688
+ ARG_NOTEATTACHMENTS = 'noteattachments'
689
+ ARG_OAUTH = 'oauth'
690
+ ARG_ORG = 'org'
691
+ ARG_ORGS = 'orgs'
692
+ ARG_ORGTREE = 'orgtree'
693
+ ARG_ORGUNIT = 'orgunit'
694
+ ARG_ORGUNITS = 'orgunits'
695
+ ARG_ORGUNITSHAREDDRIVE = 'orgunitshareddrive'
696
+ ARG_ORGUNITSHAREDDRIVES = 'orgunitshareddrives'
697
+ ARG_ORPHANS = 'orphans'
698
+ ARG_OTHERCONTACT = 'othercontact'
699
+ ARG_OTHERCONTACTS = 'othercontacts'
700
+ ARG_OU = 'ou'
701
+ ARG_OUS = 'ous'
702
+ ARG_OUSHAREDDRIVE = 'oushareddrive'
703
+ ARG_OUSHAREDDRIVES = 'oushareddrives'
704
+ ARG_OUTOFOFFICE = 'outofoffice'
705
+ ARG_OUTOFOFFICES = 'outofoffices'
706
+ ARG_OUTREE = 'outree'
707
+ ARG_OWNERSHIP = 'ownership'
708
+ ARG_PARTICIPANTS = 'participants'
709
+ ARG_PEOPLE = 'people'
710
+ ARG_PEOPLECONTACT = 'peoplecontact'
711
+ ARG_PEOPLECONTACTS = 'peoplecontacts'
712
+ ARG_PEOPLECONTACTGROUP = 'peoplecontactgroup'
713
+ ARG_PEOPLECONTACTGROUPS = 'peoplecontactgroups'
714
+ ARG_PEOPLECONTACTPHOTO = 'peoplecontactphoto'
715
+ ARG_PEOPLECONTACTPHOTOS = 'peoplecontactphotos'
716
+ ARG_PEOPLEOTHERCONTACT = 'peopleothercontact'
717
+ ARG_PEOPLEOTHERCONTACTS = 'peopleothercontacts'
718
+ ARG_PEOPLEPROFILE = 'peopleprofile'
719
+ ARG_PEOPLEPROFILES = 'peopleprofiles'
720
+ ARG_PERMISSION = 'permission'
721
+ ARG_PERMISSIONS = 'permissions'
722
+ ARG_PHOTO = 'photo'
723
+ ARG_POP = 'pop'
724
+ ARG_POP3 = 'pop3'
725
+ ARG_PRINTER = 'printer'
726
+ ARG_PRINTERS = 'printers'
727
+ ARG_PRINTERMODEL = 'printermodel'
728
+ ARG_PRINTERMODELS = 'printermodels'
729
+ ARG_PRIVILEGES = 'privileges'
730
+ ARG_PROFILE = 'profile'
731
+ ARG_PROFILE_PHOTO = 'profilephoto'
732
+ ARG_PROJECT = 'project'
733
+ ARG_PROJECTS = 'projects'
734
+ ARG_RESELLERCUSTOMER = 'resellercustomer'
735
+ ARG_RESELLERCUSTOMERS = 'resellercustomers'
736
+ ARG_RESELLERSUBSCRIPTION = 'resellersubscription'
737
+ ARG_RESELLERSUBSCRIPTIONS = 'resellersubscriptions'
738
+ ARG_RESETPIV = 'resetpiv'
739
+ ARG_RESOLDCUSTOMER = 'resoldcustomer'
740
+ ARG_RESOLDCUSTOMERS = 'resoldcustomers'
741
+ ARG_RESOLDSUBSCRIPTION = 'resoldsubscription'
742
+ ARG_RESOLDSUBSCRIPTIONS = 'resoldsubscriptions'
743
+ ARG_RESOURCE = 'resource'
744
+ ARG_RESOURCES = 'resources'
745
+ ARG_ROLE = 'role'
746
+ ARG_ROLES = 'roles'
747
+ ARG_SAKEY = 'sakey'
748
+ ARG_SAKEYS = 'sakeys'
749
+ ARG_SCHEMA = 'schema'
750
+ ARG_SCHEMAS = 'schemas'
751
+ ARG_SECCALS = 'seccals'
752
+ ARG_SENDAS = 'sendas'
753
+ ARG_SERVICEACCOUNT = 'serviceaccount'
754
+ ARG_SETTINGS = 'settings'
755
+ ARG_SHAREDDRIVE = 'shareddrive'
756
+ ARG_SHAREDDRIVES = 'shareddrives'
757
+ ARG_SHAREDDRIVEACLS = 'shareddriveacls'
758
+ ARG_SHAREDDRIVEINFO = 'shareddriveinfo'
759
+ ARG_SHAREDDRIVETHEMES = 'shareddrivethemes'
760
+ ARG_SHEET = 'sheet'
761
+ ARG_SHEETS = 'sheets'
762
+ ARG_SHEETRANGE = 'sheetrange'
763
+ ARG_SHEETRANGES = 'sheetranges'
764
+ ARG_SIG = 'sig'
765
+ ARG_SIGNATURE = 'signature'
766
+ ARG_SIGNJWTSERVICEACCOUNT = 'signjwtserviceaccount'
767
+ ARG_SITE = 'site'
768
+ ARG_SITES = 'sites'
769
+ ARG_SITEACL = 'siteacl'
770
+ ARG_SITEACLS = 'siteacls'
771
+ ARG_SITEACTIVITY = 'siteactivity'
772
+ ARG_SMIME = 'smime'
773
+ ARG_SMIMES = 'smimes'
774
+ ARG_STORAGEBUCKET = 'storagebucket'
775
+ ARG_STORAGEBUCKETS = 'storagebuckets'
776
+ ARG_STORAGEFILE = 'storagefile'
777
+ ARG_STORAGEFILES = 'storagefiles'
778
+ ARG_SVCACCT = 'svcacct'
779
+ ARG_SVCACCTS = 'svcaccts'
780
+ ARG_TASK = 'task'
781
+ ARG_TASKS = 'tasks'
782
+ ARG_TASKLIST = 'tasklist'
783
+ ARG_TASKLISTS = 'tasklists'
784
+ ARG_TEAMDRIVE = 'teamdrive'
785
+ ARG_TEAMDRIVES = 'teamdrives'
786
+ ARG_TEAMDRIVEACLS = 'teamdriveacls'
787
+ ARG_TEAMDRIVEINFO = 'teamdriveinfo'
788
+ ARG_TEAMDRIVETHEMES = 'teamdrivethemes'
789
+ ARG_THREAD = 'thread'
790
+ ARG_THREADS = 'threads'
791
+ ARG_TOKEN = 'token'
792
+ ARG_TOKENS = 'tokens'
793
+ ARG_TRANSFER = 'transfer'
794
+ ARG_TRANSFERS = 'transfers'
795
+ ARG_TRANSFERAPPS = 'transferapps'
796
+ ARG_TRUSTEDAPPS = 'trustedapps'
797
+ ARG_USER = 'user'
798
+ ARG_USERS = 'users'
799
+ ARG_USERCOUNTSBYORGUNIT = 'usercountsbyorgunit'
800
+ ARG_USERINVITATION = 'userinvitation'
801
+ ARG_USERINVITATIONS = 'userinvitations'
802
+ ARG_USERLIST = 'userlist'
803
+ ARG_VACATION = 'vacation'
804
+ ARG_VAULTCOUNT = 'vaultcount'
805
+ ARG_VAULTCOUNTS = 'vaultcounts'
806
+ ARG_VAULTEXPORT = 'vaultexport'
807
+ ARG_VAULTEXPORTS = 'vaultexports'
808
+ ARG_VAULTHOLD = 'vaulthold'
809
+ ARG_VAULTHOLDS = 'vaultholds'
810
+ ARG_VAULTMATTER = 'vaultmatter'
811
+ ARG_VAULTMATTERS = 'vaultmatters'
812
+ ARG_VAULTQUERY = 'vaultquery'
813
+ ARG_VAULTQUERIES = 'vaultqueries'
814
+ ARG_VERIFICATION = 'verification'
815
+ ARG_VERIFICATIONCODES = 'verificationcodes'
816
+ ARG_VERIFY = 'verify'
817
+ ARG_WORKINGLOCATION = 'workinglocation'
818
+ ARG_WORKINGLOCATIONS = 'workinglocations'
819
+ ARG_YOUTUBECHANNEL = 'youtubechannel'
820
+ ARG_YOUTUBECHANNELS = 'youtubechannels'
821
+ # Lists of arguments for use in checkArgumentPresent
822
+ CLEAR_NONE_ARGUMENT = ['clear', 'none',]
823
+
824
+ # Object BNF names
825
+ OB_ACCESS_LEVEL_NAME = 'AccessLevelName'
826
+ OB_ACCESS_TOKEN = 'AccessToken'
827
+ OB_ACL_SCOPE = 'ACLScope'
828
+ OB_ACL_SCOPE_ENTITY = 'ACLScopeEntity'
829
+ OB_ALERT_ID = 'AlertID'
830
+ OB_ALIAS_ENTITY = 'AliasEntity'
831
+ OB_API_SCOPE_URL_LIST = 'APIScopeURLList'
832
+ OB_APP_ID = 'AppID'
833
+ OB_ARGUMENT = 'argument'
834
+ OB_ASP_ID_LIST = 'ASPIDList'
835
+ OB_ASSET_ID = 'AssetID'
836
+ OB_BROWSER_ENROLLEMNT_TOKEN_ID = 'BrowserEnrollmentTokenID'
837
+ OB_BROWSER_ENTITY = 'BrowserEntity'
838
+ OB_BUILDING_ID = 'BuildingID'
839
+ OB_CALENDAR_ENTITY = 'CalendarEntity'
840
+ OB_CALENDAR_ITEM = 'CalendarItem'
841
+ OB_CHANNEL_CUSTOMER_ID = 'ChannelCustomerID'
842
+ OB_CHARACTER = 'Character'
843
+ OB_CHAR_SET = 'CharacterSet'
844
+ OG_CHAT_ATTACHMENT = 'ChatAttachment'
845
+ OB_CHAT_EVENT = 'ChatEvent'
846
+ OB_CHAT_MEMBER = 'ChatMember'
847
+ OB_CHAT_MESSAGE = 'ChatMessage'
848
+ OB_CHAT_MESSAGE_ID = 'ChatMessageID'
849
+ OB_CHAT_SPACE = 'ChatSpace'
850
+ OB_CHAT_THREAD = 'ChatThread'
851
+ OB_CHROMEPROFILE_ID = 'ChromeProfileId'
852
+ OB_CHROME_VERSION = 'ChromeVersion'
853
+ OB_CIDR_NETMASK = 'CIDRnetmask'
854
+ OB_CIGROUP_ALIAS_LIST = "CIGroupAliasList"
855
+ OB_CIPOLICY_NAME_ENTITY = 'CIPolicyNameEntity'
856
+ OB_CLASSIFICATION_LABEL_ID = 'ClassificationLabelID'
857
+ OB_CLASSIFICATION_LABEL_NAME = 'ClassificationLabelName'
858
+ OB_CLASSIFICATION_LABEL_PERMISSION_NAME = 'ClassificationLabelPermissionName'
859
+ OB_CLASSIFICATION_LABEL_FIELD_ID = 'ClassificationLabelFieldID'
860
+ OB_CLASSIFICATION_LABEL_SELECTION_ID_LIST = 'ClassificationLabelSelectionIDList'
861
+ OB_CLASSROOM_INVITATION_ID_ENTITY = 'ClassroomInvitationIDEntity'
862
+ OB_CLIENT_ID = 'ClientID'
863
+ OB_COLLABORATOR_ITEM = 'CollaboratorItem'
864
+ OB_COLLABORATOR_ENTITY = 'CollaboratorEntity'
865
+ OB_COMMAND_ID = 'CommandID'
866
+ OB_CONTACT_EMAIL_TYPE = 'ContactEmailType'
867
+ OB_CONTACT_ENTITY = 'ContactEntity'
868
+ OB_CONTACT_GROUP_ENTITY = 'ContactGroupEntity'
869
+ OB_CONTACT_GROUP_ITEM = 'ContactGroupItem'
870
+ OB_COURSE_ALIAS = 'CourseAlias'
871
+ OB_COURSE_ALIAS_ENTITY = 'CourseAliasEntity'
872
+ OB_COURSE_ANNOUNCEMENT_ID_ENTITY = "CourseAnnouncementIDEntity"
873
+ OB_COURSE_ANNOUNCEMENT_STATE_LIST = "CourseAnnouncementStateList"
874
+ OB_COURSE_ENTITY = 'CourseEntity'
875
+ OB_COURSE_ID = 'CourseID'
876
+ OB_COURSE_MATERIAL_ID_ENTITY = 'CourseMaterialIDEntity'
877
+ OB_COURSE_MATERIAL_STATE_LIST = "CourseMaterialStateList"
878
+ OB_COURSE_STATE_LIST = "CourseStateList"
879
+ OB_COURSE_SUBMISSION_ID_ENTITY = "CourseSubmissionIDEntity"
880
+ OB_COURSE_SUBMISSION_STATE_LIST = "CourseSubmissionStateList"
881
+ OB_COURSE_TOPIC = 'CourseTopic'
882
+ OB_COURSE_TOPIC_ENTITY = "CourseTopicEntity"
883
+ OB_COURSE_TOPIC_ID = 'CourseTopicID'
884
+ OB_COURSE_TOPIC_ID_ENTITY = "CourseTopicIDEntity"
885
+ OB_COURSE_WORK_ID_ENTITY = 'CourseWorkIDEntity'
886
+ OB_COURSE_WORK_STATE_LIST = "CourseWorkStateList"
887
+ OB_CROS_DEVICE_ENTITY = 'CrOSDeviceEntity'
888
+ OB_CROS_ENTITY = 'CrOSEntity'
889
+ OB_CSE_KEYPAIR_ID = 'CSEKeyPairID'
890
+ OB_CUSTOMER_ID = 'CustomerID'
891
+ OB_CUSTOMER_AUTH_TOKEN = 'CustomerAuthToken'
892
+ OB_DEVICE_FILE_ENTITY = 'DeviceFileEntity'
893
+ OB_DEVICE_ENTITY = 'DeviceEntity'
894
+ OB_DEVICE_ID = 'DeviceID'
895
+ OB_DEVICE_ID_LIST = 'DeviceIDList'
896
+ OB_DEVICE_USER_ENTITY = 'DeviceUserEntity'
897
+ OB_DEVICE_USER_ID = 'DeviceUserID'
898
+ OB_DOMAIN_ALIAS = 'DomainAlias'
899
+ OB_DOMAIN_NAME = 'DomainName'
900
+ OB_DOMAIN_NAME_ENTITY = 'DomainNameEntity'
901
+ OB_DOMAIN_NAME_LIST = 'DomainNameList'
902
+ OB_DRIVE_FILE_ENTITY = 'DriveFileEntity'
903
+ OB_DRIVE_FILE_ID = 'DriveFileID'
904
+ OB_DRIVE_FILE_NAME = 'DriveFileName'
905
+ OB_DRIVE_FILE_PERMISSION_ENTITY = 'DriveFilePermissionEntity'
906
+ OB_DRIVE_FILE_PERMISSION_ID = 'DriveFilePermissionID'
907
+ OB_DRIVE_FILE_PERMISSION_ID_ENTITY = 'DriveFilePermissionIDEntity'
908
+ OB_DRIVE_FILE_REVISION_ID = 'DriveFileRevisionID'
909
+ OB_DRIVE_FOLDER_ID = 'DriveFolderID'
910
+ OB_DRIVE_FOLDER_ID_LIST = 'DriveFolderIDList'
911
+ OB_DRIVE_FOLDER_NAME = 'DriveFolderName'
912
+ OB_DRIVE_FOLDER_NAME_LIST = 'DriveFolderNameList'
913
+ OB_DRIVE_FOLDER_PATH = 'DriveFolderPath'
914
+ OB_EMAIL_ADDRESS = 'EmailAddress'
915
+ OB_EMAIL_ADDRESS_ENTITY = 'EmailAddressEntity'
916
+ OB_EMAIL_ADDRESS_LIST = 'EmailAddressList'
917
+ OB_EMAIL_ADDRESS_OR_UID = 'EmailAaddress|UniqueID'
918
+ OB_EMAIL_REPLACEMENT = 'EmailReplacement'
919
+ OB_ENTITY = 'Entity'
920
+ OB_ENTITY_TYPE = 'EntityType'
921
+ OB_EVENT_ID = 'EventID'
922
+ OB_EVENT_ID_ENTITY = 'EventIDEntity'
923
+ OB_EVENT_NAME_LIST = "EventNameList"
924
+ OB_EXPORT_ITEM = 'ExportItem'
925
+ OB_FIELD_NAME = 'FieldName'
926
+ OB_FIELD_NAME_LIST = "FieldNameList"
927
+ OB_FILE_NAME = 'FileName'
928
+ OB_FILE_NAME_FIELD_NAME = OB_FILE_NAME+'(:'+OB_FIELD_NAME+')+'
929
+ OB_FILE_NAME_OR_URL = 'FileName|URL'
930
+ OB_FILE_PATH = 'FilePath'
931
+ OB_FILTER_ID_ENTITY = 'FilterIDEntity'
932
+ OB_FORMAT_LIST = 'FormatList'
933
+ OB_GAM_ARGUMENT_LIST = 'GAM argument list'
934
+ OB_GROUP_ENTITY = 'GroupEntity'
935
+ OB_GROUP_ITEM = 'GroupItem'
936
+ OB_GROUP_ROLE_LIST = 'GroupRoleList'
937
+ OB_GROUP_TYPE_LIST = 'GroupTypeList'
938
+ OB_GUARDIAN_INVITATION_ID = 'GuardianInvitationID'
939
+ OB_GUARDIAN_INVITATION_ID_ENTITY = 'GuardianInvitationIDEntity'
940
+ OB_GUARDIAN_ENTITY = 'GuardianEntity'
941
+ OB_GUARDIAN_ITEM = 'GuardianItem'
942
+ OB_GUARDIAN_STATE_LIST = 'GuardianStateList'
943
+ OB_HOLD_ITEM = 'HoldItem'
944
+ OB_HOST_NAME = 'HostName'
945
+ OB_ICALUID = 'iCalUID'
946
+ OB_ID_TOKEN = 'IDToken'
947
+ OB_JOB_ID = 'JobID'
948
+ OB_JSON_DATA = 'JSONData'
949
+ OB_LABEL_COLOR_HEX = 'LabelColorHex'
950
+ OB_LABEL_ID = 'LabelID'
951
+ OB_LABEL_ID_LIST = 'LabelIDLIst'
952
+ OB_LABEL_NAME = 'LabelName'
953
+ OB_LABEL_NAME_LIST = 'LabelNameList'
954
+ OB_LABEL_REPLACEMENT = 'LabelReplacement'
955
+ OB_LANGUAGE_LIST = 'LanguageList'
956
+ OB_LOOKERSTUDIO_PERMISSION_ENTITY = 'LookerStudioPermissionEntity'
957
+ OB_MATTER_ITEM = 'MatterItem'
958
+ OB_MATTER_ITEM_LIST = 'MatterItemList'
959
+ OB_MEET_CONFERENCE_NAME = 'MeetConferenceName'
960
+ OB_MESSAGE_ID = 'MessageID'
961
+ OB_MIMETYPE = 'MimeType'
962
+ OB_MIMETYPE_LIST = 'MimeTypeList'
963
+ OB_MOBILE_DEVICE_ENTITY = 'MobileDeviceEntity'
964
+ OB_MOBILE_ENTITY = 'MobileEntity'
965
+ OB_NETWORK_ID = 'networkID'
966
+ OB_NAME = 'Name'
967
+ OB_ORGUNIT_ENTITY = 'OrgUnitEntity'
968
+ OB_ORGUNIT_ITEM = 'OrgUnitItem'
969
+ OB_ORGUNIT_PATH = 'OrgUnitPath'
970
+ OB_PARAMETER_VALUE = 'ParameterValue'
971
+ OB_PASSWORD = 'Password'
972
+ OB_PERMISSION_ID_LIST = 'PermissionIDList'
973
+ OB_PERMISSION_ROLE_LIST = 'PermissionRoleList'
974
+ OB_PERMISSION_TYPE_LIST = 'PermissionTypeList'
975
+ OB_PHOTO_FILENAME_PATTERN = 'FilenameNamePattern'
976
+ OB_PRINTER_ID = 'PrinterID'
977
+ OB_PRIVILEGE_LIST = 'PrivilegeList'
978
+ OB_PRODUCT_ID = 'ProductID'
979
+ OB_PRODUCT_ID_LIST = 'ProductIDList'
980
+ OB_PROJECT_ID = 'ProjectID'
981
+ OB_PROJECT_ID_ENTITY = 'ProjectIDEntity'
982
+ OB_PROPERTY_KEY = 'PropertyKey'
983
+ OB_PROPERTY_VALUE = 'PropertyValue'
984
+ OB_QUERY = 'Query'
985
+ OB_QUERY_ITEM = 'QueryItem'
986
+ OB_QUERY_LIST = 'QueryList'
987
+ OB_RECURRENCE = 'RRULE EXRULE RDATE and EXDATE lines'
988
+ OB_REQUEST_ID = 'RequestID'
989
+ OB_RESELLER_ID = 'ResellerID'
990
+ OB_RESOURCE_ENTITY = 'ResourceEntity'
991
+ OB_RESOURCE_ID = 'ResourceID'
992
+ OB_RE_PATTERN = 'REPattern'
993
+ OB_ROLE_ASSIGNMENT_ID = 'RoleAssignmentID'
994
+ OB_ROLE_ITEM = 'RoleItem'
995
+ OB_ROLE_LIST = 'RoleList'
996
+ OB_ROOM_LIST = 'RoomList'
997
+ OB_SCHEMA_ENTITY = 'SchemaEntity'
998
+ OB_SCHEMA_NAME = 'SchemaName'
999
+ OB_SCHEMA_NAME_FIELD_NAME = 'SchemaName.FieldName'
1000
+ OB_SCHEMA_NAME_LIST = 'SchemaNameList'
1001
+ OB_SECTION_NAME = 'SectionName'
1002
+ OB_SERIAL_NUMBER = 'SerialNumber'
1003
+ OB_SERIAL_NUMBER_LIST = 'SerialNumberList'
1004
+ OB_SERVICE_NAME_LIST = 'ServiceNameList'
1005
+ OB_SERVICE_ACCOUNT_KEY_LIST = 'ServiceAccountKeyList'
1006
+ OB_SHAREDDRIVE_ID = 'SharedDriveID'
1007
+ OB_SHAREDDRIVE_ID_LIST = 'SharedDriveIDList'
1008
+ OB_SHAREDDRIVE_NAME = 'SharedDriveName'
1009
+ OB_SHEET_ENTITY = 'SheetEntity'
1010
+ OB_SITE_ENTITY = 'SiteEntity'
1011
+ OB_SKU_ID = 'SKUID'
1012
+ OB_SKU_ID_LIST = 'SKUIDList'
1013
+ OB_SMIME_ID = 'S/MIMEID'
1014
+ OB_SMTP_HOST_NAME = 'SMTPHostName'
1015
+ OB_SPREADSHEET_JSON_CREATEREQUEST = 'SpreadsheetJSONCreateRequest'
1016
+ OB_SPREADSHEET_JSON_RANGEVALUESLIST = 'SpreadsheetJSONRangeValuesList'
1017
+ OB_SPREADSHEET_JSON_UPDATEREQUEST = 'SpreadsheetJSONUpdateRequest'
1018
+ OB_SPREADSHEET_JSON_VALUES = 'SpreadsheetJSONValues'
1019
+ OB_SPREADSHEET_RANGE = 'SpreadsheetRange'
1020
+ OB_SPREADSHEET_RANGE_LIST = 'SpreadsheetRangeList'
1021
+ OB_STATE_NAME_LIST = "StateNameList"
1022
+ OB_STRING = 'String'
1023
+ OB_STRING_LIST = 'StringList'
1024
+ OB_STUDENT_ITEM = 'StudentItem'
1025
+ OB_TAG = 'Tag'
1026
+ OB_TASK_ID = 'TaskID'
1027
+ OB_TASKLIST_ID = 'TaskListID'
1028
+ OB_TASKLIST_ID_ENTITY = 'TaskListIDEntity'
1029
+ OB_TASKLIST_ID_TASK_ID = 'TaskListIDTaskID'
1030
+ OB_TASKLIST_ID_TASK_ID_ENTITY = 'TaskListIDTaskIDEntity'
1031
+ OB_THREAD_ID = 'ThreadID'
1032
+ OB_TIME_LIST = 'TimeList'
1033
+ OB_TRANSFER_ID = 'TransferID'
1034
+ OB_URI = 'URI'
1035
+ OB_URL = 'URL'
1036
+ OB_URL_LIST = 'URLList'
1037
+ OB_USER_ENTITY = 'UserEntity'
1038
+ OB_USER_ITEM = 'UserItem'
1039
+ OB_USER_NAME = 'UserName'
1040
+ OB_YOUTUBE_CHANNEL_ID_LIST = 'YouTubeChannelIDlist'
1041
+
1042
+ #
1043
+ # Error message types; keys into ARGUMENT_ERROR_NAMES; arbitrary values but must be unique
1044
+ ARGUMENT_BLANK = 'blnk'
1045
+ ARGUMENT_DEPRECATED = 'depr'
1046
+ ARGUMENT_EMPTY = 'empt'
1047
+ ARGUMENT_EXTRANEOUS = 'extr'
1048
+ ARGUMENT_INVALID = 'inva'
1049
+ ARGUMENT_INVALID_CHOICE = 'invc'
1050
+ ARGUMENT_MISSING = 'miss'
1051
+ # ARGUMENT_ERROR_NAMES[0] is plural,ARGUMENT_ERROR_NAMES[1] is singular
1052
+ # These values can be translated into other languages
1053
+ ARGUMENT_ERROR_NAMES = {
1054
+ ARGUMENT_BLANK: ['Blank arguments', 'Blank argument'],
1055
+ ARGUMENT_DEPRECATED: ['Deprecated arguments', 'Deprecated argument'],
1056
+ ARGUMENT_EMPTY: ['Empty arguments', 'Empty argument'],
1057
+ ARGUMENT_EXTRANEOUS: ['Extra arguments', 'Extra argument'],
1058
+ ARGUMENT_INVALID: ['Invalid arguments', 'Invalid argument'],
1059
+ ARGUMENT_INVALID_CHOICE: ['Invalid choices', 'Invalid choice ({0})'],
1060
+ ARGUMENT_MISSING: ['Missing arguments', 'Missing argument'],
1061
+ }
1062
+
1063
+ def __init__(self):
1064
+ self.argv = []
1065
+ self.argvI = 0
1066
+ self.argvLen = 0
1067
+ self.argvIsave = 0
1068
+ self.origArgv = []
1069
+ self.origArgvI = 0
1070
+ self.origArgvLen = 0
1071
+ self.encoding = 'utf-8'
1072
+
1073
+ # Initialize arguments
1074
+ def InitializeArguments(self, args):
1075
+ self.argv = args[:]
1076
+ self.argvI = 1
1077
+ self.argvLen = len(self.argv)
1078
+
1079
+ # Number of arguments remaining
1080
+ def NumArgumentsRemaining(self):
1081
+ return self.argvLen - self.argvI
1082
+
1083
+ # Any arguments remaining
1084
+ def ArgumentsRemaining(self):
1085
+ return self.argvI < self.argvLen
1086
+
1087
+ # Multiple arguments remaining
1088
+ def MultipleArgumentsRemaining(self):
1089
+ return not self.argvI+1 == self.argvLen
1090
+
1091
+ # All arguments
1092
+ def AllArguments(self):
1093
+ return self.argv
1094
+
1095
+ # Specific argument
1096
+ def Argument(self, index):
1097
+ return self.argv[index]
1098
+
1099
+ # Current argument
1100
+ def Current(self):
1101
+ return self.argv[self.argvI]
1102
+
1103
+ # Previous argument
1104
+ def Previous(self):
1105
+ return self.argv[self.argvI-1]
1106
+
1107
+ # Remaining arguments
1108
+ def Remaining(self):
1109
+ return self.argv[self.argvI:]
1110
+
1111
+ # Argument location
1112
+ def Location(self):
1113
+ return self.argvI
1114
+
1115
+ # Advance to next argument
1116
+ def Advance(self):
1117
+ self.argvI += 1
1118
+
1119
+ # Backup to previous argument
1120
+ def Backup(self):
1121
+ self.argvI -= 1
1122
+
1123
+ # Save argument location
1124
+ def SaveLocation(self):
1125
+ self.argvIsave = self.argvI
1126
+
1127
+ # Reset argument location
1128
+ def ResetLocation(self, offset):
1129
+ self.argvI = self.argvIsave+offset
1130
+
1131
+ # Set argument location
1132
+ def SetLocation(self, location):
1133
+ self.argvI = location
1134
+
1135
+ # Set encoding
1136
+ def SetEncoding(self, encoding):
1137
+ self.encoding = encoding
1138
+
1139
+ # Concatenate list members, any item containing spaces, commas or single quotes is enclosed in ""
1140
+ @staticmethod
1141
+ def QuotedArgumentList(items):
1142
+ return ' '.join([item if item and (item.find(' ') == -1) and (item.find(',') == -1) and (item.find("'") == -1) else '"'+item+'"' for item in items])
1143
+
1144
+ # Mark bad argument in command line
1145
+ def CommandLineWithBadArgumentMarked(self, extraneous):
1146
+ if extraneous:
1147
+ return f'Command: {self.QuotedArgumentList(self.argv[:self.argvI])} >>>{self.QuotedArgumentList(self.argv[self.argvI:])}<<<\n'
1148
+ if self.ArgumentsRemaining():
1149
+ return f'Command: {self.QuotedArgumentList(self.argv[:self.argvI])} >>>{self.QuotedArgumentList([self.argv[self.argvI]])}<<< {self.QuotedArgumentList(self.argv[self.argvI+1:])}\n'
1150
+ return f'Command: {self.QuotedArgumentList(self.argv)} >>><<<\n'
1151
+
1152
+ # Peek to see if next argument is in choices
1153
+ def PeekArgumentPresent(self, choices):
1154
+ if self.ArgumentsRemaining():
1155
+ choiceList = choices if isinstance(choices, (list, set)) else [choices]
1156
+ choice = self.Current().strip().lower().replace('_', '')
1157
+ if choice and choice in choiceList:
1158
+ return True
1159
+ return False
1160
+
1161
+ # Look ahead to see if argument is present
1162
+ def ArgumentIsAhead(self, argument):
1163
+ self.SaveLocation()
1164
+ while self.ArgumentsRemaining():
1165
+ if argument == self.Current().strip().lower().replace('_', ''):
1166
+ self.ResetLocation(0)
1167
+ return True
1168
+ self.Advance()
1169
+ self.ResetLocation(0)
1170
+ return False
1171
+
1172
+ # Merge new arguments into current argument list
1173
+ def MergeArguments(self, arguments):
1174
+ self.origArgv = self.argv[:]
1175
+ self.origArgvI = self.argvI
1176
+ self.origArgvLen = self.argvLen
1177
+ self.argv = self.argv[0:self.argvI]+arguments+self.argv[self.argvI:]
1178
+ self.argvLen += len(arguments)
1179
+
1180
+ # Restore
1181
+ def RestoreArguments(self):
1182
+ self.argv = self.origArgv[:]
1183
+ self.argvI = self.origArgvI
1184
+ self.argvLen = self.origArgvLen