gam7 7.20.3__py3-none-any.whl → 7.28.2__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.
gam/gamlib/glclargs.py CHANGED
@@ -49,43 +49,71 @@ class GamCLArgs():
49
49
  ENTITY_CROS_OUS_AND_CHILDREN_QUERIES = 'cros_ous_and_children_queries'
50
50
  ENTITY_CROS_SN = 'cros_sn'
51
51
  ENTITY_DOMAINS = 'domains'
52
+ ENTITY_DOMAINS_NA = 'domains_na'
53
+ ENTITY_DOMAINS_ARCH = 'domains_arch'
52
54
  ENTITY_DOMAINS_NS = 'domains_ns'
53
55
  ENTITY_DOMAINS_SUSP = 'domains_susp'
56
+ ENTITY_DOMAINS_NA_NS = 'domains_na_ns'
54
57
  ENTITY_GROUP = 'group'
55
58
  ENTITY_GROUP_INDE = 'group_inde'
59
+ ENTITY_GROUP_NA = 'group_na'
60
+ ENTITY_GROUP_ARCH = 'group_arch'
56
61
  ENTITY_GROUP_NS = 'group_ns'
57
62
  ENTITY_GROUP_SUSP = 'group_susp'
63
+ ENTITY_GROUP_NA_NS = 'group_na_ns'
58
64
  ENTITY_GROUPS = 'groups'
59
65
  ENTITY_GROUPS_INDE = 'groups_inde'
66
+ ENTITY_GROUPS_NA = 'groups_na'
67
+ ENTITY_GROUPS_ARCH = 'groups_arch'
60
68
  ENTITY_GROUPS_NS = 'groups_ns'
61
69
  ENTITY_GROUPS_SUSP = 'groups_susp'
70
+ ENTITY_GROUPS_NA_NS = 'groups_na_ns'
62
71
  ENTITY_GROUP_USERS = 'group_users'
72
+ ENTITY_GROUP_USERS_NA = 'group_users_na'
73
+ ENTITY_GROUP_USERS_ARCH = 'group_users_arch'
63
74
  ENTITY_GROUP_USERS_NS = 'group_users_ns'
64
75
  ENTITY_GROUP_USERS_SUSP = 'group_users_susp'
76
+ ENTITY_GROUP_USERS_NA_NS = 'group_users_na_ns'
65
77
  ENTITY_GROUP_USERS_SELECT = 'group_users_select'
66
78
  ENTITY_LICENSES = 'licenses'
67
79
  ENTITY_OAUTHUSER = 'oauthuser'
68
80
  ENTITY_OU = 'ou'
81
+ ENTITY_OU_NA = 'ou_na'
82
+ ENTITY_OU_ARCH = 'ou_arch'
69
83
  ENTITY_OU_NS = 'ou_ns'
70
84
  ENTITY_OU_SUSP = 'ou_susp'
85
+ ENTITY_OU_NA_NS = 'ou_na_ns'
71
86
  ENTITY_OU_AND_CHILDREN = 'ou_and_children'
87
+ ENTITY_OU_AND_CHILDREN_NA = 'ou_and_children_na'
88
+ ENTITY_OU_AND_CHILDREN_ARCH = 'ou_and_children_arch'
72
89
  ENTITY_OU_AND_CHILDREN_NS = 'ou_and_children_ns'
73
90
  ENTITY_OU_AND_CHILDREN_SUSP = 'ou_and_children_susp'
91
+ ENTITY_OU_AND_CHILDREN_NA_NS = 'ou_and_children_na_ns'
74
92
  ENTITY_OUS = 'ous'
93
+ ENTITY_OUS_NA = 'ous_na'
94
+ ENTITY_OUS_ARCH = 'ous_arch'
75
95
  ENTITY_OUS_NS = 'ous_ns'
76
96
  ENTITY_OUS_SUSP = 'ous_susp'
97
+ ENTITY_OUS_NA_NS = 'ous_na_ns'
77
98
  ENTITY_OUS_AND_CHILDREN = 'ous_and_children'
99
+ ENTITY_OUS_AND_CHILDREN_NA = 'ous_and_children_na'
100
+ ENTITY_OUS_AND_CHILDREN_ARCH = 'ous_and_children_arch'
78
101
  ENTITY_OUS_AND_CHILDREN_NS = 'ous_and_children_ns'
79
102
  ENTITY_OUS_AND_CHILDREN_SUSP = 'ous_and_children_susp'
103
+ ENTITY_OUS_AND_CHILDREN_NA_NS = 'ous_and_children_na_ns'
80
104
  ENTITY_QUERIES = 'queries'
81
105
  ENTITY_QUERY = 'query'
82
106
  ENTITY_STUDENTS = 'students'
83
107
  ENTITY_TEACHERS = 'teachers'
84
108
  ENTITY_USER = 'user'
85
109
  ENTITY_USERS = 'users'
110
+ ENTITY_USERS_NA = 'users_na'
111
+ ENTITY_USERS_ARCH = 'users_arch'
86
112
  ENTITY_USERS_NS = 'users_ns'
87
- ENTITY_USERS_NS_SUSP = 'users_ns_susp'
88
113
  ENTITY_USERS_SUSP = 'users_susp'
114
+ ENTITY_USERS_NA_NS = 'users_na_ns'
115
+ ENTITY_USERS_ARCH_OR_SUSP = 'users_arch_or_susp'
116
+ ENTITY_USERS_NS_SUSP = 'users_ns_susp'
89
117
  #
