gam7 7.5.3__py3-none-any.whl → 7.5.5__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.

gam/__init__.py CHANGED
@@ -25,7 +25,7 @@ https://github.com/GAM-team/GAM/wiki
25
25
  """
26
26
 
27
27
  __author__ = 'GAM Team <google-apps-manager@googlegroups.com>'
28
- __version__ = '7.05.03'
28
+ __version__ = '7.05.05'
29
29
  __license__ = 'Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)'
30
30
 
31
31
  #pylint: disable=wrong-import-position
@@ -5751,14 +5751,18 @@ def convertUIDtoEmailAddressWithType(emailAddressOrUID, cd=None, sal=None, email
5751
5751
  return (uid, 'serviceaccount')
5752
5752
  return (normalizedEmailAddressOrUID, 'unknown')
5753
5753
 
5754
+ NON_EMAIL_MEMBER_PREFIXES = (
5755
+ "cbcm-browser.",
5756
+ "chrome-os-device.",
5757
+ )
5754
5758
  # Convert UID to email address
5755
5759
  def convertUIDtoEmailAddress(emailAddressOrUID, cd=None, emailTypes=None,
5756
5760
  checkForCustomerId=False, ciGroupsAPI=False, aliasAllowed=True):
5757
5761
  if ciGroupsAPI:
5758
- if emailAddressOrUID.startswith('cbcm-browser.') or emailAddressOrUID.startswith('chrome-os-device.'):
5762
+ if emailAddressOrUID.startswith(NON_EMAIL_MEMBER_PREFIXES):
5759
5763
  return emailAddressOrUID
5760
5764
  normalizedEmailAddressOrUID = normalizeEmailAddressOrUID(emailAddressOrUID, ciGroupsAPI=ciGroupsAPI)
5761
- if normalizedEmailAddressOrUID.startswith('cbcm-browser.') or normalizedEmailAddressOrUID.startswith('chrome-os-device.'):
5765
+ if normalizedEmailAddressOrUID.startswith(NON_EMAIL_MEMBER_PREFIXES):
5762
5766
  return normalizedEmailAddressOrUID
5763
5767
  email, _ = convertUIDtoEmailAddressWithType(emailAddressOrUID, cd, emailTypes,
5764
5768
  checkForCustomerId, ciGroupsAPI, aliasAllowed)
@@ -18918,6 +18922,7 @@ CONTACT_USER_DEFINED_FIELDS = 'User Defined Fields'
18918
18922
  CONTACT_WEBSITES = 'Websites'
18919
18923
  #
18920
18924
  class ContactsManager():
18925
+
18921
18926
  CONTACT_ARGUMENT_TO_PROPERTY_MAP = {
18922
18927
  'json': CONTACT_JSON,
18923
18928
  'name': CONTACT_NAME,
@@ -21298,7 +21303,7 @@ def queryPeopleContacts(people, contactQuery, fields, sortOrder, entityType, use
21298
21303
  showMessage = pageMessage.replace(TOTAL_ITEMS_MARKER, str(totalItems))
21299
21304
  writeGotMessage(showMessage.replace('{0}', str(Ent.Choose(Ent.PEOPLE_CONTACT, totalItems))))
21300
21305
  return entityList
21301
- except GAPI.permissionDenied as e:
21306
+ except (GAPI.permissionDenied, GAPI.failedPrecondition) as e:
21302
21307
  ClientAPIAccessDeniedExit(str(e))
21303
21308
  except (GAPI.serviceNotAvailable, GAPI.forbidden):
21304
21309
  entityUnknownWarning(entityType, user, i, count)
@@ -21448,7 +21453,7 @@ def createUserPeopleContact(users):
21448
21453
  csvPF.WriteRow(row)
21449
21454
  except GAPI.invalidArgument as e:
21450
21455
  entityActionFailedWarning([entityType, user, peopleEntityType, None], str(e), i, count)
21451
- except GAPI.permissionDenied as e:
21456
+ except (GAPI.permissionDenied, GAPI.failedPrecondition) as e:
21452
21457
  ClientAPIAccessDeniedExit(str(e))
21453
21458
  except (GAPI.serviceNotAvailable, GAPI.forbidden):
21454
21459
  ClientAPIAccessDeniedExit()
@@ -21613,7 +21618,7 @@ def _clearUpdatePeopleContacts(users, updateContacts):
21613
21618
  entityActionFailedWarning([entityType, user, peopleEntityType, resourceName], str(e), j, jcount)
21614
21619
  except (GAPI.notFound, GAPI.internalError):
21615
21620
  entityActionFailedWarning([entityType, user, peopleEntityType, resourceName], Msg.DOES_NOT_EXIST, j, jcount)
21616
- except GAPI.permissionDenied as e:
21621
+ except (GAPI.permissionDenied, GAPI.failedPrecondition) as e:
21617
21622
  ClientAPIAccessDeniedExit(str(e))
21618
21623
  except (GAPI.serviceNotAvailable, GAPI.forbidden):
21619
21624
  ClientAPIAccessDeniedExit()
@@ -21763,7 +21768,7 @@ def dedupReplaceDomainUserPeopleContacts(users):
21763
21768
  entityActionFailedWarning([entityType, user, peopleEntityType, resourceName], str(e), j, jcount)
21764
21769
  except (GAPI.notFound, GAPI.internalError):
21765
21770
  entityActionFailedWarning([entityType, user, peopleEntityType, resourceName], Msg.DOES_NOT_EXIST, j, jcount)
21766
- except GAPI.permissionDenied as e:
21771
+ except (GAPI.permissionDenied, GAPI.failedPrecondition) as e:
21767
21772
  ClientAPIAccessDeniedExit(str(e))
21768
21773
  except (GAPI.serviceNotAvailable, GAPI.forbidden):
21769
21774
  ClientAPIAccessDeniedExit()
@@ -21818,7 +21823,7 @@ def deleteUserPeopleContacts(users):
21818
21823
  entityActionPerformed([entityType, user, peopleEntityType, resourceName], j, jcount)
21819
21824
  except (GAPI.notFound, GAPI.internalError):
21820
21825
  entityActionFailedWarning([entityType, user, peopleEntityType, resourceName], Msg.DOES_NOT_EXIST, j, jcount)
21821
- except GAPI.permissionDenied as e:
21826
+ except (GAPI.permissionDenied, GAPI.failedPrecondition) as e:
21822
21827
  ClientAPIAccessDeniedExit(str(e))
21823
21828
  except (GAPI.serviceNotAvailable, GAPI.forbidden):
21824
21829
  ClientAPIAccessDeniedExit()
@@ -22115,7 +22120,7 @@ def _infoPeople(users, entityType, source):
22115
22120
  except GAPI.invalidArgument as e:
22116
22121
  entityActionFailedWarning([entityType, user, peopleEntityType, resourceName], str(e), j, jcount)
22117
22122
  continue
22118
- except GAPI.permissionDenied as e:
22123
+ except (GAPI.permissionDenied, GAPI.failedPrecondition) as e:
22119
22124
  ClientAPIAccessDeniedExit(str(e))
22120
22125
  except (GAPI.serviceNotAvailable, GAPI.forbidden):
22121
22126
  ClientAPIAccessDeniedExit()
@@ -22530,7 +22535,7 @@ def _printShowPeople(source):
22530
22535
  pageSize=GC.Values[GC.PEOPLE_MAX_RESULTS],
22531
22536
  sources=sources, mergeSources=mergeSources,
22532
22537
  readMask=fields, fields='nextPageToken,people', **kwargs)
22533
- except GAPI.permissionDenied as e:
22538
+ except (GAPI.permissionDenied, GAPI.failedPrecondition) as e:
22534
22539
  ClientAPIAccessDeniedExit(str(e))
22535
22540
  except (GAPI.serviceNotAvailable, GAPI.forbidden):
22536
22541
  ClientAPIAccessDeniedExit()
@@ -22569,14 +22574,14 @@ def doInfoDomainPeopleContacts():
22569
22574
  # [countsonly]
22570
22575
  # [allfields|(fields <PeopleFieldNameList>)] [showmetadata]
22571
22576
  # [formatjson]
22572
- # gam print peoplecontacts [todrive <ToDriveAttribute>*]
22577
+ # gam print domaincontacts|peoplecontacts [todrive <ToDriveAttribute>*]
22573
22578
  # [sources <PeopleSourceName>]
22574
22579
  # [query <String>]
22575
22580
  # [mergesources <PeopleMergeSourceName>]
22576
22581
  # [countsonly]
22577
22582
  # [allfields|(fields <PeopleFieldNameList>)] [showmetadata]
22578
22583
  # [formatjson [quotechar <Character>]]
22579
- # gam show peoplecontacts
22584
+ # gam show domaincontacts|peoplecontacts
22580
22585
  # [sources <PeopleSourceName>]
22581
22586
  # [query <String>]
22582
22587
  # [mergesources <PeopleMergeSourceName>]
@@ -22652,7 +22657,7 @@ def printShowUserPeopleProfiles(users):
22652
22657
  except GAPI.notFound:
22653
22658
  entityUnknownWarning(Ent.PEOPLE_PROFILE, user, i, count)
22654
22659
  continue
22655
- except GAPI.permissionDenied as e:
22660
+ except (GAPI.permissionDenied, GAPI.failedPrecondition) as e:
22656
22661
  ClientAPIAccessDeniedExit(str(e))
22657
22662
  except (GAPI.serviceNotAvailable, GAPI.forbidden):
22658
22663
  ClientAPIAccessDeniedExit()
@@ -22808,7 +22813,7 @@ def _processPeopleContactPhotos(users, function):
22808
22813
  entityDoesNotHaveItemWarning([entityType, user, peopleEntityType, resourceName, Ent.PHOTO, filename], j, jcount)
22809
22814
  except (GAPI.invalidArgument, OSError, IOError) as e:
22810
22815
  entityActionFailedWarning([entityType, user, peopleEntityType, resourceName, Ent.PHOTO, filename], str(e), j, jcount)
22811
- except GAPI.permissionDenied as e:
22816
+ except (GAPI.permissionDenied, GAPI.failedPrecondition) as e:
22812
22817
  ClientAPIAccessDeniedExit(str(e))
22813
22818
  except (GAPI.serviceNotAvailable, GAPI.forbidden):
22814
22819
  ClientAPIAccessDeniedExit()
@@ -34182,7 +34187,7 @@ def doPrintGroupMembers():
34182
34187
  for name in info['names']:
34183
34188
  if name['metadata']['source']['type'] == sourceType:
34184
34189
  return name['displayName']
34185
- except (GAPI.notFound, GAPI.serviceNotAvailable, GAPI.forbidden, GAPI.permissionDenied):
34190
+ except (GAPI.notFound, GAPI.serviceNotAvailable, GAPI.forbidden, GAPI.permissionDenied, GAPI.failedPrecondition):
34186
34191
  pass
34187
34192
  return unknownName
34188
34193
 
@@ -35729,10 +35734,16 @@ def _showPolicies(policies, FJQC, add_warnings, no_appnames,
35729
35734
  _showPolicy(policy, FJQC, i, count)
35730
35735
  Ind.Decrement()
35731
35736
 
35737
+ def _checkPoliciesWithDASA():
35738
+ if GC.Values[GC.ENABLE_DASA]:
35739
+ systemErrorExit(USAGE_ERROR_RC,
35740
+ Msg.COMMAND_NOT_COMPATIBLE_WITH_ENABLE_DASA.format(Act.ToPerform().lower(), Cmd.ARG_CIPOLICIES))
35741
+
35732
35742
  # gam info policies <CIPolicyNameEntity>
35733
35743
  # [nowarnings] [noappnames]
35734
35744
  # [formatjson]
35735
35745
  def doInfoCIPolicies():
35746
+ _checkPoliciesWithDASA()
35736
35747
  groups_ci = buildGAPIObject(API.CLOUDIDENTITY_GROUPS)
35737
35748
  ci = buildGAPIObject(API.CLOUDIDENTITY_POLICY)
35738
35749
  cd = buildGAPIObject(API.DIRECTORY)
@@ -35791,6 +35802,7 @@ def doPrintShowCIPolicies():
35791
35802
  ensure_ascii=False,
35792
35803
  sort_keys=True)})
35793
35804
 
35805
+ _checkPoliciesWithDASA()
35794
35806
  groups_ci = buildGAPIObject(API.CLOUDIDENTITY_GROUPS)
35795
35807
  ci = buildGAPIObject(API.CLOUDIDENTITY_POLICY)
35796
35808
  cd = buildGAPIObject(API.DIRECTORY)
@@ -39054,7 +39066,8 @@ def _updateCalendarEvents(origUser, user, origCal, calIds, count, calendarEventE
39054
39066
  event = callGAPI(cal.events(), 'patch',
39055
39067
  throwReasons=GAPI.CALENDAR_THROW_REASONS+[GAPI.NOT_FOUND, GAPI.DELETED, GAPI.FORBIDDEN,
39056
39068
  GAPI.INVALID, GAPI.REQUIRED, GAPI.TIME_RANGE_EMPTY, GAPI.EVENT_DURATION_EXCEEDS_LIMIT,
39057
- GAPI.REQUIRED_ACCESS_LEVEL, GAPI.CANNOT_CHANGE_ORGANIZER_OF_INSTANCE],
39069
+ GAPI.REQUIRED_ACCESS_LEVEL, GAPI.CANNOT_CHANGE_ORGANIZER_OF_INSTANCE,
39070
+ GAPI.MALFORMED_WORKING_LOCATION_EVENT],
39058
39071
  calendarId=calId, eventId=eventId, conferenceDataVersion=1, sendUpdates=parameters['sendUpdates'], supportsAttachments=True,
39059
39072
  body=body, fields=pfields)
39060
39073
  if parameters['csvPF'] is None:
@@ -39069,7 +39082,7 @@ def _updateCalendarEvents(origUser, user, origCal, calIds, count, calendarEventE
39069
39082
  break
39070
39083
  entityActionFailedWarning([Ent.CALENDAR, calId, Ent.EVENT, eventId], str(e), j, jcount)
39071
39084
  except (GAPI.forbidden, GAPI.invalid, GAPI.required, GAPI.timeRangeEmpty, GAPI.eventDurationExceedsLimit,
39072
- GAPI.requiredAccessLevel, GAPI.cannotChangeOrganizerOfInstance) as e:
39085
+ GAPI.requiredAccessLevel, GAPI.cannotChangeOrganizerOfInstance, GAPI.malformedWorkingLocationEvent) as e:
39073
39086
  entityActionFailedWarning([Ent.CALENDAR, calId, Ent.EVENT, eventId], str(e), j, jcount)
39074
39087
  except GAPI.notACalendarUser:
39075
39088
  userCalServiceNotEnabledWarning(calId, i, count)
@@ -40378,20 +40391,20 @@ def convertExportNameToID(v, nameOrId, matterId, matterNameId):
40378
40391
  if cg:
40379
40392
  try:
40380
40393
  export = callGAPI(v.matters().exports(), 'get',
40381
- throwReasons=[GAPI.NOT_FOUND, GAPI.BAD_REQUEST, GAPI.FORBIDDEN],
40394
+ throwReasons=[GAPI.NOT_FOUND, GAPI.BAD_REQUEST, GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
40382
40395
  matterId=matterId, exportId=cg.group(1))
40383
40396
  return (export['id'], export['name'], formatVaultNameId(export['id'], export['name']))
40384
40397
  except (GAPI.notFound, GAPI.badRequest):
40385
40398
  entityDoesNotHaveItemExit([Ent.VAULT_MATTER, matterNameId, Ent.VAULT_EXPORT, nameOrId])
40386
- except GAPI.forbidden:
40387
- ClientAPIAccessDeniedExit()
40399
+ except (GAPI.forbidden, GAPI.invalidArgument) as e:
40400
+ ClientAPIAccessDeniedExit(str(e))
40388
40401
  nameOrIdlower = nameOrId.lower()
40389
40402
  try:
40390
40403
  exports = callGAPIpages(v.matters().exports(), 'list', 'exports',
40391
- throwReasons=[GAPI.FORBIDDEN],
40404
+ throwReasons=[GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
40392
40405
  matterId=matterId, fields='exports(id,name),nextPageToken')
40393
- except GAPI.forbidden:
40394
- ClientAPIAccessDeniedExit()
40406
+ except (GAPI.forbidden, GAPI.invalidArgument) as e:
40407
+ ClientAPIAccessDeniedExit(str(e))
40395
40408
  for export in exports:
40396
40409
  if export['name'].lower() == nameOrIdlower:
40397
40410
  return (export['id'], export['name'], formatVaultNameId(export['id'], export['name']))
@@ -40402,20 +40415,20 @@ def convertHoldNameToID(v, nameOrId, matterId, matterNameId):
40402
40415
  if cg:
40403
40416
  try:
40404
40417
  hold = callGAPI(v.matters().holds(), 'get',
40405
- throwReasons=[GAPI.NOT_FOUND, GAPI.BAD_REQUEST, GAPI.FORBIDDEN],
40418
+ throwReasons=[GAPI.NOT_FOUND, GAPI.BAD_REQUEST, GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
40406
40419
  matterId=matterId, holdId=cg.group(1))
40407
40420
  return (hold['holdId'], hold['name'], formatVaultNameId(hold['holdId'], hold['name']))
40408
40421
  except (GAPI.notFound, GAPI.badRequest):
40409
40422
  entityDoesNotHaveItemExit([Ent.VAULT_MATTER, matterNameId, Ent.VAULT_HOLD, nameOrId])
40410
- except GAPI.forbidden:
40411
- ClientAPIAccessDeniedExit()
40423
+ except (GAPI.forbidden, GAPI.invalidArgument) as e:
40424
+ ClientAPIAccessDeniedExit(str(e))
40412
40425
  nameOrIdlower = nameOrId.lower()
40413
40426
  try:
40414
40427
  holds = callGAPIpages(v.matters().holds(), 'list', 'holds',
40415
- throwReasons=[GAPI.FORBIDDEN],
40428
+ throwReasons=[GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
40416
40429
  matterId=matterId, fields='holds(holdId,name),nextPageToken')
40417
- except GAPI.forbidden:
40418
- ClientAPIAccessDeniedExit()
40430
+ except (GAPI.forbidden, GAPI.invalidArgument) as e:
40431
+ ClientAPIAccessDeniedExit(str(e))
40419
40432
  for hold in holds:
40420
40433
  if hold['name'].lower() == nameOrIdlower:
40421
40434
  return (hold['holdId'], hold['name'], formatVaultNameId(hold['holdId'], hold['name']))
@@ -40426,17 +40439,17 @@ def convertMatterNameToID(v, nameOrId, state=None):
40426
40439
  if cg:
40427
40440
  try:
40428
40441
  matter = callGAPI(v.matters(), 'get',
40429
- throwReasons=[GAPI.NOT_FOUND, GAPI.FORBIDDEN],
40442
+ throwReasons=[GAPI.NOT_FOUND, GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
40430
40443
  matterId=cg.group(1), view='BASIC', fields='matterId,name,state')
40431
40444
  return (matter['matterId'], matter['name'], formatVaultNameId(matter['name'], matter['matterId']), matter['state'])
40432
40445
  except (GAPI.notFound, GAPI.forbidden):
40433
40446
  entityDoesNotExistExit(Ent.VAULT_MATTER, nameOrId)
40434
40447
  try:
40435
40448
  matters = callGAPIpages(v.matters(), 'list', 'matters',
40436
- throwReasons=[GAPI.FORBIDDEN],
40449
+ throwReasons=[GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
40437
40450
  view='BASIC', state=state, fields='matters(matterId,name,state),nextPageToken')
40438
- except GAPI.forbidden:
40439
- ClientAPIAccessDeniedExit()
40451
+ except (GAPI.forbidden, GAPI.invalidArgument) as e:
40452
+ ClientAPIAccessDeniedExit(str(e))
40440
40453
  nameOrIdlower = nameOrId.lower()
40441
40454
  ids = []
40442
40455
  states = []
@@ -40457,20 +40470,20 @@ def convertQueryNameToID(v, nameOrId, matterId, matterNameId):
40457
40470
  if cg:
40458
40471
  try:
40459
40472
  query = callGAPI(v.matters().savedQueries(), 'get',
40460
- throwReasons=[GAPI.NOT_FOUND, GAPI.BAD_REQUEST, GAPI.FORBIDDEN],
40473
+ throwReasons=[GAPI.NOT_FOUND, GAPI.BAD_REQUEST, GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
40461
40474
  matterId=matterId, savedQueryId=cg.group(1))
40462
40475
  return (query['savedQueryId'], query['displayName'], formatVaultNameId(query['savedQueryId'], query['displayName']))
40463
40476
  except (GAPI.notFound, GAPI.badRequest):
40464
40477
  entityDoesNotHaveItemExit([Ent.VAULT_MATTER, matterNameId, Ent.VAULT_QUERY, nameOrId])
40465
- except GAPI.forbidden:
40466
- ClientAPIAccessDeniedExit()
40478
+ except (GAPI.forbidden, GAPI.invalidArgument) as e:
40479
+ ClientAPIAccessDeniedExit(str(e))
40467
40480
  nameOrIdlower = nameOrId.lower()
40468
40481
  try:
40469
40482
  queries = callGAPIpages(v.matters().savedQueries(), 'list', 'savedQueries',
40470
- throwReasons=[GAPI.FORBIDDEN],
40483
+ throwReasons=[GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
40471
40484
  matterId=matterId, fields='savedQueries(savedQueryId,displayName),nextPageToken')
40472
- except GAPI.forbidden:
40473
- ClientAPIAccessDeniedExit()
40485
+ except (GAPI.forbidden, GAPI.invalidArgument) as e:
40486
+ ClientAPIAccessDeniedExit(str(e))
40474
40487
  for query in queries:
40475
40488
  if query['displayName'].lower() == nameOrIdlower:
40476
40489
  return (query['savedQueryId'], query['displayName'], formatVaultNameId(query['savedQueryId'], query['displayName']))
@@ -40484,9 +40497,9 @@ def warnMatterNotOpen(v, matter, matterNameId, j, jcount):
40484
40497
  if v is not None:
40485
40498
  try:
40486
40499
  matter['state'] = callGAPI(v.matters(), 'get',
40487
- throwReasons=[GAPI.NOT_FOUND, GAPI.FORBIDDEN],
40500
+ throwReasons=[GAPI.NOT_FOUND, GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
40488
40501
  matterId=matter['matterId'], view='BASIC', fields='state')['state']
40489
- except (GAPI.notFound, GAPI.forbidden):
40502
+ except (GAPI.notFound, GAPI.forbidden, GAPI.invalidArgument):
40490
40503
  matter['state'] = 'Unknown'
40491
40504
  else:
40492
40505
  setSysExitRC(DATA_NOT_AVALIABLE_RC)
@@ -40802,10 +40815,10 @@ def doDeleteVaultExport():
40802
40815
  unknownArgumentExit()
40803
40816
  try:
40804
40817
  callGAPI(v.matters().exports(), 'delete',
40805
- throwReasons=[GAPI.NOT_FOUND, GAPI.BAD_REQUEST, GAPI.FORBIDDEN],
40818
+ throwReasons=[GAPI.NOT_FOUND, GAPI.BAD_REQUEST, GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
40806
40819
  matterId=matterId, exportId=exportId)
40807
40820
  entityActionPerformed([Ent.VAULT_MATTER, matterNameId, Ent.VAULT_EXPORT, exportNameId])
40808
- except (GAPI.notFound, GAPI.badRequest, GAPI.forbidden) as e:
40821
+ except (GAPI.notFound, GAPI.badRequest, GAPI.forbidden, GAPI.invalidArgument) as e:
40809
40822
  entityActionFailedWarning([Ent.VAULT_MATTER, matterNameId, Ent.VAULT_EXPORT, exportNameId], str(e))
40810
40823
 
40811
40824
  VAULT_EXPORT_FIELDS_CHOICE_MAP = {
@@ -40856,10 +40869,10 @@ def doInfoVaultExport():
40856
40869
  fields = getFieldsFromFieldsList(fieldsList)
40857
40870
  try:
40858
40871
  export = callGAPI(v.matters().exports(), 'get',
40859
- throwReasons=[GAPI.NOT_FOUND, GAPI.BAD_REQUEST, GAPI.FORBIDDEN],
40872
+ throwReasons=[GAPI.NOT_FOUND, GAPI.BAD_REQUEST, GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
40860
40873
  matterId=matterId, exportId=exportId, fields=fields)
40861
40874
  _showVaultExport(matterNameId, export, cd, FJQC)
40862
- except (GAPI.notFound, GAPI.badRequest, GAPI.forbidden) as e:
40875
+ except (GAPI.notFound, GAPI.badRequest, GAPI.forbidden, GAPI.invalidArgument) as e:
40863
40876
  entityActionFailedWarning([Ent.VAULT_MATTER, matterNameId, Ent.VAULT_EXPORT, exportNameId], str(e))
40864
40877
 
40865
40878
  VAULT_EXPORT_STATUS_MAP = {'completed': 'COMPLETED', 'failed': 'FAILED', 'inprogress': 'IN_PROGRESS'}
@@ -40922,9 +40935,9 @@ def doPrintShowVaultExports():
40922
40935
  try:
40923
40936
  results = callGAPIpages(v.matters(), 'list', 'matters',
40924
40937
  pageMessage=getPageMessage(),
40925
- throwReasons=[GAPI.FORBIDDEN],
40938
+ throwReasons=[GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
40926
40939
  view='BASIC', state='OPEN', fields='matters(matterId,name,state),nextPageToken')
40927
- except GAPI.forbidden as e:
40940
+ except (GAPI.forbidden, GAPI.invalidArgument) as e:
40928
40941
  entityActionFailedWarning([Ent.VAULT_EXPORT, None], str(e))
40929
40942
  return
40930
40943
  else:
@@ -40952,12 +40965,12 @@ def doPrintShowVaultExports():
40952
40965
  try:
40953
40966
  exports = callGAPIpages(v.matters().exports(), 'list', 'exports',
40954
40967
  pageMessage=pageMessage,
40955
- throwReasons=[GAPI.FAILED_PRECONDITION, GAPI.FORBIDDEN],
40968
+ throwReasons=[GAPI.FAILED_PRECONDITION, GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
40956
40969
  matterId=matterId, fields=fields)
40957
40970
  except GAPI.failedPrecondition:
40958
40971
  warnMatterNotOpen(v, matter, matterNameId, j, jcount)
40959
40972
  continue
40960
- except GAPI.forbidden as e:
40973
+ except (GAPI.forbidden, GAPI.invalidArgument) as e:
40961
40974
  entityActionFailedWarning([Ent.VAULT_EXPORT, None], str(e))
40962
40975
  break
40963
40976
  else:
@@ -41052,9 +41065,9 @@ def doCopyVaultExport():
41052
41065
  while True:
41053
41066
  try:
41054
41067
  export = callGAPI(v.matters().exports(), 'get',
41055
- throwReasons=[GAPI.NOT_FOUND, GAPI.BAD_REQUEST, GAPI.FORBIDDEN],
41068
+ throwReasons=[GAPI.NOT_FOUND, GAPI.BAD_REQUEST, GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
41056
41069
  matterId=matterId, exportId=exportId)
41057
- except (GAPI.notFound, GAPI.badRequest, GAPI.forbidden) as e:
41070
+ except (GAPI.notFound, GAPI.badRequest, GAPI.forbidden, GAPI.invalidArgument) as e:
41058
41071
  entityActionFailedWarning([Ent.VAULT_MATTER, matterNameId, Ent.VAULT_EXPORT, exportNameId], str(e))
41059
41072
  return
41060
41073
  if export['status'] == 'COMPLETED':
@@ -41152,9 +41165,9 @@ def doDownloadVaultExport():
41152
41165
  while True:
41153
41166
  try:
41154
41167
  export = callGAPI(v.matters().exports(), 'get',
41155
- throwReasons=[GAPI.NOT_FOUND, GAPI.BAD_REQUEST, GAPI.FORBIDDEN],
41168
+ throwReasons=[GAPI.NOT_FOUND, GAPI.BAD_REQUEST, GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
41156
41169
  matterId=matterId, exportId=exportId)
41157
- except (GAPI.notFound, GAPI.badRequest, GAPI.forbidden) as e:
41170
+ except (GAPI.notFound, GAPI.badRequest, GAPI.forbidden, GAPI.invalidArgument) as e:
41158
41171
  entityActionFailedWarning([Ent.VAULT_MATTER, matterNameId, Ent.VAULT_EXPORT, exportNameId], str(e))
41159
41172
  return
41160
41173
  if export['status'] == 'COMPLETED':
@@ -41342,7 +41355,8 @@ def doCreateVaultHold():
41342
41355
  body['accounts'].append({'accountId': convertEmailAddressToUID(account, cd, accountType, accountsLocation)})
41343
41356
  try:
41344
41357
  hold = callGAPI(v.matters().holds(), 'create',
41345
- throwReasons=[GAPI.ALREADY_EXISTS, GAPI.BAD_REQUEST, GAPI.BACKEND_ERROR, GAPI.FAILED_PRECONDITION, GAPI.FORBIDDEN],
41358
+ throwReasons=[GAPI.ALREADY_EXISTS, GAPI.BAD_REQUEST, GAPI.BACKEND_ERROR, GAPI.FAILED_PRECONDITION,
41359
+ GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
41346
41360
  matterId=matterId, body=body)
41347
41361
  if not returnIdOnly:
41348
41362
  entityActionPerformed([Ent.VAULT_MATTER, matterNameId, Ent.VAULT_HOLD, formatVaultNameId(hold['name'], hold['holdId'])])
@@ -41350,7 +41364,8 @@ def doCreateVaultHold():
41350
41364
  _showVaultHold(None, hold, None, None)
41351
41365
  else:
41352
41366
  writeStdout(f'{hold["holdId"]}\n')
41353
- except (GAPI.alreadyExists, GAPI.badRequest, GAPI.backendError, GAPI.failedPrecondition, GAPI.forbidden) as e:
41367
+ except (GAPI.alreadyExists, GAPI.badRequest, GAPI.backendError, GAPI.failedPrecondition,
41368
+ GAPI.forbidden, GAPI.invalidArgument) as e:
41354
41369
  entityActionFailedWarning([Ent.VAULT_MATTER, matterNameId, Ent.VAULT_HOLD, body.get('name')], str(e))
41355
41370
 
41356
41371
  # gam update vaulthold|hold <HoldItem> matter <MatterItem>
@@ -41395,9 +41410,9 @@ def doUpdateVaultHold():
41395
41410
  missingArgumentExit('matter')
41396
41411
  try:
41397
41412
  old_body = callGAPI(v.matters().holds(), 'get',
41398
- throwReasons=[GAPI.NOT_FOUND, GAPI.BAD_REQUEST, GAPI.FORBIDDEN],
41413
+ throwReasons=[GAPI.NOT_FOUND, GAPI.BAD_REQUEST, GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
41399
41414
  matterId=matterId, holdId=holdId, fields='name,corpus,query,orgUnit')
41400
- except (GAPI.notFound, GAPI.badRequest, GAPI.forbidden) as e:
41415
+ except (GAPI.notFound, GAPI.badRequest, GAPI.forbidden, GAPI.invalidArgument) as e:
41401
41416
  entityActionFailedWarning([Ent.VAULT_MATTER, matterNameId, Ent.VAULT_HOLD, holdNameId], str(e))
41402
41417
  return
41403
41418
  accountType = 'group' if old_body['corpus'] == 'GROUPS' else 'user'
@@ -41423,10 +41438,10 @@ def doUpdateVaultHold():
41423
41438
  if body:
41424
41439
  try:
41425
41440
  hold = callGAPI(v.matters().holds(), 'update',
41426
- throwReasons=[GAPI.NOT_FOUND, GAPI.BAD_REQUEST, GAPI.FORBIDDEN],
41441
+ throwReas=[GAPI.NOT_FOUND, GAPI.BAD_REQUEST, GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
41427
41442
  matterId=matterId, holdId=holdId, body=body)
41428
41443
  entityActionPerformed([Ent.VAULT_MATTER, matterNameId, Ent.VAULT_HOLD, holdNameId])
41429
- except (GAPI.notFound, GAPI.badRequest, GAPI.forbidden) as e:
41444
+ except (GAPI.notFound, GAPI.badRequest, GAPI.forbidden, GAPI.invalidArgument) as e:
41430
41445
  entityActionFailedWarning([Ent.VAULT_MATTER, matterNameId, Ent.VAULT_HOLD, holdNameId], str(e))
41431
41446
  return
41432
41447
  jcount = len(addAccountIds)
@@ -41439,12 +41454,12 @@ def doUpdateVaultHold():
41439
41454
  j += 1
41440
41455
  try:
41441
41456
  callGAPI(v.matters().holds().accounts(), 'create',
41442
- throwReasons=[GAPI.ALREADY_EXISTS, GAPI.BACKEND_ERROR, GAPI.FORBIDDEN],
41457
+ throwReasons=[GAPI.ALREADY_EXISTS, GAPI.BACKEND_ERROR, GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
41443
41458
  matterId=matterId, holdId=holdId, body={'accountId': account['id']})
41444
41459
  entityActionPerformed([Ent.VAULT_MATTER, matterNameId, Ent.VAULT_HOLD, holdNameId, Ent.ACCOUNT, account['email']], j, jcount)
41445
41460
  except (GAPI.alreadyExists, GAPI.backendError) as e:
41446
41461
  entityActionFailedWarning([Ent.VAULT_MATTER, matterNameId, Ent.VAULT_HOLD, holdNameId, Ent.ACCOUNT, account['email']], str(e), j, jcount)
41447
- except GAPI.forbidden as e:
41462
+ except (GAPI.forbidden, GAPI.invalidArgument) as e:
41448
41463
  entityActionFailedWarning([Ent.VAULT_MATTER, matterNameId, Ent.VAULT_HOLD, None], str(e))
41449
41464
  return
41450
41465
  Ind.Decrement()
@@ -41460,12 +41475,12 @@ def doUpdateVaultHold():
41460
41475
  j += 1
41461
41476
  try:
41462
41477
  callGAPI(v.matters().holds().accounts(), 'delete',
41463
- throwReasons=[GAPI.NOT_FOUND, GAPI.BACKEND_ERROR, GAPI.FORBIDDEN],
41478
+ throwReasons=[GAPI.NOT_FOUND, GAPI.BACKEND_ERROR, GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
41464
41479
  matterId=matterId, holdId=holdId, accountId=account['id'])
41465
41480
  entityActionPerformed([Ent.VAULT_MATTER, matterNameId, Ent.VAULT_HOLD, holdNameId, Ent.ACCOUNT, account['email']], j, jcount)
41466
41481
  except (GAPI.alreadyExists, GAPI.backendError) as e:
41467
41482
  entityActionFailedWarning([Ent.VAULT_MATTER, matterNameId, Ent.VAULT_HOLD, holdNameId, Ent.ACCOUNT, account['email']], str(e), j, jcount)
41468
- except GAPI.forbidden as e:
41483
+ except (GAPI.forbidden, GAPI.invalidArgument) as e:
41469
41484
  entityActionFailedWarning([Ent.VAULT_MATTER, matterNameId, Ent.VAULT_HOLD, None], str(e))
41470
41485
  return
41471
41486
  Ind.Decrement()
@@ -41490,10 +41505,10 @@ def doDeleteVaultHold():
41490
41505
  unknownArgumentExit()
41491
41506
  try:
41492
41507
  callGAPI(v.matters().holds(), 'delete',
41493
- throwReasons=[GAPI.NOT_FOUND, GAPI.BAD_REQUEST, GAPI.FORBIDDEN],
41508
+ throwReasons=[GAPI.NOT_FOUND, GAPI.BAD_REQUEST, GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
41494
41509
  matterId=matterId, holdId=holdId)
41495
41510
  entityActionPerformed([Ent.VAULT_MATTER, matterNameId, Ent.VAULT_HOLD, holdNameId])
41496
- except (GAPI.notFound, GAPI.badRequest, GAPI.forbidden) as e:
41511
+ except (GAPI.notFound, GAPI.badRequest, GAPI.forbidden, GAPI.invalidArgument) as e:
41497
41512
  entityActionFailedWarning([Ent.VAULT_MATTER, matterNameId, Ent.VAULT_HOLD, holdNameId], str(e))
41498
41513
 
41499
41514
  VAULT_HOLD_FIELDS_CHOICE_MAP = {
@@ -41543,10 +41558,10 @@ def doInfoVaultHold():
41543
41558
  fields = getFieldsFromFieldsList(fieldsList)
41544
41559
  try:
41545
41560
  hold = callGAPI(v.matters().holds(), 'get',
41546
- throwReasons=[GAPI.NOT_FOUND, GAPI.BAD_REQUEST, GAPI.FORBIDDEN],
41561
+ throwReasons=[GAPI.NOT_FOUND, GAPI.BAD_REQUEST, GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
41547
41562
  matterId=matterId, holdId=holdId, fields=fields)
41548
41563
  _showVaultHold(matterNameId, hold, cd, FJQC)
41549
- except (GAPI.notFound, GAPI.badRequest, GAPI.forbidden) as e:
41564
+ except (GAPI.notFound, GAPI.badRequest, GAPI.forbidden, GAPI.invalidArgument) as e:
41550
41565
  entityActionFailedWarning([Ent.VAULT_MATTER, matterNameId, Ent.VAULT_HOLD, holdNameId], str(e))
41551
41566
 
41552
41567
  PRINT_VAULT_HOLDS_TITLES = ['matterId', 'matterName', 'holdId', 'name', 'updateTime']
@@ -41597,9 +41612,9 @@ def doPrintShowVaultHolds():
41597
41612
  try:
41598
41613
  results = callGAPIpages(v.matters(), 'list', 'matters',
41599
41614
  pageMessage=getPageMessage(),
41600
- throwReasons=[GAPI.FORBIDDEN],
41615
+ throwReasons=[GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
41601
41616
  view='BASIC', state='OPEN', fields='matters(matterId,name,state),nextPageToken')
41602
- except GAPI.forbidden as e:
41617
+ except (GAPI.forbidden, GAPI.invalidArgument) as e:
41603
41618
  entityActionFailedWarning([Ent.VAULT_HOLD, None], str(e))
41604
41619
  return
41605
41620
  else:
@@ -41626,12 +41641,12 @@ def doPrintShowVaultHolds():
41626
41641
  try:
41627
41642
  holds = callGAPIpages(v.matters().holds(), 'list', 'holds',
41628
41643
  pageMessage=pageMessage,
41629
- throwReasons=[GAPI.FAILED_PRECONDITION, GAPI.FORBIDDEN],
41644
+ throwReasons=[GAPI.FAILED_PRECONDITION, GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
41630
41645
  matterId=matterId, fields=fields)
41631
41646
  except GAPI.failedPrecondition:
41632
41647
  warnMatterNotOpen(v, matter, matterNameId, j, jcount)
41633
41648
  continue
41634
- except GAPI.forbidden as e:
41649
+ except (GAPI.forbidden, GAPI.invalidArgument) as e:
41635
41650
  entityActionFailedWarning([Ent.VAULT_HOLD, None], str(e))
41636
41651
  break
41637
41652
  else:
@@ -41677,9 +41692,9 @@ def printShowUserVaultHolds(entityList):
41677
41692
  try:
41678
41693
  matters = callGAPIpages(v.matters(), 'list', 'matters',
41679
41694
  pageMessage=getPageMessage(),
41680
- throwReasons=[GAPI.FORBIDDEN],
41695
+ throwReasons=[GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
41681
41696
  view='BASIC', state='OPEN', fields='matters(matterId,name,state),nextPageToken')
41682
- except GAPI.forbidden as e:
41697
+ except (GAPI.forbidden, GAPI.invalidArgument) as e:
41683
41698
  entityActionFailedWarning([Ent.VAULT_HOLD, None], str(e))
41684
41699
  return
41685
41700
  jcount = len(matters)
@@ -41693,11 +41708,11 @@ def printShowUserVaultHolds(entityList):
41693
41708
  try:
41694
41709
  matter['holds'] = callGAPIpages(v.matters().holds(), 'list', 'holds',
41695
41710
  pageMessage=getPageMessageForWhom(),
41696
- throwReasons=[GAPI.FAILED_PRECONDITION, GAPI.FORBIDDEN],
41711
+ throwReasons=[GAPI.FAILED_PRECONDITION, GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
41697
41712
  matterId=matterId, fields='holds(holdId,name,accounts(accountId,email),orgUnit(orgUnitId)),nextPageToken')
41698
41713
  except GAPI.failedPrecondition:
41699
41714
  warnMatterNotOpen(v, matter, matterNameId, j, jcount)
41700
- except GAPI.forbidden as e:
41715
+ except (GAPI.forbidden, GAPI.invalidArgument) as e:
41701
41716
  entityActionFailedWarning([Ent.VAULT_HOLD, None], str(e), j, jcount)
41702
41717
  totalHolds = 0
41703
41718
  _, _, entityList = getEntityArgument(entityList)
@@ -41808,10 +41823,10 @@ def doInfoVaultQuery():
41808
41823
  fields = getFieldsFromFieldsList(fieldsList)
41809
41824
  try:
41810
41825
  query = callGAPI(v.matters().savedQueries(), 'get',
41811
- throwReasons=[GAPI.NOT_FOUND, GAPI.BAD_REQUEST, GAPI.FORBIDDEN],
41826
+ throwReasons=[GAPI.NOT_FOUND, GAPI.BAD_REQUEST, GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
41812
41827
  matterId=matterId, savedQueryId=queryId, fields=fields)
41813
41828
  _showVaultQuery(matterNameId, query, cd, FJQC)
41814
- except (GAPI.notFound, GAPI.badRequest, GAPI.forbidden) as e:
41829
+ except (GAPI.notFound, GAPI.badRequest, GAPI.forbidden, GAPI.invalidArgument) as e:
41815
41830
  entityActionFailedWarning([Ent.VAULT_MATTER, matterNameId, Ent.VAULT_QUERY, queryNameId], str(e))
41816
41831
 
41817
41832
  PRINT_VAULT_QUERIES_TITLES = ['matterId', 'matterName', 'savedQueryId', 'displayName']
@@ -41852,9 +41867,9 @@ def doPrintShowVaultQueries():
41852
41867
  try:
41853
41868
  results = callGAPIpages(v.matters(), 'list', 'matters',
41854
41869
  pageMessage=getPageMessage(),
41855
- throwReasons=[GAPI.FORBIDDEN],
41870
+ throwReasons=[GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
41856
41871
  view='BASIC', state='OPEN', fields='matters(matterId,name,state),nextPageToken')
41857
- except GAPI.forbidden as e:
41872
+ except (GAPI.forbidden, GAPI.invalidArgument) as e:
41858
41873
  entityActionFailedWarning([Ent.VAULT_QUERY, None], str(e))
41859
41874
  return
41860
41875
  else:
@@ -41881,12 +41896,12 @@ def doPrintShowVaultQueries():
41881
41896
  try:
41882
41897
  queries = callGAPIpages(v.matters().savedQueries(), 'list', 'savedQueries',
41883
41898
  pageMessage=pageMessage,
41884
- throwReasons=[GAPI.FAILED_PRECONDITION, GAPI.FORBIDDEN],
41899
+ throwReasons=[GAPI.FAILED_PRECONDITION, GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
41885
41900
  matterId=matterId, fields=fields)
41886
41901
  except GAPI.failedPrecondition:
41887
41902
  warnMatterNotOpen(v, matter, matterNameId, j, jcount)
41888
41903
  continue
41889
- except GAPI.forbidden as e:
41904
+ except (GAPI.forbidden, GAPI.invalidArgument) as e:
41890
41905
  entityActionFailedWarning([Ent.VAULT_QUERY, None], str(e))
41891
41906
  break
41892
41907
  else:
@@ -41973,7 +41988,7 @@ def doCreateVaultMatter():
41973
41988
  body['name'] = f'GAM Matter - {ISOformatTimeStamp(todaysTime())}'
41974
41989
  try:
41975
41990
  matter = callGAPI(v.matters(), 'create',
41976
- throwReasons=[GAPI.ALREADY_EXISTS, GAPI.FORBIDDEN],
41991
+ throwReasons=[GAPI.ALREADY_EXISTS, GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
41977
41992
  body=body)
41978
41993
  matterId = matter['matterId']
41979
41994
  matterNameId = formatVaultNameId(matter['name'], matterId)
@@ -41981,7 +41996,7 @@ def doCreateVaultMatter():
41981
41996
  entityActionPerformed([Ent.VAULT_MATTER, matterNameId])
41982
41997
  else:
41983
41998
  writeStdout(f'{matterId}\n')
41984
- except (GAPI.alreadyExists, GAPI.forbidden) as e:
41999
+ except (GAPI.alreadyExists, GAPI.forbidden, GAPI.invalidArgument) as e:
41985
42000
  entityActionFailedWarning([Ent.VAULT_MATTER, body['name']], str(e))
41986
42001
  return
41987
42002
  jcount = len(collaborators)
@@ -41996,11 +42011,11 @@ def doCreateVaultMatter():
41996
42011
  cbody['matterPermission']['accountId'] = collaborator['id']
41997
42012
  try:
41998
42013
  callGAPI(v.matters(), 'addPermissions',
41999
- throwReasons=[GAPI.FAILED_PRECONDITION, GAPI.FORBIDDEN],
42014
+ throwReasons=[GAPI.FAILED_PRECONDITION, GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
42000
42015
  matterId=matterId, body=cbody)
42001
42016
  if not returnIdOnly:
42002
42017
  entityActionPerformed([Ent.VAULT_MATTER, matterNameId, Ent.COLLABORATOR, collaborator['email']], j, jcount)
42003
- except (GAPI.failedPrecondition, GAPI.forbidden) as e:
42018
+ except (GAPI.failedPrecondition, GAPI.forbidden, GAPI.invalidArgument) as e:
42004
42019
  entityActionFailedWarning([Ent.VAULT_MATTER, matterNameId], str(e))
42005
42020
  break
42006
42021
  Ind.Decrement()
@@ -42024,10 +42039,10 @@ def doActionVaultMatter(action, matterId=None, matterNameId=None, v=None):
42024
42039
  action_kwargs = {} if action == 'delete' else {'body': {}}
42025
42040
  try:
42026
42041
  callGAPI(v.matters(), action,
42027
- throwReasons=[GAPI.NOT_FOUND, GAPI.FAILED_PRECONDITION, GAPI.FORBIDDEN],
42042
+ throwReasons=[GAPI.NOT_FOUND, GAPI.FAILED_PRECONDITION, GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
42028
42043
  matterId=matterId, **action_kwargs)
42029
42044
  entityActionPerformed([Ent.VAULT_MATTER, matterNameId])
42030
- except (GAPI.notFound, GAPI.failedPrecondition, GAPI.forbidden) as e:
42045
+ except (GAPI.notFound, GAPI.failedPrecondition, GAPI.forbidden, GAPI.invalidArgument) as e:
42031
42046
  entityActionFailedWarning([Ent.VAULT_MATTER, matterNameId], str(e))
42032
42047
 
42033
42048
  # gam close vaultmatter|matter <MatterItem>
@@ -42080,7 +42095,7 @@ def doUpdateVaultMatter():
42080
42095
  if 'name' not in body or 'description' not in body:
42081
42096
  # bah, API requires name/description to be sent on update even when it's not changing
42082
42097
  result = callGAPI(v.matters(), 'get',
42083
- throwReasons=[GAPI.NOT_FOUND, GAPI.FORBIDDEN],
42098
+ throwReasons=[GAPI.NOT_FOUND, GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
42084
42099
  matterId=matterId, view='BASIC')
42085
42100
  body.setdefault('name', result['name'])
42086
42101
  body.setdefault('description', result.get('description'))
@@ -42088,7 +42103,7 @@ def doUpdateVaultMatter():
42088
42103
  throwReasons=[GAPI.NOT_FOUND, GAPI.FAILED_PRECONDITION, GAPI.FORBIDDEN],
42089
42104
  matterId=matterId, body=body)
42090
42105
  entityActionPerformed([Ent.VAULT_MATTER, matterNameId])
42091
- except (GAPI.notFound, GAPI.failedPrecondition, GAPI.forbidden) as e:
42106
+ except (GAPI.notFound, GAPI.failedPrecondition, GAPI.forbidden, GAPI.invalidArgument) as e:
42092
42107
  entityActionFailedWarning([Ent.VAULT_MATTER, matterNameId], str(e))
42093
42108
  return
42094
42109
  jcount = len(addCollaborators)
@@ -42101,10 +42116,10 @@ def doUpdateVaultMatter():
42101
42116
  j += 1
42102
42117
  try:
42103
42118
  callGAPI(v.matters(), 'addPermissions',
42104
- throwReasons=[GAPI.FAILED_PRECONDITION, GAPI.FORBIDDEN],
42119
+ throwReasons=[GAPI.FAILED_PRECONDITION, GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
42105
42120
  matterId=matterId, body={'matterPermission': {'role': 'COLLABORATOR', 'accountId': collaborator['id']}})
42106
42121
  entityActionPerformed([Ent.VAULT_MATTER, matterNameId, Ent.COLLABORATOR, collaborator['email']], j, jcount)
42107
- except (GAPI.failedPrecondition, GAPI.forbidden) as e:
42122
+ except (GAPI.failedPrecondition, GAPI.forbidden, GAPI.invalidArgument) as e:
42108
42123
  entityActionFailedWarning([Ent.VAULT_MATTER, matterNameId], str(e))
42109
42124
  break
42110
42125
  Ind.Decrement()
@@ -42118,10 +42133,10 @@ def doUpdateVaultMatter():
42118
42133
  j += 1
42119
42134
  try:
42120
42135
  callGAPI(v.matters(), 'removePermissions',
42121
- throwReasons=[GAPI.FAILED_PRECONDITION, GAPI.FORBIDDEN],
42136
+ throwReasons=[GAPI.FAILED_PRECONDITION, GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
42122
42137
  matterId=matterId, body={'accountId': collaborator['id']})
42123
42138
  entityActionPerformed([Ent.VAULT_MATTER, matterNameId, Ent.COLLABORATOR, collaborator['email']], j, jcount)
42124
- except (GAPI.failedPrecondition, GAPI.forbidden) as e:
42139
+ except (GAPI.failedPrecondition, GAPI.forbidden, GAPI.invalidArgument) as e:
42125
42140
  entityActionFailedWarning([Ent.VAULT_MATTER, matterNameId], str(e))
42126
42141
  break
42127
42142
  Ind.Decrement()
@@ -42154,11 +42169,11 @@ def doInfoVaultMatter():
42154
42169
  fields = getFieldsFromFieldsList(fieldsList)
42155
42170
  try:
42156
42171
  matter = callGAPI(v.matters(), 'get',
42157
- throwReasons=[GAPI.NOT_FOUND, GAPI.FORBIDDEN],
42172
+ throwReasons=[GAPI.NOT_FOUND, GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
42158
42173
  matterId=matterId, view=view, fields=fields)
42159
42174
  cd = buildGAPIObject(API.DIRECTORY) if 'matterPermissions' in matter else None
42160
42175
  _showVaultMatter(matter, cd, FJQC)
42161
- except (GAPI.notFound, GAPI.forbidden) as e:
42176
+ except (GAPI.notFound, GAPI.forbidden, GAPI.invalidArgument) as e:
42162
42177
  entityActionFailedWarning([Ent.VAULT_MATTER, matterNameId], str(e))
42163
42178
 
42164
42179
  VAULT_MATTER_STATE_MAP = {'open': 'OPEN', 'closed': 'CLOSED', 'deleted': 'DELETED'}
@@ -42214,9 +42229,9 @@ def doPrintShowVaultMatters():
42214
42229
  try:
42215
42230
  matters = callGAPIpages(v.matters(), 'list', 'matters',
42216
42231
  pageMessage=getPageMessage(),
42217
- throwReasons=[GAPI.FORBIDDEN],
42232
+ throwReasons=[GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT, GAPI.INVALID_ARGUMENT],
42218
42233
  view=view, state=stateParm, fields=fields)
42219
- except GAPI.forbidden as e:
42234
+ except (GAPI.forbidden, GAPI.invalidArgument, GAPI.invalidArgument) as e:
42220
42235
  entityActionFailedWarning([Ent.VAULT_MATTER, None], str(e))
42221
42236
  return
42222
42237
  jcount = len(matters)
@@ -42407,6 +42422,8 @@ class PasswordOptions():
42407
42422
  self.makeCleanPassword = True
42408
42423
  self.cleanPasswordLen = 25
42409
42424
  self.randomPasswordChars = None
42425
+ self.promptForPassword = False
42426
+ self.promptForUniquePassword = False
42410
42427
  self.notifyPasswordSet = False
42411
42428
  self.updateCmd = updateCmd
42412
42429
  self.filename = ''
@@ -42453,7 +42470,7 @@ class PasswordOptions():
42453
42470
  self.makeCleanPassword = True
42454
42471
  notFoundBody[up] = self.CreateRandomPassword()
42455
42472
  self.notFoundPassword = notFoundBody[up]
42456
- elif myarg == 'lograndompassword':
42473
+ elif myarg in {'lograndompassword', 'logpassword'}:
42457
42474
  self.filename = getString(Cmd.OB_FILE_NAME)
42458
42475
  else:
42459
42476
  return False
@@ -42474,7 +42491,8 @@ class PasswordOptions():
42474
42491
  password = self.GetPassword()
42475
42492
  if password:
42476
42493
  body[up] = password
42477
- self.makeRandomPassword = self.makeUniqueRandomPassword = False
42494
+ self.makeRandomPassword = self.makeUniqueRandomPassword =\
42495
+ self.promptForPassword = self.promptForUniquePassword = False
42478
42496
  if password.lower() == 'blocklogin':
42479
42497
  self.makeRandomPassword = True
42480
42498
  self.makeCleanPassword = False
@@ -42487,6 +42505,13 @@ class PasswordOptions():
42487
42505
  self.makeUniqueRandomPassword = self.makeCleanPassword = True
42488
42506
  else:
42489
42507
  self.makeRandomPassword = self.makeCleanPassword = True
42508
+ elif password.lower() == 'prompt':
42509
+ self.promptForPassword = True
42510
+ elif password.lower() == 'uniqueprompt':
42511
+ if self.updateCmd:
42512
+ self.promptForUniquePassword = True
42513
+ else:
42514
+ self.promptForPassword = True
42490
42515
  elif up == 'hashFunction':
42491
42516
  body[up] = self.HASH_FUNCTION_MAP[myarg]
42492
42517
  self.clearPassword = self.hashPassword = False
@@ -42509,11 +42534,17 @@ class PasswordOptions():
42509
42534
  except Exception:
42510
42535
  pass
42511
42536
 
42512
- def AssignPassword(self, body, notify, notFoundBody, createIfNotFound):
42537
+ def AssignPassword(self, body, notify, notFoundBody, createIfNotFound, user=None):
42513
42538
  up = 'password'
42514
42539
  if self.makeRandomPassword or self.makeUniqueRandomPassword:
42515
42540
  body[up] = self.CreateRandomPassword()
42516
42541
  self.password = body[up]
42542
+ elif user and (self.promptForPassword or self.promptForUniquePassword):
42543
+ body[up] = readStdin(f'Enter password for {user}: ')
42544
+ self.password = body[up]
42545
+ elif self.promptForPassword:
42546
+ body[up] = readStdin('Enter password: ')
42547
+ self.password = body[up]
42517
42548
  if up in body:
42518
42549
  self.FinalizePassword(body, notify, up)
42519
42550
  elif 'hashFunction' in body:
@@ -43147,7 +43178,12 @@ def getUserAttributes(cd, updateCmd, noUid=False):
43147
43178
  body[up][schemaName][fieldName] = None
43148
43179
  else:
43149
43180
  unknownArgumentExit()
43150
- if not PwdOpts.makeUniqueRandomPassword:
43181
+ if PwdOpts.promptForPassword or PwdOpts.promptForUniquePassword:
43182
+ if not updateCmd:
43183
+ PwdOpts.AssignPassword(body, notify, notFoundBody, parameters['createIfNotFound'], body['primaryEmail'])
43184
+ elif not PwdOpts.promptForUniquePassword:
43185
+ PwdOpts.AssignPassword(body, notify, notFoundBody, parameters['createIfNotFound'])
43186
+ elif not PwdOpts.makeUniqueRandomPassword:
43151
43187
  PwdOpts.AssignPassword(body, notify, notFoundBody, parameters['createIfNotFound'])
43152
43188
  return (body, notify, tagReplacements, addGroups, addAliases, PwdOpts,
43153
43189
  updatePrimaryEmail, notFoundBody, groupOrgUnitMap, parameters,
@@ -43181,7 +43217,7 @@ def createUserAddAliases(cd, user, aliasList, i, count):
43181
43217
  # [replyto <EmailAaddress>]
43182
43218
  # [<NotifyMessageContent>]
43183
43219
  # (replace <Tag> <UserReplacement>)*]
43184
- # [lograndompassword <FileName>] [ignorenullpassword]
43220
+ # [logpassword <FileName>] [ignorenullpassword]
43185
43221
  # [verifynotinvitable]
43186
43222
  # [addnumericsuffixonduplicate <Number>]
43187
43223
  def doCreateUser():
@@ -43286,7 +43322,7 @@ def verifyUserPrimaryEmail(cd, user, createIfNotFound, i, count):
43286
43322
  # [<NotifyMessageContent>]
43287
43323
  # (replace <Tag> <UserReplacement>)*]
43288
43324
  # [notifyonupdate [<Boolean>]]
43289
- # [lograndompassword <FileName>] [ignorenullpassword]
43325
+ # [logpassword <FileName>] [ignorenullpassword]
43290
43326
  def updateUsers(entityList):
43291
43327
  def waitingForCreationToComplete(sleep_time):
43292
43328
  writeStderr(Ind.Spaces()+Msg.WAITING_FOR_ITEM_CREATION_TO_COMPLETE_SLEEPING.format(Ent.Singular(Ent.USER), sleep_time))
@@ -43368,8 +43404,8 @@ def updateUsers(entityList):
43368
43404
  if isInvitableUser:
43369
43405
  entityActionNotPerformedWarning([Ent.USER, body['primaryEmail']], Msg.EMAIL_ADDRESS_IS_UNMANAGED_ACCOUNT, i, count)
43370
43406
  continue
43371
- if PwdOpts.makeUniqueRandomPassword:
43372
- PwdOpts.AssignPassword(body, notify, notFoundBody, parameters['createIfNotFound'])
43407
+ if PwdOpts.makeUniqueRandomPassword or PwdOpts.promptForUniquePassword:
43408
+ PwdOpts.AssignPassword(body, notify, notFoundBody, parameters['createIfNotFound'], userKey)
43373
43409
  retry = 0
43374
43410
  while True:
43375
43411
  try:
gam/gamlib/glgapi.py CHANGED
@@ -273,7 +273,7 @@ LOOKERSTUDIO_THROW_REASONS = [INVALID_ARGUMENT, SERVICE_NOT_AVAILABLE, BAD_REQUE
273
273
  MEMBERS_THROW_REASONS = [GROUP_NOT_FOUND, DOMAIN_NOT_FOUND, DOMAIN_CANNOT_USE_APIS, INVALID, FORBIDDEN, SERVICE_NOT_AVAILABLE]
274
274
  MEMBERS_RETRY_REASONS = [SYSTEM_ERROR, SERVICE_NOT_AVAILABLE]
275
275
  ORGUNIT_GET_THROW_REASONS = [INVALID_ORGUNIT, ORGUNIT_NOT_FOUND, BACKEND_ERROR, BAD_REQUEST, INVALID_CUSTOMER_ID, LOGIN_REQUIRED]
276
- PEOPLE_ACCESS_THROW_REASONS = [SERVICE_NOT_AVAILABLE, FORBIDDEN, PERMISSION_DENIED]
276
+ PEOPLE_ACCESS_THROW_REASONS = [SERVICE_NOT_AVAILABLE, FORBIDDEN, PERMISSION_DENIED, FAILED_PRECONDITION]
277
277
  RESELLER_THROW_REASONS = [BAD_REQUEST, RESOURCE_NOT_FOUND, FORBIDDEN, INVALID]
278
278
  SHEETS_ACCESS_THROW_REASONS = DRIVE_USER_THROW_REASONS+[NOT_FOUND, PERMISSION_DENIED, FORBIDDEN, INTERNAL_ERROR, INSUFFICIENT_FILE_PERMISSIONS,
279
279
  BAD_REQUEST, INVALID, INVALID_ARGUMENT, FAILED_PRECONDITION]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gam7
3
- Version: 7.5.3
3
+ Version: 7.5.5
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
@@ -1,4 +1,4 @@
1
- gam/__init__.py,sha256=5UwsBJU0VvJ7oHgKCnBOawu-dZC7K8y0Vj6fE9Ys8Vg,3477059
1
+ gam/__init__.py,sha256=0VP1nWMVS7s80KV7vRP-w5PeBVxPPai8MF-k3IWFVf4,3480758
2
2
  gam/__main__.py,sha256=amz0-959ph6zkZKqjaar4n60yho-T37w6qWI36qx0CA,1049
3
3
  gam/cacerts.pem,sha256=nJuWha0xm5dHw_5ptGphwRoO-r36Ccpqiww9pCEDbSc,67484
4
4
  gam/cbcm-v1.1beta1.json,sha256=xO5XloCQQULmPbFBx5bckdqmbLFQ7sJ2TImhE1ysDIY,19439
@@ -27,7 +27,7 @@ gam/gamlib/glapi.py,sha256=EAQXkaM13t6jjh9vL4eHJqIZRI5kmzeneiFs5xcWXfg,34304
27
27
  gam/gamlib/glcfg.py,sha256=cV011FpIWge4oi5_dJrdof66vUqX6UCvTGWWTNVmYEg,28055
28
28
  gam/gamlib/glclargs.py,sha256=ptSTGELZHQS6SfvGGJ3NrXRoHAToO108NTYsFQE-C4c,42200
29
29
  gam/gamlib/glentity.py,sha256=ZLbyMl9NhN-MBf9Rxmho2dBYeS4SNLMctpeaKFZSbQ4,33801
30
- gam/gamlib/glgapi.py,sha256=W1nFH0sY7P8pnb98_4uzMSCs8gre0rvG5pBRI6HJq0c,38274
30
+ gam/gamlib/glgapi.py,sha256=TYPc91Ab-tNr-_nRArhPdRaB_6FbCZjBBNpEmRJuXrw,38295
31
31
  gam/gamlib/glgdata.py,sha256=weRppttWm6uRyqtBoGPKoHiNZ2h28nhfUV4J_mbCszY,2707
32
32
  gam/gamlib/glglobals.py,sha256=B0kCz4K6PO1-n3eZI_lvdRG99Ane1-dH4zS4J4aymlI,9566
33
33
  gam/gamlib/glindent.py,sha256=RfBa2LDfLIqPLL5vMfC689TCVmqn8xf-qulSzkiatrc,1228
@@ -65,8 +65,8 @@ gam/googleapiclient/discovery_cache/base.py,sha256=yCDPtxnbNN-p5_9fzBacC6P3wcUPl
65
65
  gam/googleapiclient/discovery_cache/file_cache.py,sha256=sim3Mg4HgRYo3vX75jvcKy_aV568EvIrtBfvfbw-044,4774
66
66
  gam/iso8601/__init__.py,sha256=Z2PsYbXgAH5a5xzUvgczCboPzqWpm65kRcIngCnhViU,1218
67
67
  gam/iso8601/iso8601.py,sha256=Li2FHZ4sBTWuthuQhyCvmvj0j6At8JbGzkSv2fc2RHU,4384
68
- gam7-7.5.3.dist-info/METADATA,sha256=F8Xqm-nync5vzUXZVy3FXbBTTpXzQFQCgEOJ08fk3bQ,2888
69
- gam7-7.5.3.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
70
- gam7-7.5.3.dist-info/entry_points.txt,sha256=HVUM5J7dA8YwvJfG30jiLefR19ExMs387TWugWd9sf4,42
71
- gam7-7.5.3.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
72
- gam7-7.5.3.dist-info/RECORD,,
68
+ gam7-7.5.5.dist-info/METADATA,sha256=rxgTKAvDjeNdo6glMn1MVmjTCjLxBwe1rAPN-0VHmzY,2888
69
+ gam7-7.5.5.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
70
+ gam7-7.5.5.dist-info/entry_points.txt,sha256=HVUM5J7dA8YwvJfG30jiLefR19ExMs387TWugWd9sf4,42
71
+ gam7-7.5.5.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
72
+ gam7-7.5.5.dist-info/RECORD,,
File without changes