90
118
  BROWSER_ENTITIES = [
91
119
  ENTITY_BROWSER,
@@ -118,34 +146,58 @@ class GamCLArgs():
118
146
  ENTITY_CIGROUP_USERS,
119
147
  ENTITY_COURSEPARTICIPANTS,
120
148
  ENTITY_DOMAINS,
149
+ ENTITY_DOMAINS_NA,
150
+ ENTITY_DOMAINS_ARCH,
121
151
  ENTITY_DOMAINS_NS,
122
152
  ENTITY_DOMAINS_SUSP,
153
+ ENTITY_DOMAINS_NA_NS,
123
154
  ENTITY_GROUP,
124
155
  ENTITY_GROUP_INDE,
156
+ ENTITY_GROUP_NA,
157
+ ENTITY_GROUP_ARCH,
125
158
  ENTITY_GROUP_NS,
126
159
  ENTITY_GROUP_SUSP,
160
+ ENTITY_GROUP_NA_NS,
127
161
  ENTITY_GROUPS,
128
162
  ENTITY_GROUPS_INDE,
163
+ ENTITY_GROUPS_NA,
164
+ ENTITY_GROUPS_ARCH,
129
165
  ENTITY_GROUPS_NS,
130
166
  ENTITY_GROUPS_SUSP,
167
+ ENTITY_GROUPS_NA_NS,
131
168
  ENTITY_GROUP_USERS,
169
+ ENTITY_GROUP_USERS_NA,
170
+ ENTITY_GROUP_USERS_ARCH,
132
171
  ENTITY_GROUP_USERS_NS,
133
172
  ENTITY_GROUP_USERS_SUSP,
173
+ ENTITY_GROUP_USERS_NA_NS,
134
174
  ENTITY_GROUP_USERS_SELECT,
135
175
  ENTITY_LICENSES,
136
176
  ENTITY_OAUTHUSER,
137
177
  ENTITY_OU,
178
+ ENTITY_OU_NA,
179
+ ENTITY_OU_ARCH,
138
180
  ENTITY_OU_NS,
139
181
  ENTITY_OU_SUSP,
182
+ ENTITY_OU_NA_NS,
140
183
  ENTITY_OU_AND_CHILDREN,
184
+ ENTITY_OU_AND_CHILDREN_NA,
185
+ ENTITY_OU_AND_CHILDREN_ARCH,
141
186
  ENTITY_OU_AND_CHILDREN_NS,
142
187
  ENTITY_OU_AND_CHILDREN_SUSP,
188
+ ENTITY_OU_AND_CHILDREN_NA_NS,
143
189
  ENTITY_OUS,
190
+ ENTITY_OUS_NA,
191
+ ENTITY_OUS_ARCH,
144
192
  ENTITY_OUS_NS,
145
193
  ENTITY_OUS_SUSP,
194
+ ENTITY_OUS_NA_NS,
146
195
  ENTITY_OUS_AND_CHILDREN,
196
+ ENTITY_OUS_AND_CHILDREN_NA,
197
+ ENTITY_OUS_AND_CHILDREN_ARCH,
147
198
  ENTITY_OUS_AND_CHILDREN_NS,
148
199
  ENTITY_OUS_AND_CHILDREN_SUSP,
200
+ ENTITY_OUS_AND_CHILDREN_NA_NS,
149
201
  ENTITY_QUERIES,
150
202
  ENTITY_QUERY,
151
203
  ENTITY_STUDENTS,
@@ -222,29 +274,53 @@ class GamCLArgs():
222
274
  'licence': ENTITY_LICENSES,
223
275
  'licences': ENTITY_LICENSES,
224
276
  'org': ENTITY_OU,
277
+ 'org_na': ENTITY_OU_NA,
278
+ 'org_arch': ENTITY_OU_ARCH,
225
279
  'org_ns': ENTITY_OU_NS,
226
280
  'org_susp': ENTITY_OU_SUSP,
281
+ 'org_na_ns': ENTITY_OU_NA_NS,
227
282
  'org_and_child': ENTITY_OU_AND_CHILDREN,
283
+ 'org_and_child_na': ENTITY_OU_AND_CHILDREN_NA,
284
+ 'org_and_child_arch': ENTITY_OU_AND_CHILDREN_ARCH,
228
285
  'org_and_child_ns': ENTITY_OU_AND_CHILDREN_NS,
229
286
  'org_and_child_susp': ENTITY_OU_AND_CHILDREN_SUSP,
287
+ 'org_and_child_na_ns': ENTITY_OU_AND_CHILDREN_NA_NS,
230
288
  'org_and_children': ENTITY_OU_AND_CHILDREN,
289
+ 'org_and_children_na': ENTITY_OU_AND_CHILDREN_NA,
290
+ 'org_and_children_arch': ENTITY_OU_AND_CHILDREN_ARCH,
231
291
  'org_and_children_ns': ENTITY_OU_AND_CHILDREN_NS,
232
292
  'org_and_children_susp': ENTITY_OU_AND_CHILDREN_SUSP,
293
+ 'org_and_children_na_ns': ENTITY_OU_AND_CHILDREN_NA_NS,
233
294
  'orgs': ENTITY_OUS,
295
+ 'orgs_na': ENTITY_OUS_NA,
296
+ 'orgs_arch': ENTITY_OUS_ARCH,
234
297
  'orgs_ns': ENTITY_OUS_NS,
235
298
  'orgs_susp': ENTITY_OUS_SUSP,
299
+ 'orgs_na_ns': ENTITY_OUS_NA_NS,
236
300
  'orgs_and_child': ENTITY_OUS_AND_CHILDREN,
301
+ 'orgs_and_child_na': ENTITY_OUS_AND_CHILDREN_NA,
302
+ 'orgs_and_child_arch': ENTITY_OUS_AND_CHILDREN_ARCH,
237
303
  'orgs_and_child_ns': ENTITY_OUS_AND_CHILDREN_NS,
238
304
  'orgs_and_child_susp': ENTITY_OUS_AND_CHILDREN_SUSP,
305
+ 'orgs_and_child_na_ns': ENTITY_OUS_AND_CHILDREN_NA_NS,
239
306
  'orgs_and_children': ENTITY_OUS_AND_CHILDREN,
307
+ 'orgs_and_children_na': ENTITY_OUS_AND_CHILDREN_NA,
308
+ 'orgs_and_children_arch': ENTITY_OUS_AND_CHILDREN_ARCH,
240
309
  'orgs_and_children_ns': ENTITY_OUS_AND_CHILDREN_NS,
241
310
  'orgs_and_children_susp': ENTITY_OUS_AND_CHILDREN_SUSP,
311
+ 'orgs_and_children_na_ns': ENTITY_OUS_AND_CHILDREN_NA_NS,
242
312
  'ou_and_child': ENTITY_OU_AND_CHILDREN,
313
+ 'ou_and_child_na': ENTITY_OU_AND_CHILDREN_NA,
314
+ 'ou_and_child_arch': ENTITY_OU_AND_CHILDREN_ARCH,
243
315
  'ou_and_child_ns': ENTITY_OU_AND_CHILDREN_NS,
244
316
  'ou_and_child_susp': ENTITY_OU_AND_CHILDREN_SUSP,
317
+ 'ou_and_child_na_ns': ENTITY_OU_AND_CHILDREN_NA_NS,
245
318
  'ous_and_child': ENTITY_OUS_AND_CHILDREN,
319
+ 'ous_and_child_na': ENTITY_OUS_AND_CHILDREN_NA,
320
+ 'ous_and_child_arch': ENTITY_OUS_AND_CHILDREN_ARCH,
246
321
  'ous_and_child_ns': ENTITY_OUS_AND_CHILDREN_NS,
247
322
  'ous_and_child_susp': ENTITY_OUS_AND_CHILDREN_SUSP,
323
+ 'ous_and_child_na_ns': ENTITY_OUS_AND_CHILDREN_NA_NS,
248
324
  }
249
325
  # CL entity source selectors
250
326
  ENTITY_SELECTOR_ALL = 'all'
@@ -315,30 +391,217 @@ class GamCLArgs():
315
391
  ]
316
392
  USER_ENTITY_SELECTOR_ALL_SUBTYPES = [
317
393
  ENTITY_USERS,
394
+ ENTITY_USERS_NA,
395
+ ENTITY_USERS_ARCH,
318
396
  ENTITY_USERS_NS,
319
- ENTITY_USERS_NS_SUSP,
320
397
  ENTITY_USERS_SUSP,
398
+ ENTITY_USERS_ARCH_OR_SUSP,
399
+ ENTITY_USERS_NA_NS,
400
+ ENTITY_USERS_NS_SUSP,
321
401
  ]
322
402
  #
323
403
  ENTITY_ALL_CROS = ENTITY_SELECTOR_ALL+' '+ENTITY_CROS
324
404
  ENTITY_ALL_USERS = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS
405
+ ENTITY_ALL_USERS_NA = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS_NA
406
+ ENTITY_ALL_USERS_ARCH = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS_ARCH
325
407
  ENTITY_ALL_USERS_NS = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS_NS
326
- ENTITY_ALL_USERS_NS_SUSP = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS_NS_SUSP
327
408
  ENTITY_ALL_USERS_SUSP = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS_SUSP
409
+ ENTITY_ALL_USERS_NA_NS = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS_NA_NS
410
+ ENTITY_ALL_USERS_ARCH_OR_SUSP = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS_ARCH_OR_SUSP
411
+ ENTITY_ALL_USERS_NS_SUSP = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS_NS_SUSP
412
+ #
413
+ ALL_USER_ENTITY_TYPES = {
414
+ ENTITY_ALL_USERS,
415
+ ENTITY_ALL_USERS_NA,
416
+ ENTITY_ALL_USERS_ARCH,
417
+ ENTITY_ALL_USERS_NS,
418
+ ENTITY_ALL_USERS_SUSP,
419
+ ENTITY_ALL_USERS_NA_NS,
420
+ ENTITY_ALL_USERS_NS_SUSP,
421
+ }
422
+ DOMAIN_ENTITY_TYPES = {
423
+ ENTITY_DOMAINS,
424
+ ENTITY_DOMAINS_NA,
425
+ ENTITY_DOMAINS_ARCH,
426
+ ENTITY_DOMAINS_NS,
427
+ ENTITY_DOMAINS_SUSP,
428
+ ENTITY_DOMAINS_NA_NS,
429
+ }
430
+ GROUP_ENTITY_TYPES = {
431
+ ENTITY_GROUP,
432
+ ENTITY_GROUP_NA,
433
+ ENTITY_GROUP_ARCH,
434
+ ENTITY_GROUP_NS,
435
+ ENTITY_GROUP_SUSP,
436
+ ENTITY_GROUP_NA_NS,
437
+ ENTITY_GROUP_INDE,
438
+ }
439
+ GROUPS_ENTITY_TYPES = {
440
+ ENTITY_GROUPS,
441
+ ENTITY_GROUPS_NA,
442
+ ENTITY_GROUPS_ARCH,
443
+ ENTITY_GROUPS_NS,
444
+ ENTITY_GROUPS_SUSP,
445
+ ENTITY_GROUPS_NA_NS,
446
+ ENTITY_GROUPS_INDE,
447
+ }
448
+ GROUP_USERS_ENTITY_TYPES = {
449
+ ENTITY_GROUP_USERS,
450
+ ENTITY_GROUP_USERS_NA,
451
+ ENTITY_GROUP_USERS_ARCH,
452
+ ENTITY_GROUP_USERS_NS,
453
+ ENTITY_GROUP_USERS_SUSP,
454
+ ENTITY_GROUP_USERS_NA_NS,
455
+ ENTITY_GROUP_USERS_SELECT,
456
+ }
457
+ OU_ENTITY_TYPES = {
458
+ ENTITY_OU,
459
+ ENTITY_OU_AND_CHILDREN,
460
+ ENTITY_OU_NA,
461
+ ENTITY_OU_AND_CHILDREN_NA,
462
+ ENTITY_OU_ARCH,
463
+ ENTITY_OU_AND_CHILDREN_ARCH,
464
+ ENTITY_OU_NS,
465
+ ENTITY_OU_AND_CHILDREN_NS,
466
+ ENTITY_OU_SUSP,
467
+ ENTITY_OU_AND_CHILDREN_SUSP,
468
+ ENTITY_OU_NA_NS,
469
+ ENTITY_OU_AND_CHILDREN_NA_NS,
470
+ }
471
+ OUS_ENTITY_TYPES = {
472
+ ENTITY_OUS,
473
+ ENTITY_OUS_AND_CHILDREN,
474
+ ENTITY_OUS_NA,
475
+ ENTITY_OUS_AND_CHILDREN_NA,
476
+ ENTITY_OUS_ARCH,
477
+ ENTITY_OUS_AND_CHILDREN_ARCH,
478
+ ENTITY_OUS_NS,
479
+ ENTITY_OUS_AND_CHILDREN_NS,
480
+ ENTITY_OUS_SUSP,
481
+ ENTITY_OUS_AND_CHILDREN_SUSP,
482
+ ENTITY_OUS_NA_NS,
483
+ ENTITY_OUS_AND_CHILDREN_NA_NS,
484
+ }
485
+ OU_DIRECT_ENTITY_TYPES = {
486
+ ENTITY_OU,
487
+ ENTITY_OUS,
488
+ ENTITY_OU_NA,
489
+ ENTITY_OUS_NA,
490
+ ENTITY_OU_ARCH,
491
+ ENTITY_OUS_ARCH,
492
+ ENTITY_OU_NS,
493
+ ENTITY_OUS_NS,
494
+ ENTITY_OU_SUSP,
495
+ ENTITY_OUS_SUSP,
496
+ ENTITY_OU_NA_NS,
497
+ ENTITY_OUS_NA_NS,
498
+ }
499
+ CROS_OU_ENTITY_TYPES = {
500
+ ENTITY_CROS_OU,
501
+ ENTITY_CROS_OU_AND_CHILDREN,
502
+ ENTITY_CROS_OU_QUERY,
503
+ ENTITY_CROS_OU_AND_CHILDREN_QUERY,
504
+ ENTITY_CROS_OU_QUERIES,
505
+ ENTITY_CROS_OU_AND_CHILDREN_QUERIES,
506
+ }
507
+ CROS_OUS_ENTITY_TYPES = {
508
+ ENTITY_CROS_OUS,
509
+ ENTITY_CROS_OUS_AND_CHILDREN,
510
+ ENTITY_CROS_OUS_QUERY,
511
+ ENTITY_CROS_OUS_AND_CHILDREN_QUERY,
512
+ ENTITY_CROS_OUS_QUERIES,
513
+ ENTITY_CROS_OUS_AND_CHILDREN_QUERIES,
514
+ }
515
+ CROS_OU_CHILDREN_ENTITY_TYPES = {
516
+ ENTITY_CROS_OU_AND_CHILDREN,
517
+ ENTITY_CROS_OU_AND_CHILDREN_QUERY,
518
+ ENTITY_CROS_OU_AND_CHILDREN_QUERIES,
519
+ ENTITY_CROS_OUS_AND_CHILDREN,
520
+ ENTITY_CROS_OUS_AND_CHILDREN_QUERY,
521
+ ENTITY_CROS_OUS_AND_CHILDREN_QUERIES,
522
+ }
523
+ CROS_OU_QUERY_ENTITY_TYPES = {
524
+ ENTITY_CROS_OU_QUERY,
525
+ ENTITY_CROS_OU_AND_CHILDREN_QUERY,
526
+ ENTITY_CROS_OUS_QUERY,
527
+ ENTITY_CROS_OUS_AND_CHILDREN_QUERY,
528
+ }
529
+ CROS_OU_QUERIES_ENTITY_TYPES = {
530
+ ENTITY_CROS_OU_QUERIES,
531
+ ENTITY_CROS_OU_AND_CHILDREN_QUERIES,
532
+ ENTITY_CROS_OUS_QUERIES,
533
+ ENTITY_CROS_OUS_AND_CHILDREN_QUERIES,
534
+ }
328
535
  #
329
536
  ALL_USERS_QUERY_MAP = {
330
537
  ENTITY_ALL_USERS: 'isSuspended=False',
538
+ ENTITY_ALL_USERS_NA: 'isArchived=False',
539
+ ENTITY_ALL_USERS_ARCH: 'isArchived=True',
331
540
  ENTITY_ALL_USERS_NS: 'isSuspended=False',
332
- ENTITY_ALL_USERS_NS_SUSP: None,
333
541
  ENTITY_ALL_USERS_SUSP: 'isSuspended=True',
542
+ ENTITY_ALL_USERS_NA_NS: 'isArchived=False isSuspended=False',
543
+ ENTITY_ALL_USERS_NS_SUSP: None,
544
+ }
545
+ DOMAINS_QUERY_MAP = {
546
+ ENTITY_DOMAINS: None,
547
+ ENTITY_DOMAINS_NA: 'isArchived=False',
548
+ ENTITY_DOMAINS_ARCH: 'isArchived=True',
549
+ ENTITY_DOMAINS_NS: 'isSuspended=False',
550
+ ENTITY_DOMAINS_SUSP: 'isSuspended=True',
551
+ ENTITY_DOMAINS_NA_NS: 'isArchived=False isSuspended=False',
552
+ }
553
+ GROUPS_QUERY_MAP = { #(isArchived, isSuspended)
554
+ ENTITY_GROUP_NA: (False, None),
555
+ ENTITY_GROUPS_NA: (False, None),
556
+ ENTITY_GROUP_ARCH: (True, None),
557
+ ENTITY_GROUPS_ARCH: (True, None),
558
+ ENTITY_GROUP_NS: (None, False),
559
+ ENTITY_GROUPS_NS: (None, False),
560
+ ENTITY_GROUP_SUSP: (None, True),
561
+ ENTITY_GROUPS_SUSP: (None, True),
562
+ ENTITY_GROUP_NA_NS: (False, False),
563
+ ENTITY_GROUPS_NA_NS: (False, False),
564
+ }
565
+ GROUP_USERS_QUERY_MAP = { #(isArchived, isSuspended)
566
+ ENTITY_GROUP_USERS_NA: (False, None),
567
+ ENTITY_GROUP_USERS_ARCH: (True, None),
568
+ ENTITY_GROUP_USERS_NS: (None, False),
569
+ ENTITY_GROUP_USERS_SUSP: (None, True),
570
+ ENTITY_GROUP_USERS_NA_NS: (False, False),
571
+ }
572
+ OU_QUERY_MAP = { #(isArchived, isSuspended)
573
+ ENTITY_OU_NA: (False, None),
574
+ ENTITY_OUS_NA: (False, None),
575
+ ENTITY_OU_AND_CHILDREN_NA: (False, None),
576
+ ENTITY_OUS_AND_CHILDREN_NA: (False, None),
577
+ ENTITY_OU_ARCH: (True, None),
578
+ ENTITY_OUS_ARCH: (True, None),
579
+ ENTITY_OU_AND_CHILDREN_ARCH: (True, None),
580
+ ENTITY_OUS_AND_CHILDREN_ARCH: (True, None),
581
+ ENTITY_OU_NS: (None, False),
582
+ ENTITY_OUS_NS: (None, False),
583
+ ENTITY_OU_AND_CHILDREN_NS: (None, False),
584
+ ENTITY_OUS_AND_CHILDREN_NS: (None, False),
585
+ ENTITY_OU_SUSP: (None, True),
586
+ ENTITY_OUS_SUSP: (None, True),
587
+ ENTITY_OU_AND_CHILDREN_SUSP: (None, True),
588
+ ENTITY_OUS_AND_CHILDREN_SUSP: (None, True),
589
+ ENTITY_OU_NA_NS: (False, False),
590
+ ENTITY_OUS_NA_NS: (False, False),
591
+ ENTITY_OU_AND_CHILDREN_NA_NS: (False, False),
592
+ ENTITY_OUS_AND_CHILDREN_NA_NS: (False, False),
334
593
  }
335
594
  #
336
595
  ENTITY_SELECTOR_ALL_SUBTYPES_MAP = {
337
596
  ENTITY_CROS: ENTITY_ALL_CROS,
338
597
  ENTITY_USERS: ENTITY_ALL_USERS,
598
+ ENTITY_USERS_NA: ENTITY_ALL_USERS_NA,
599
+ ENTITY_USERS_ARCH: ENTITY_ALL_USERS_ARCH,
339
600
  ENTITY_USERS_NS: ENTITY_ALL_USERS_NS,
340
- ENTITY_USERS_NS_SUSP: ENTITY_ALL_USERS_NS_SUSP,
341
601
  ENTITY_USERS_SUSP: ENTITY_ALL_USERS_SUSP,
602
+ ENTITY_USERS_NA_NS: ENTITY_ALL_USERS_NA_NS,
603
+ ENTITY_USERS_ARCH_OR_SUSP: ENTITY_ALL_USERS_ARCH_OR_SUSP,
604
+ ENTITY_USERS_NS_SUSP: ENTITY_ALL_USERS_NS_SUSP,
342
605
  }
343
606
  # Allowed values for CL source selector datafile, csvkmd
344
607
  CROS_ENTITY_SELECTOR_DATAFILE_CSVKMD_SUBTYPES = [
@@ -352,22 +615,37 @@ class GamCLArgs():
352
615
  ENTITY_CIGROUPS,
353
616
  ENTITY_CIGROUP_USERS,
354
617
  ENTITY_DOMAINS,
618
+ ENTITY_DOMAINS_NA,
619
+ ENTITY_DOMAINS_ARCH,
355
620
  ENTITY_DOMAINS_NS,
356
621
  ENTITY_DOMAINS_SUSP,
622
+ ENTITY_DOMAINS_NA_NS,
357
623
  ENTITY_GROUPS,
358
624
  ENTITY_GROUPS_INDE,
625
+ ENTITY_GROUPS_NA,
626
+ ENTITY_GROUPS_ARCH,
359
627
  ENTITY_GROUPS_NS,
360
628
  ENTITY_GROUPS_SUSP,
629
+ ENTITY_GROUPS_NA_NS,
361
630
  ENTITY_GROUP_USERS,
631
+ ENTITY_GROUP_USERS_NA,
632
+ ENTITY_GROUP_USERS_ARCH,
362
633
  ENTITY_GROUP_USERS_NS,
363
634
  ENTITY_GROUP_USERS_SUSP,
635
+ ENTITY_GROUP_USERS_NA_NS,
364
636
  ENTITY_GROUP_USERS_SELECT,
365
637
  ENTITY_OUS,
638
+ ENTITY_OUS_NA,
639
+ ENTITY_OUS_ARCH,
366
640
  ENTITY_OUS_NS,
367
641
  ENTITY_OUS_SUSP,
642
+ ENTITY_OUS_NA_NS,
368
643
  ENTITY_OUS_AND_CHILDREN,
644
+ ENTITY_OUS_AND_CHILDREN_NA,
645
+ ENTITY_OUS_AND_CHILDREN_ARCH,
369
646
  ENTITY_OUS_AND_CHILDREN_NS,
370
647
  ENTITY_OUS_AND_CHILDREN_SUSP,
648
+ ENTITY_OUS_AND_CHILDREN_NA_NS,
371
649
  ENTITY_COURSEPARTICIPANTS,
372
650
  ENTITY_STUDENTS,
373
651
  ENTITY_TEACHERS,
@@ -377,6 +655,7 @@ class GamCLArgs():
377
655
  GAM_CMD = 'gam'
378
656
  COMMIT_BATCH_CMD = 'commit-batch'
379
657
  PRINT_CMD = 'print'
658
+ DATETIME_CMD = 'datetime'
380
659
  SET_CMD = 'set'
381
660
  CLEAR_CMD = 'clear'
382
661
  SLEEP_CMD = 'sleep'
@@ -475,6 +754,7 @@ class GamCLArgs():
475
754
  ARG_CHATSPACE = 'chatspace'
476
755
  ARG_CHATSPACES = 'chatspaces'
477
756
  ARG_CHATSPACEDM = 'chatspacedm'
757
+ ARG_CHROMEDEVICECOUNTS = 'chromedevicecounts'
478
758
  ARG_CHROMEAPP = 'chromeapp'
479
759
  ARG_CHROMEAPPS = 'chromeapps'
480
760
  ARG_CHROMEAPPDEVICES = 'chromeappdevices'
@@ -859,6 +1139,7 @@ class GamCLArgs():
859
1139
  OB_ARGUMENT = 'argument'
860
1140
  OB_ASP_ID_LIST = 'ASPIDList'
861
1141
  OB_ASSET_ID = 'AssetID'
1142
+ OB_ADMIN_ASSIGNEE_TYPE_LIST = 'AdminAssigneeTypeList'
862
1143
  OB_BROWSER_ENROLLEMNT_TOKEN_ID = 'BrowserEnrollmentTokenID'
863
1144
  OB_BROWSER_ENTITY = 'BrowserEntity'
864
1145
  OB_BUILDING_ID = 'BuildingID'
@@ -924,6 +1205,7 @@ class GamCLArgs():
924
1205
  OB_CSE_KEYPAIR_ID = 'CSEKeyPairID'
925
1206
  OB_CUSTOMER_ID = 'CustomerID'
926
1207
  OB_CUSTOMER_AUTH_TOKEN = 'CustomerAuthToken'
1208
+ OB_DATETIME_FORMAT = 'DateTimeFormat'
927
1209
  OB_DEVICE_FILE_ENTITY = 'DeviceFileEntity'
928
1210
  OB_DEVICE_ENTITY = 'DeviceEntity'
929
1211
  OB_DEVICE_ID = 'DeviceID'
@@ -936,6 +1218,7 @@ class GamCLArgs():
936
1218
  OB_DOMAIN_NAME_LIST = 'DomainNameList'
937
1219
  OB_DRIVE_FILE_ENTITY = 'DriveFileEntity'
938
1220
  OB_DRIVE_FILE_ID = 'DriveFileID'
1221
+ OB_DRIVE_FILE_ID_LIST = 'DriveFileIDList'
939
1222
  OB_DRIVE_FILE_NAME = 'DriveFileName'
940
1223
  OB_DRIVE_FILE_PERMISSION_ENTITY = 'DriveFilePermissionEntity'
941
1224
  OB_DRIVE_FILE_PERMISSION_ID = 'DriveFilePermissionID'
gam/gamlib/glentity.py CHANGED
@@ -96,6 +96,7 @@ class GamEntity():
96
96
  CHAT_MEMBER_USER = 'chmu'
97
97
  CHAT_MESSAGE = 'chms'
98
98
  CHAT_MESSAGE_ID = 'chmi'
99
+ CHAT_OWNER_USER = 'chou'
99
100
  CHAT_SPACE = 'chsp'
100
101
  CHAT_THREAD = 'chth'
101
102
  CHILD_ORGANIZATIONAL_UNIT = 'corg'
@@ -105,6 +106,7 @@ class GamEntity():
105
106
  CHROME_BROWSER_ENROLLMENT_TOKEN = 'cbet'
106
107
  CHROME_CHANNEL = 'chan'
107
108
  CHROME_DEVICE = 'chdv'
109
+ CHROME_DEVICE_COUNT = 'chdc'
108
110
  CHROME_MODEL = 'chmo'
109
111
  CHROME_NETWORK_ID = 'chni'
110
112
  CHROME_NETWORK_NAME = 'chnn'
@@ -384,11 +386,13 @@ class GamEntity():
384
386
  URL = 'url '
385
387
  USER = 'user'
386
388
  USER_ALIAS = 'uali'
389
+ USER_NOT_ARCHIVED = 'usna'
390
+ USER_ARCHIVED = 'usar'
387
391
  USER_EMAIL = 'uema'
388
392
  USER_INVITATION = 'uinv'
389
- USER_NOT_SUSPENDED = 'uns'
390
- USER_SCHEMA = 'usch'
393
+ USER_NOT_SUSPENDED = 'usns'
391
394
  USER_SUSPENDED = 'usup'
395
+ USER_SCHEMA = 'usch'
392
396
  VACATION = 'vaca'
393
397
  VACATION_ENABLED = 'vace'
394
398
  VALUE = 'val'
@@ -460,6 +464,7 @@ class GamEntity():
460
464
  CHAT_MEMBER: ['Chat Members', 'Chat Member'],
461
465
  CHAT_MEMBER_GROUP: ['Chat Group Members', 'Chat Group Member'],
462
466
  CHAT_MEMBER_USER: ['Chat User Members', 'Chat User Member'],
467
+ CHAT_OWNER_USER: ['Chat User Owners', 'Chat User Owner'],
463
468
  CHAT_SPACE: ['Chat Spaces', 'Chat Space'],
464
469
  CHAT_THREAD: ['Chat Threads', 'Chat Thread'],
465
470
  CHILD_ORGANIZATIONAL_UNIT: ['Child Organizational Units', 'Child Organizational Unit'],
@@ -469,6 +474,7 @@ class GamEntity():
469
474
  CHROME_BROWSER_ENROLLMENT_TOKEN: ['Chrome Browser Enrollment Tokens', 'Chrome Browser Enrollment Token'],
470
475
  CHROME_CHANNEL: ['Chrome Channels', 'Chrome Channel'],
471
476
  CHROME_DEVICE: ['Chrome Devices', 'Chrome Device'],
477
+ CHROME_DEVICE_COUNT: ['Chrome Device Counts', 'Chrome Device Count'],
472
478
  CHROME_MODEL: ['Chrome Models', 'Chrome Model'],
473
479
  CHROME_NETWORK_ID: ['Chrome Network IDs', 'Chrome Network ID'],
474
480
  CHROME_NETWORK_NAME: ['Chrome Network Names', 'Chrome Network Name'],
@@ -748,11 +754,13 @@ class GamEntity():
748
754
  URL: ['URLs', 'URL'],
749
755
  USER: ['Users', 'User'],
750
756
  USER_ALIAS: ['User Aliases', 'User Alias'],
757
+ USER_NOT_ARCHIVED: ['Users (Not archived)', 'User (Not archived)'],
758
+ USER_ARCHIVED: ['Users (Archived)', 'User (Archived)'],
751
759
  USER_EMAIL: ['User Emails', 'User Email'],
752
760
  USER_INVITATION: ['User Invitations', 'User Invitation'],
753
761
  USER_NOT_SUSPENDED: ['Users (Not suspended)', 'User (Not suspended)'],
754
- USER_SCHEMA: ['Schemas', 'Schema'],
755
762
  USER_SUSPENDED: ['Users (Suspended)', 'User (Suspended)'],
763
+ USER_SCHEMA: ['Schemas', 'Schema'],
756
764
  VACATION: ['Vacation', 'Vacation'],
757
765
  VACATION_ENABLED: ['Vacation Enabled', 'Vacation Enabled'],
758
766
  VALUE: ['Values', 'Value'],
gam/gamlib/glglobals.py CHANGED
@@ -107,6 +107,8 @@ CURRENT_SVCACCT_USER = 'csa'
107
107
  DATETIME_NOW = 'dtno'
108
108
  # If debug_level > 0: extra_args['prettyPrint'] = True, httplib2.debuglevel = gam_debug_level, appsObj.debug = True
109
109
  DEBUG_LEVEL = 'dbgl'
110
+ # Whether debug output should redact sensitive credentials
111
+ DEBUG_REDACTION = 'dbrd'
110
112
  # Decoded ID token
111
113
  DECODED_ID_TOKEN = 'didt'
112
114
  # Index of start of <UserTypeEntity> in command line
@@ -263,6 +265,7 @@ Globals = {
263
265
  CURRENT_SVCACCT_USER: None,
264
266
  DATETIME_NOW: None,
265
267
  DEBUG_LEVEL: 0,
268
+ DEBUG_REDACTION: True,
266
269
  DECODED_ID_TOKEN: None,
267
270
  ENTITY_CL_DELAY_START: 1,
268
271
  ENTITY_CL_START: 1,
gam/gamlib/glmsgs.py CHANGED
@@ -224,6 +224,8 @@ COUNT_N_EXCEEDS_MAX_TO_PROCESS_M = 'Count {0} exceeds maximum to {1} {2}'
224
224
  CORRUPT_FILE = 'Corrupt file'
225
225
  COULD_NOT_FIND_ANY_YUBIKEY = 'Could not find any YubiKey\n'
226
226
  COULD_NOT_FIND_YUBIKEY_WITH_SERIAL = 'Could not find YubiKey with serial number {0}\n'
227
+ CREATE_DELEGATE_NOTIFY_MESSAGE = '#user# has granted you #delegate# access to read, delete and send mail on their behalf.'
228
+ CREATE_DELEGATE_NOTIFY_SUBJECT = '#user# mail delegation to #delegate#'
227
229
  CREATE_USER_NOTIFY_MESSAGE = 'Hello #givenname# #familyname#,\n\nYou have a new account at #domain#\nAccount details:\nUsername: #user#\nPassword: #password#\nStart using your new account by signing in at\nhttps://www.google.com/accounts/AccountChooser?Email=#user#&continue=https://workspace.google.com/dashboard\n'
228
230
  CREATE_USER_NOTIFY_SUBJECT = 'Welcome to #domain#'
229
231
  CSV_DATA_ALREADY_SAVED = 'CSV data already saved'
@@ -516,7 +518,7 @@ To set up Google Chat for your current project, please go to:
516
518
 
517
519
  and follow the instructions at:
518
520
 
519
- https://github.com/GAM-team/GAM/wiki/Chat-Bot#set-up-a-chat-bot
521
+ https://github.com/GAM-team/GAM/wiki/Chat-Bot-Setup-Use#set-up-a-chat-bot
520
522
 
521
523
  You'll use projects/{1}/topics/no-topic in Connection settings Cloud Pub/Sub Topic Name
522
524
  """
gam/gamlib/glverlibs.py CHANGED
@@ -21,6 +21,7 @@
21
21
  """
22
22
 
23
23
  GAM_VER_LIBS = [
24
+ 'arrow',
24
25
  'chardet',
25
26
  'cryptography',
26
27
  'filelock',
@@ -33,6 +34,5 @@ GAM_VER_LIBS = [
33
34
  'passlib',
34
35
  'pathvalidate',
35
36
  'pyscard',
36
- 'python-dateutil',
37
37
  'yubikey-manager',
38
38
  ]
gam/gamlib/yubikey.py CHANGED
@@ -1,6 +1,6 @@
1
1
  # -*- coding: utf-8 -*-
2
2
 
3
- # Copyright (C) 2023 Ross Scroggs All Rights Reserved.
3
+ # Copyright (C) 2025 Ross Scroggs All Rights Reserved.
4
4
  #
5
5
  # All Rights Reserved.
6
6
  #
@@ -19,11 +19,20 @@
19
19
  """YubiKey"""
20
20
 
21
21
  import base64
22
- import datetime
23
22
  from secrets import SystemRandom
24
23
  import string
25
24
  import sys
26
25
 
26
+ import arrow
27
+
28
+ from gam import mplock
29
+
30
+ from gam import systemErrorExit
31
+ from gam import readStdin
32
+ from gam import writeStdout
33
+
34
+ from gam.gamlib import glmsgs as Msg
35
+
27
36
  from cryptography.hazmat.primitives import hashes, serialization
28
37
  from cryptography.hazmat.primitives.asymmetric import padding
29
38
  from smartcard.Exceptions import CardConnectionException
@@ -49,14 +58,6 @@ YUBIKEY_VALUE_ERROR_RC = 85
49
58
  YUBIKEY_MULTIPLE_CONNECTED_RC = 86
50
59
  YUBIKEY_NOT_FOUND_RC = 87
51
60
 
52
- from gam import mplock
53
-
54
- from gam import systemErrorExit
55
- from gam import readStdin
56
- from gam import writeStdout
57
-
58
- from gam.gamlib import glmsgs as Msg
59
-
60
61
  PIN_PUK_CHARS = string.ascii_letters+string.digits+string.punctuation
61
62
 
62
63
  class YubiKey():
@@ -155,8 +156,8 @@ class YubiKey():
155
156
  KEY_TYPE.RSA2048,
156
157
  PIN_POLICY.ALWAYS,
157
158
  TOUCH_POLICY.NEVER)
158
- now = datetime.datetime.utcnow()
159
- valid_to = now + datetime.timedelta(days=36500)
159
+ now = arrow.utcnow()
160
+ valid_to = now.shift(days=36500)
160
161
  subject = 'CN=GAM Created Key'
161
162
  piv.authenticate(MANAGEMENT_KEY_TYPE.TDES, DEFAULT_MANAGEMENT_KEY)
162
163
  piv.verify_pin(new_pin)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gam7
3
- Version: 7.20.3
3
+ Version: 7.28.2
4
4
  Summary: CLI tool to manage Google Workspace
5
5
  Project-URL: Homepage, https://github.com/GAM-team/GAM
6
6
  Project-URL: Issues, https://github.com/GAM-team/GAM/issues
@@ -17,7 +17,8 @@ Classifier: Programming Language :: Python :: 3.10
17
17
  Classifier: Programming Language :: Python :: 3.11
18
18
  Classifier: Programming Language :: Python :: 3.12
19
19
  Classifier: Programming Language :: Python :: 3.13
20
- Requires-Python: >=3.9
20
+ Requires-Python: >=3.10
21
+ Requires-Dist: arrow>=1.3.0
21
22
  Requires-Dist: chardet>=5.2.0
22
23
  Requires-Dist: cryptography>=44.0.2
23
24
  Requires-Dist: distro; sys_platform == 'linux'
@@ -26,11 +27,11 @@ Requires-Dist: google-api-python-client>=2.167.0
26
27
  Requires-Dist: google-auth-httplib2>=0.2.0
27
28
  Requires-Dist: google-auth-oauthlib>=1.2.2
28
29
  Requires-Dist: google-auth>=2.39.0
29
- Requires-Dist: httplib2>=0.22.0
30
+ Requires-Dist: httplib2>=0.31.0
30
31
  Requires-Dist: lxml>=5.4.0
31
32
  Requires-Dist: passlib>=1.7.4
32
33
  Requires-Dist: pathvalidate>=3.2.3
33
- Requires-Dist: python-dateutil
34
+ Requires-Dist: pysocks>=1.7.1
34
35
  Provides-Extra: yubikey
35
36
  Requires-Dist: yubikey-manager>=5.6.1; extra == 'yubikey'
36
37
  Description-Content-Type: text/markdown
@@ -55,6 +56,11 @@ this will download GAM, install it and start setup.
55
56
 
56
57
  Download the MSI Installer from the [GitHub Releases] page. Install the MSI and you'll be prompted to setup GAM.
57
58
 
59
+ ## Use your own Python
60
+ If you'd prefer to install GAM as a Python package you can install with pip:
61
+ ```
62
+ pip install gam7
63
+ ```
58
64
  # Documentation
59
65
 
60
66
  The GAM documentation is hosted in the [GitHub Wiki]