gam7 7.5.4__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 +138 -103
- gam/gamlib/glgapi.py +1 -1
- {gam7-7.5.4.dist-info → gam7-7.5.5.dist-info}/METADATA +1 -1
- {gam7-7.5.4.dist-info → gam7-7.5.5.dist-info}/RECORD +7 -7
- {gam7-7.5.4.dist-info → gam7-7.5.5.dist-info}/WHEEL +0 -0
- {gam7-7.5.4.dist-info → gam7-7.5.5.dist-info}/entry_points.txt +0 -0
- {gam7-7.5.4.dist-info → gam7-7.5.5.dist-info}/licenses/LICENSE +0 -0
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.
|
|
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(
|
|
5762
|
+
if emailAddressOrUID.startswith(NON_EMAIL_MEMBER_PREFIXES):
|
|
5759
5763
|
return emailAddressOrUID
|
|
5760
5764
|
normalizedEmailAddressOrUID = normalizeEmailAddressOrUID(emailAddressOrUID, ciGroupsAPI=ciGroupsAPI)
|
|
5761
|
-
if normalizedEmailAddressOrUID.startswith(
|
|
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)
|
|
@@ -40379,20 +40391,20 @@ def convertExportNameToID(v, nameOrId, matterId, matterNameId):
|
|
|
40379
40391
|
if cg:
|
|
40380
40392
|
try:
|
|
40381
40393
|
export = callGAPI(v.matters().exports(), 'get',
|
|
40382
|
-
throwReasons=[GAPI.NOT_FOUND, GAPI.BAD_REQUEST, GAPI.FORBIDDEN],
|
|
40394
|
+
throwReasons=[GAPI.NOT_FOUND, GAPI.BAD_REQUEST, GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
|
|
40383
40395
|
matterId=matterId, exportId=cg.group(1))
|
|
40384
40396
|
return (export['id'], export['name'], formatVaultNameId(export['id'], export['name']))
|
|
40385
40397
|
except (GAPI.notFound, GAPI.badRequest):
|
|
40386
40398
|
entityDoesNotHaveItemExit([Ent.VAULT_MATTER, matterNameId, Ent.VAULT_EXPORT, nameOrId])
|
|
40387
|
-
except GAPI.forbidden:
|
|
40388
|
-
ClientAPIAccessDeniedExit()
|
|
40399
|
+
except (GAPI.forbidden, GAPI.invalidArgument) as e:
|
|
40400
|
+
ClientAPIAccessDeniedExit(str(e))
|
|
40389
40401
|
nameOrIdlower = nameOrId.lower()
|
|
40390
40402
|
try:
|
|
40391
40403
|
exports = callGAPIpages(v.matters().exports(), 'list', 'exports',
|
|
40392
|
-
throwReasons=[GAPI.FORBIDDEN],
|
|
40404
|
+
throwReasons=[GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
|
|
40393
40405
|
matterId=matterId, fields='exports(id,name),nextPageToken')
|
|
40394
|
-
except GAPI.forbidden:
|
|
40395
|
-
ClientAPIAccessDeniedExit()
|
|
40406
|
+
except (GAPI.forbidden, GAPI.invalidArgument) as e:
|
|
40407
|
+
ClientAPIAccessDeniedExit(str(e))
|
|
40396
40408
|
for export in exports:
|
|
40397
40409
|
if export['name'].lower() == nameOrIdlower:
|
|
40398
40410
|
return (export['id'], export['name'], formatVaultNameId(export['id'], export['name']))
|
|
@@ -40403,20 +40415,20 @@ def convertHoldNameToID(v, nameOrId, matterId, matterNameId):
|
|
|
40403
40415
|
if cg:
|
|
40404
40416
|
try:
|
|
40405
40417
|
hold = callGAPI(v.matters().holds(), 'get',
|
|
40406
|
-
throwReasons=[GAPI.NOT_FOUND, GAPI.BAD_REQUEST, GAPI.FORBIDDEN],
|
|
40418
|
+
throwReasons=[GAPI.NOT_FOUND, GAPI.BAD_REQUEST, GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
|
|
40407
40419
|
matterId=matterId, holdId=cg.group(1))
|
|
40408
40420
|
return (hold['holdId'], hold['name'], formatVaultNameId(hold['holdId'], hold['name']))
|
|
40409
40421
|
except (GAPI.notFound, GAPI.badRequest):
|
|
40410
40422
|
entityDoesNotHaveItemExit([Ent.VAULT_MATTER, matterNameId, Ent.VAULT_HOLD, nameOrId])
|
|
40411
|
-
except GAPI.forbidden:
|
|
40412
|
-
ClientAPIAccessDeniedExit()
|
|
40423
|
+
except (GAPI.forbidden, GAPI.invalidArgument) as e:
|
|
40424
|
+
ClientAPIAccessDeniedExit(str(e))
|
|
40413
40425
|
nameOrIdlower = nameOrId.lower()
|
|
40414
40426
|
try:
|
|
40415
40427
|
holds = callGAPIpages(v.matters().holds(), 'list', 'holds',
|
|
40416
|
-
throwReasons=[GAPI.FORBIDDEN],
|
|
40428
|
+
throwReasons=[GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
|
|
40417
40429
|
matterId=matterId, fields='holds(holdId,name),nextPageToken')
|
|
40418
|
-
except GAPI.forbidden:
|
|
40419
|
-
ClientAPIAccessDeniedExit()
|
|
40430
|
+
except (GAPI.forbidden, GAPI.invalidArgument) as e:
|
|
40431
|
+
ClientAPIAccessDeniedExit(str(e))
|
|
40420
40432
|
for hold in holds:
|
|
40421
40433
|
if hold['name'].lower() == nameOrIdlower:
|
|
40422
40434
|
return (hold['holdId'], hold['name'], formatVaultNameId(hold['holdId'], hold['name']))
|
|
@@ -40427,17 +40439,17 @@ def convertMatterNameToID(v, nameOrId, state=None):
|
|
|
40427
40439
|
if cg:
|
|
40428
40440
|
try:
|
|
40429
40441
|
matter = callGAPI(v.matters(), 'get',
|
|
40430
|
-
throwReasons=[GAPI.NOT_FOUND, GAPI.FORBIDDEN],
|
|
40442
|
+
throwReasons=[GAPI.NOT_FOUND, GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
|
|
40431
40443
|
matterId=cg.group(1), view='BASIC', fields='matterId,name,state')
|
|
40432
40444
|
return (matter['matterId'], matter['name'], formatVaultNameId(matter['name'], matter['matterId']), matter['state'])
|
|
40433
40445
|
except (GAPI.notFound, GAPI.forbidden):
|
|
40434
40446
|
entityDoesNotExistExit(Ent.VAULT_MATTER, nameOrId)
|
|
40435
40447
|
try:
|
|
40436
40448
|
matters = callGAPIpages(v.matters(), 'list', 'matters',
|
|
40437
|
-
throwReasons=[GAPI.FORBIDDEN],
|
|
40449
|
+
throwReasons=[GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
|
|
40438
40450
|
view='BASIC', state=state, fields='matters(matterId,name,state),nextPageToken')
|
|
40439
|
-
except GAPI.forbidden:
|
|
40440
|
-
ClientAPIAccessDeniedExit()
|
|
40451
|
+
except (GAPI.forbidden, GAPI.invalidArgument) as e:
|
|
40452
|
+
ClientAPIAccessDeniedExit(str(e))
|
|
40441
40453
|
nameOrIdlower = nameOrId.lower()
|
|
40442
40454
|
ids = []
|
|
40443
40455
|
states = []
|
|
@@ -40458,20 +40470,20 @@ def convertQueryNameToID(v, nameOrId, matterId, matterNameId):
|
|
|
40458
40470
|
if cg:
|
|
40459
40471
|
try:
|
|
40460
40472
|
query = callGAPI(v.matters().savedQueries(), 'get',
|
|
40461
|
-
throwReasons=[GAPI.NOT_FOUND, GAPI.BAD_REQUEST, GAPI.FORBIDDEN],
|
|
40473
|
+
throwReasons=[GAPI.NOT_FOUND, GAPI.BAD_REQUEST, GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
|
|
40462
40474
|
matterId=matterId, savedQueryId=cg.group(1))
|
|
40463
40475
|
return (query['savedQueryId'], query['displayName'], formatVaultNameId(query['savedQueryId'], query['displayName']))
|
|
40464
40476
|
except (GAPI.notFound, GAPI.badRequest):
|
|
40465
40477
|
entityDoesNotHaveItemExit([Ent.VAULT_MATTER, matterNameId, Ent.VAULT_QUERY, nameOrId])
|
|
40466
|
-
except GAPI.forbidden:
|
|
40467
|
-
ClientAPIAccessDeniedExit()
|
|
40478
|
+
except (GAPI.forbidden, GAPI.invalidArgument) as e:
|
|
40479
|
+
ClientAPIAccessDeniedExit(str(e))
|
|
40468
40480
|
nameOrIdlower = nameOrId.lower()
|
|
40469
40481
|
try:
|
|
40470
40482
|
queries = callGAPIpages(v.matters().savedQueries(), 'list', 'savedQueries',
|
|
40471
|
-
throwReasons=[GAPI.FORBIDDEN],
|
|
40483
|
+
throwReasons=[GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
|
|
40472
40484
|
matterId=matterId, fields='savedQueries(savedQueryId,displayName),nextPageToken')
|
|
40473
|
-
except GAPI.forbidden:
|
|
40474
|
-
ClientAPIAccessDeniedExit()
|
|
40485
|
+
except (GAPI.forbidden, GAPI.invalidArgument) as e:
|
|
40486
|
+
ClientAPIAccessDeniedExit(str(e))
|
|
40475
40487
|
for query in queries:
|
|
40476
40488
|
if query['displayName'].lower() == nameOrIdlower:
|
|
40477
40489
|
return (query['savedQueryId'], query['displayName'], formatVaultNameId(query['savedQueryId'], query['displayName']))
|
|
@@ -40485,9 +40497,9 @@ def warnMatterNotOpen(v, matter, matterNameId, j, jcount):
|
|
|
40485
40497
|
if v is not None:
|
|
40486
40498
|
try:
|
|
40487
40499
|
matter['state'] = callGAPI(v.matters(), 'get',
|
|
40488
|
-
throwReasons=[GAPI.NOT_FOUND, GAPI.FORBIDDEN],
|
|
40500
|
+
throwReasons=[GAPI.NOT_FOUND, GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
|
|
40489
40501
|
matterId=matter['matterId'], view='BASIC', fields='state')['state']
|
|
40490
|
-
except (GAPI.notFound, GAPI.forbidden):
|
|
40502
|
+
except (GAPI.notFound, GAPI.forbidden, GAPI.invalidArgument):
|
|
40491
40503
|
matter['state'] = 'Unknown'
|
|
40492
40504
|
else:
|
|
40493
40505
|
setSysExitRC(DATA_NOT_AVALIABLE_RC)
|
|
@@ -40803,10 +40815,10 @@ def doDeleteVaultExport():
|
|
|
40803
40815
|
unknownArgumentExit()
|
|
40804
40816
|
try:
|
|
40805
40817
|
callGAPI(v.matters().exports(), 'delete',
|
|
40806
|
-
throwReasons=[GAPI.NOT_FOUND, GAPI.BAD_REQUEST, GAPI.FORBIDDEN],
|
|
40818
|
+
throwReasons=[GAPI.NOT_FOUND, GAPI.BAD_REQUEST, GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
|
|
40807
40819
|
matterId=matterId, exportId=exportId)
|
|
40808
40820
|
entityActionPerformed([Ent.VAULT_MATTER, matterNameId, Ent.VAULT_EXPORT, exportNameId])
|
|
40809
|
-
except (GAPI.notFound, GAPI.badRequest, GAPI.forbidden) as e:
|
|
40821
|
+
except (GAPI.notFound, GAPI.badRequest, GAPI.forbidden, GAPI.invalidArgument) as e:
|
|
40810
40822
|
entityActionFailedWarning([Ent.VAULT_MATTER, matterNameId, Ent.VAULT_EXPORT, exportNameId], str(e))
|
|
40811
40823
|
|
|
40812
40824
|
VAULT_EXPORT_FIELDS_CHOICE_MAP = {
|
|
@@ -40857,10 +40869,10 @@ def doInfoVaultExport():
|
|
|
40857
40869
|
fields = getFieldsFromFieldsList(fieldsList)
|
|
40858
40870
|
try:
|
|
40859
40871
|
export = callGAPI(v.matters().exports(), 'get',
|
|
40860
|
-
throwReasons=[GAPI.NOT_FOUND, GAPI.BAD_REQUEST, GAPI.FORBIDDEN],
|
|
40872
|
+
throwReasons=[GAPI.NOT_FOUND, GAPI.BAD_REQUEST, GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
|
|
40861
40873
|
matterId=matterId, exportId=exportId, fields=fields)
|
|
40862
40874
|
_showVaultExport(matterNameId, export, cd, FJQC)
|
|
40863
|
-
except (GAPI.notFound, GAPI.badRequest, GAPI.forbidden) as e:
|
|
40875
|
+
except (GAPI.notFound, GAPI.badRequest, GAPI.forbidden, GAPI.invalidArgument) as e:
|
|
40864
40876
|
entityActionFailedWarning([Ent.VAULT_MATTER, matterNameId, Ent.VAULT_EXPORT, exportNameId], str(e))
|
|
40865
40877
|
|
|
40866
40878
|
VAULT_EXPORT_STATUS_MAP = {'completed': 'COMPLETED', 'failed': 'FAILED', 'inprogress': 'IN_PROGRESS'}
|
|
@@ -40923,9 +40935,9 @@ def doPrintShowVaultExports():
|
|
|
40923
40935
|
try:
|
|
40924
40936
|
results = callGAPIpages(v.matters(), 'list', 'matters',
|
|
40925
40937
|
pageMessage=getPageMessage(),
|
|
40926
|
-
throwReasons=[GAPI.FORBIDDEN],
|
|
40938
|
+
throwReasons=[GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
|
|
40927
40939
|
view='BASIC', state='OPEN', fields='matters(matterId,name,state),nextPageToken')
|
|
40928
|
-
except GAPI.forbidden as e:
|
|
40940
|
+
except (GAPI.forbidden, GAPI.invalidArgument) as e:
|
|
40929
40941
|
entityActionFailedWarning([Ent.VAULT_EXPORT, None], str(e))
|
|
40930
40942
|
return
|
|
40931
40943
|
else:
|
|
@@ -40953,12 +40965,12 @@ def doPrintShowVaultExports():
|
|
|
40953
40965
|
try:
|
|
40954
40966
|
exports = callGAPIpages(v.matters().exports(), 'list', 'exports',
|
|
40955
40967
|
pageMessage=pageMessage,
|
|
40956
|
-
throwReasons=[GAPI.FAILED_PRECONDITION, GAPI.FORBIDDEN],
|
|
40968
|
+
throwReasons=[GAPI.FAILED_PRECONDITION, GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
|
|
40957
40969
|
matterId=matterId, fields=fields)
|
|
40958
40970
|
except GAPI.failedPrecondition:
|
|
40959
40971
|
warnMatterNotOpen(v, matter, matterNameId, j, jcount)
|
|
40960
40972
|
continue
|
|
40961
|
-
except GAPI.forbidden as e:
|
|
40973
|
+
except (GAPI.forbidden, GAPI.invalidArgument) as e:
|
|
40962
40974
|
entityActionFailedWarning([Ent.VAULT_EXPORT, None], str(e))
|
|
40963
40975
|
break
|
|
40964
40976
|
else:
|
|
@@ -41053,9 +41065,9 @@ def doCopyVaultExport():
|
|
|
41053
41065
|
while True:
|
|
41054
41066
|
try:
|
|
41055
41067
|
export = callGAPI(v.matters().exports(), 'get',
|
|
41056
|
-
throwReasons=[GAPI.NOT_FOUND, GAPI.BAD_REQUEST, GAPI.FORBIDDEN],
|
|
41068
|
+
throwReasons=[GAPI.NOT_FOUND, GAPI.BAD_REQUEST, GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
|
|
41057
41069
|
matterId=matterId, exportId=exportId)
|
|
41058
|
-
except (GAPI.notFound, GAPI.badRequest, GAPI.forbidden) as e:
|
|
41070
|
+
except (GAPI.notFound, GAPI.badRequest, GAPI.forbidden, GAPI.invalidArgument) as e:
|
|
41059
41071
|
entityActionFailedWarning([Ent.VAULT_MATTER, matterNameId, Ent.VAULT_EXPORT, exportNameId], str(e))
|
|
41060
41072
|
return
|
|
41061
41073
|
if export['status'] == 'COMPLETED':
|
|
@@ -41153,9 +41165,9 @@ def doDownloadVaultExport():
|
|
|
41153
41165
|
while True:
|
|
41154
41166
|
try:
|
|
41155
41167
|
export = callGAPI(v.matters().exports(), 'get',
|
|
41156
|
-
throwReasons=[GAPI.NOT_FOUND, GAPI.BAD_REQUEST, GAPI.FORBIDDEN],
|
|
41168
|
+
throwReasons=[GAPI.NOT_FOUND, GAPI.BAD_REQUEST, GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
|
|
41157
41169
|
matterId=matterId, exportId=exportId)
|
|
41158
|
-
except (GAPI.notFound, GAPI.badRequest, GAPI.forbidden) as e:
|
|
41170
|
+
except (GAPI.notFound, GAPI.badRequest, GAPI.forbidden, GAPI.invalidArgument) as e:
|
|
41159
41171
|
entityActionFailedWarning([Ent.VAULT_MATTER, matterNameId, Ent.VAULT_EXPORT, exportNameId], str(e))
|
|
41160
41172
|
return
|
|
41161
41173
|
if export['status'] == 'COMPLETED':
|
|
@@ -41343,7 +41355,8 @@ def doCreateVaultHold():
|
|
|
41343
41355
|
body['accounts'].append({'accountId': convertEmailAddressToUID(account, cd, accountType, accountsLocation)})
|
|
41344
41356
|
try:
|
|
41345
41357
|
hold = callGAPI(v.matters().holds(), 'create',
|
|
41346
|
-
throwReasons=[GAPI.ALREADY_EXISTS, GAPI.BAD_REQUEST, GAPI.BACKEND_ERROR, GAPI.FAILED_PRECONDITION,
|
|
41358
|
+
throwReasons=[GAPI.ALREADY_EXISTS, GAPI.BAD_REQUEST, GAPI.BACKEND_ERROR, GAPI.FAILED_PRECONDITION,
|
|
41359
|
+
GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
|
|
41347
41360
|
matterId=matterId, body=body)
|
|
41348
41361
|
if not returnIdOnly:
|
|
41349
41362
|
entityActionPerformed([Ent.VAULT_MATTER, matterNameId, Ent.VAULT_HOLD, formatVaultNameId(hold['name'], hold['holdId'])])
|
|
@@ -41351,7 +41364,8 @@ def doCreateVaultHold():
|
|
|
41351
41364
|
_showVaultHold(None, hold, None, None)
|
|
41352
41365
|
else:
|
|
41353
41366
|
writeStdout(f'{hold["holdId"]}\n')
|
|
41354
|
-
except (GAPI.alreadyExists, GAPI.badRequest, GAPI.backendError, GAPI.failedPrecondition,
|
|
41367
|
+
except (GAPI.alreadyExists, GAPI.badRequest, GAPI.backendError, GAPI.failedPrecondition,
|
|
41368
|
+
GAPI.forbidden, GAPI.invalidArgument) as e:
|
|
41355
41369
|
entityActionFailedWarning([Ent.VAULT_MATTER, matterNameId, Ent.VAULT_HOLD, body.get('name')], str(e))
|
|
41356
41370
|
|
|
41357
41371
|
# gam update vaulthold|hold <HoldItem> matter <MatterItem>
|
|
@@ -41396,9 +41410,9 @@ def doUpdateVaultHold():
|
|
|
41396
41410
|
missingArgumentExit('matter')
|
|
41397
41411
|
try:
|
|
41398
41412
|
old_body = callGAPI(v.matters().holds(), 'get',
|
|
41399
|
-
throwReasons=[GAPI.NOT_FOUND, GAPI.BAD_REQUEST, GAPI.FORBIDDEN],
|
|
41413
|
+
throwReasons=[GAPI.NOT_FOUND, GAPI.BAD_REQUEST, GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
|
|
41400
41414
|
matterId=matterId, holdId=holdId, fields='name,corpus,query,orgUnit')
|
|
41401
|
-
except (GAPI.notFound, GAPI.badRequest, GAPI.forbidden) as e:
|
|
41415
|
+
except (GAPI.notFound, GAPI.badRequest, GAPI.forbidden, GAPI.invalidArgument) as e:
|
|
41402
41416
|
entityActionFailedWarning([Ent.VAULT_MATTER, matterNameId, Ent.VAULT_HOLD, holdNameId], str(e))
|
|
41403
41417
|
return
|
|
41404
41418
|
accountType = 'group' if old_body['corpus'] == 'GROUPS' else 'user'
|
|
@@ -41424,10 +41438,10 @@ def doUpdateVaultHold():
|
|
|
41424
41438
|
if body:
|
|
41425
41439
|
try:
|
|
41426
41440
|
hold = callGAPI(v.matters().holds(), 'update',
|
|
41427
|
-
|
|
41441
|
+
throwReas=[GAPI.NOT_FOUND, GAPI.BAD_REQUEST, GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
|
|
41428
41442
|
matterId=matterId, holdId=holdId, body=body)
|
|
41429
41443
|
entityActionPerformed([Ent.VAULT_MATTER, matterNameId, Ent.VAULT_HOLD, holdNameId])
|
|
41430
|
-
except (GAPI.notFound, GAPI.badRequest, GAPI.forbidden) as e:
|
|
41444
|
+
except (GAPI.notFound, GAPI.badRequest, GAPI.forbidden, GAPI.invalidArgument) as e:
|
|
41431
41445
|
entityActionFailedWarning([Ent.VAULT_MATTER, matterNameId, Ent.VAULT_HOLD, holdNameId], str(e))
|
|
41432
41446
|
return
|
|
41433
41447
|
jcount = len(addAccountIds)
|
|
@@ -41440,12 +41454,12 @@ def doUpdateVaultHold():
|
|
|
41440
41454
|
j += 1
|
|
41441
41455
|
try:
|
|
41442
41456
|
callGAPI(v.matters().holds().accounts(), 'create',
|
|
41443
|
-
throwReasons=[GAPI.ALREADY_EXISTS, GAPI.BACKEND_ERROR, GAPI.FORBIDDEN],
|
|
41457
|
+
throwReasons=[GAPI.ALREADY_EXISTS, GAPI.BACKEND_ERROR, GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
|
|
41444
41458
|
matterId=matterId, holdId=holdId, body={'accountId': account['id']})
|
|
41445
41459
|
entityActionPerformed([Ent.VAULT_MATTER, matterNameId, Ent.VAULT_HOLD, holdNameId, Ent.ACCOUNT, account['email']], j, jcount)
|
|
41446
41460
|
except (GAPI.alreadyExists, GAPI.backendError) as e:
|
|
41447
41461
|
entityActionFailedWarning([Ent.VAULT_MATTER, matterNameId, Ent.VAULT_HOLD, holdNameId, Ent.ACCOUNT, account['email']], str(e), j, jcount)
|
|
41448
|
-
except GAPI.forbidden as e:
|
|
41462
|
+
except (GAPI.forbidden, GAPI.invalidArgument) as e:
|
|
41449
41463
|
entityActionFailedWarning([Ent.VAULT_MATTER, matterNameId, Ent.VAULT_HOLD, None], str(e))
|
|
41450
41464
|
return
|
|
41451
41465
|
Ind.Decrement()
|
|
@@ -41461,12 +41475,12 @@ def doUpdateVaultHold():
|
|
|
41461
41475
|
j += 1
|
|
41462
41476
|
try:
|
|
41463
41477
|
callGAPI(v.matters().holds().accounts(), 'delete',
|
|
41464
|
-
throwReasons=[GAPI.NOT_FOUND, GAPI.BACKEND_ERROR, GAPI.FORBIDDEN],
|
|
41478
|
+
throwReasons=[GAPI.NOT_FOUND, GAPI.BACKEND_ERROR, GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
|
|
41465
41479
|
matterId=matterId, holdId=holdId, accountId=account['id'])
|
|
41466
41480
|
entityActionPerformed([Ent.VAULT_MATTER, matterNameId, Ent.VAULT_HOLD, holdNameId, Ent.ACCOUNT, account['email']], j, jcount)
|
|
41467
41481
|
except (GAPI.alreadyExists, GAPI.backendError) as e:
|
|
41468
41482
|
entityActionFailedWarning([Ent.VAULT_MATTER, matterNameId, Ent.VAULT_HOLD, holdNameId, Ent.ACCOUNT, account['email']], str(e), j, jcount)
|
|
41469
|
-
except GAPI.forbidden as e:
|
|
41483
|
+
except (GAPI.forbidden, GAPI.invalidArgument) as e:
|
|
41470
41484
|
entityActionFailedWarning([Ent.VAULT_MATTER, matterNameId, Ent.VAULT_HOLD, None], str(e))
|
|
41471
41485
|
return
|
|
41472
41486
|
Ind.Decrement()
|
|
@@ -41491,10 +41505,10 @@ def doDeleteVaultHold():
|
|
|
41491
41505
|
unknownArgumentExit()
|
|
41492
41506
|
try:
|
|
41493
41507
|
callGAPI(v.matters().holds(), 'delete',
|
|
41494
|
-
throwReasons=[GAPI.NOT_FOUND, GAPI.BAD_REQUEST, GAPI.FORBIDDEN],
|
|
41508
|
+
throwReasons=[GAPI.NOT_FOUND, GAPI.BAD_REQUEST, GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
|
|
41495
41509
|
matterId=matterId, holdId=holdId)
|
|
41496
41510
|
entityActionPerformed([Ent.VAULT_MATTER, matterNameId, Ent.VAULT_HOLD, holdNameId])
|
|
41497
|
-
except (GAPI.notFound, GAPI.badRequest, GAPI.forbidden) as e:
|
|
41511
|
+
except (GAPI.notFound, GAPI.badRequest, GAPI.forbidden, GAPI.invalidArgument) as e:
|
|
41498
41512
|
entityActionFailedWarning([Ent.VAULT_MATTER, matterNameId, Ent.VAULT_HOLD, holdNameId], str(e))
|
|
41499
41513
|
|
|
41500
41514
|
VAULT_HOLD_FIELDS_CHOICE_MAP = {
|
|
@@ -41544,10 +41558,10 @@ def doInfoVaultHold():
|
|
|
41544
41558
|
fields = getFieldsFromFieldsList(fieldsList)
|
|
41545
41559
|
try:
|
|
41546
41560
|
hold = callGAPI(v.matters().holds(), 'get',
|
|
41547
|
-
throwReasons=[GAPI.NOT_FOUND, GAPI.BAD_REQUEST, GAPI.FORBIDDEN],
|
|
41561
|
+
throwReasons=[GAPI.NOT_FOUND, GAPI.BAD_REQUEST, GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
|
|
41548
41562
|
matterId=matterId, holdId=holdId, fields=fields)
|
|
41549
41563
|
_showVaultHold(matterNameId, hold, cd, FJQC)
|
|
41550
|
-
except (GAPI.notFound, GAPI.badRequest, GAPI.forbidden) as e:
|
|
41564
|
+
except (GAPI.notFound, GAPI.badRequest, GAPI.forbidden, GAPI.invalidArgument) as e:
|
|
41551
41565
|
entityActionFailedWarning([Ent.VAULT_MATTER, matterNameId, Ent.VAULT_HOLD, holdNameId], str(e))
|
|
41552
41566
|
|
|
41553
41567
|
PRINT_VAULT_HOLDS_TITLES = ['matterId', 'matterName', 'holdId', 'name', 'updateTime']
|
|
@@ -41598,9 +41612,9 @@ def doPrintShowVaultHolds():
|
|
|
41598
41612
|
try:
|
|
41599
41613
|
results = callGAPIpages(v.matters(), 'list', 'matters',
|
|
41600
41614
|
pageMessage=getPageMessage(),
|
|
41601
|
-
throwReasons=[GAPI.FORBIDDEN],
|
|
41615
|
+
throwReasons=[GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
|
|
41602
41616
|
view='BASIC', state='OPEN', fields='matters(matterId,name,state),nextPageToken')
|
|
41603
|
-
except GAPI.forbidden as e:
|
|
41617
|
+
except (GAPI.forbidden, GAPI.invalidArgument) as e:
|
|
41604
41618
|
entityActionFailedWarning([Ent.VAULT_HOLD, None], str(e))
|
|
41605
41619
|
return
|
|
41606
41620
|
else:
|
|
@@ -41627,12 +41641,12 @@ def doPrintShowVaultHolds():
|
|
|
41627
41641
|
try:
|
|
41628
41642
|
holds = callGAPIpages(v.matters().holds(), 'list', 'holds',
|
|
41629
41643
|
pageMessage=pageMessage,
|
|
41630
|
-
throwReasons=[GAPI.FAILED_PRECONDITION, GAPI.FORBIDDEN],
|
|
41644
|
+
throwReasons=[GAPI.FAILED_PRECONDITION, GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
|
|
41631
41645
|
matterId=matterId, fields=fields)
|
|
41632
41646
|
except GAPI.failedPrecondition:
|
|
41633
41647
|
warnMatterNotOpen(v, matter, matterNameId, j, jcount)
|
|
41634
41648
|
continue
|
|
41635
|
-
except GAPI.forbidden as e:
|
|
41649
|
+
except (GAPI.forbidden, GAPI.invalidArgument) as e:
|
|
41636
41650
|
entityActionFailedWarning([Ent.VAULT_HOLD, None], str(e))
|
|
41637
41651
|
break
|
|
41638
41652
|
else:
|
|
@@ -41678,9 +41692,9 @@ def printShowUserVaultHolds(entityList):
|
|
|
41678
41692
|
try:
|
|
41679
41693
|
matters = callGAPIpages(v.matters(), 'list', 'matters',
|
|
41680
41694
|
pageMessage=getPageMessage(),
|
|
41681
|
-
throwReasons=[GAPI.FORBIDDEN],
|
|
41695
|
+
throwReasons=[GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
|
|
41682
41696
|
view='BASIC', state='OPEN', fields='matters(matterId,name,state),nextPageToken')
|
|
41683
|
-
except GAPI.forbidden as e:
|
|
41697
|
+
except (GAPI.forbidden, GAPI.invalidArgument) as e:
|
|
41684
41698
|
entityActionFailedWarning([Ent.VAULT_HOLD, None], str(e))
|
|
41685
41699
|
return
|
|
41686
41700
|
jcount = len(matters)
|
|
@@ -41694,11 +41708,11 @@ def printShowUserVaultHolds(entityList):
|
|
|
41694
41708
|
try:
|
|
41695
41709
|
matter['holds'] = callGAPIpages(v.matters().holds(), 'list', 'holds',
|
|
41696
41710
|
pageMessage=getPageMessageForWhom(),
|
|
41697
|
-
throwReasons=[GAPI.FAILED_PRECONDITION, GAPI.FORBIDDEN],
|
|
41711
|
+
throwReasons=[GAPI.FAILED_PRECONDITION, GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
|
|
41698
41712
|
matterId=matterId, fields='holds(holdId,name,accounts(accountId,email),orgUnit(orgUnitId)),nextPageToken')
|
|
41699
41713
|
except GAPI.failedPrecondition:
|
|
41700
41714
|
warnMatterNotOpen(v, matter, matterNameId, j, jcount)
|
|
41701
|
-
except GAPI.forbidden as e:
|
|
41715
|
+
except (GAPI.forbidden, GAPI.invalidArgument) as e:
|
|
41702
41716
|
entityActionFailedWarning([Ent.VAULT_HOLD, None], str(e), j, jcount)
|
|
41703
41717
|
totalHolds = 0
|
|
41704
41718
|
_, _, entityList = getEntityArgument(entityList)
|
|
@@ -41809,10 +41823,10 @@ def doInfoVaultQuery():
|
|
|
41809
41823
|
fields = getFieldsFromFieldsList(fieldsList)
|
|
41810
41824
|
try:
|
|
41811
41825
|
query = callGAPI(v.matters().savedQueries(), 'get',
|
|
41812
|
-
throwReasons=[GAPI.NOT_FOUND, GAPI.BAD_REQUEST, GAPI.FORBIDDEN],
|
|
41826
|
+
throwReasons=[GAPI.NOT_FOUND, GAPI.BAD_REQUEST, GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
|
|
41813
41827
|
matterId=matterId, savedQueryId=queryId, fields=fields)
|
|
41814
41828
|
_showVaultQuery(matterNameId, query, cd, FJQC)
|
|
41815
|
-
except (GAPI.notFound, GAPI.badRequest, GAPI.forbidden) as e:
|
|
41829
|
+
except (GAPI.notFound, GAPI.badRequest, GAPI.forbidden, GAPI.invalidArgument) as e:
|
|
41816
41830
|
entityActionFailedWarning([Ent.VAULT_MATTER, matterNameId, Ent.VAULT_QUERY, queryNameId], str(e))
|
|
41817
41831
|
|
|
41818
41832
|
PRINT_VAULT_QUERIES_TITLES = ['matterId', 'matterName', 'savedQueryId', 'displayName']
|
|
@@ -41853,9 +41867,9 @@ def doPrintShowVaultQueries():
|
|
|
41853
41867
|
try:
|
|
41854
41868
|
results = callGAPIpages(v.matters(), 'list', 'matters',
|
|
41855
41869
|
pageMessage=getPageMessage(),
|
|
41856
|
-
throwReasons=[GAPI.FORBIDDEN],
|
|
41870
|
+
throwReasons=[GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
|
|
41857
41871
|
view='BASIC', state='OPEN', fields='matters(matterId,name,state),nextPageToken')
|
|
41858
|
-
except GAPI.forbidden as e:
|
|
41872
|
+
except (GAPI.forbidden, GAPI.invalidArgument) as e:
|
|
41859
41873
|
entityActionFailedWarning([Ent.VAULT_QUERY, None], str(e))
|
|
41860
41874
|
return
|
|
41861
41875
|
else:
|
|
@@ -41882,12 +41896,12 @@ def doPrintShowVaultQueries():
|
|
|
41882
41896
|
try:
|
|
41883
41897
|
queries = callGAPIpages(v.matters().savedQueries(), 'list', 'savedQueries',
|
|
41884
41898
|
pageMessage=pageMessage,
|
|
41885
|
-
throwReasons=[GAPI.FAILED_PRECONDITION, GAPI.FORBIDDEN],
|
|
41899
|
+
throwReasons=[GAPI.FAILED_PRECONDITION, GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
|
|
41886
41900
|
matterId=matterId, fields=fields)
|
|
41887
41901
|
except GAPI.failedPrecondition:
|
|
41888
41902
|
warnMatterNotOpen(v, matter, matterNameId, j, jcount)
|
|
41889
41903
|
continue
|
|
41890
|
-
except GAPI.forbidden as e:
|
|
41904
|
+
except (GAPI.forbidden, GAPI.invalidArgument) as e:
|
|
41891
41905
|
entityActionFailedWarning([Ent.VAULT_QUERY, None], str(e))
|
|
41892
41906
|
break
|
|
41893
41907
|
else:
|
|
@@ -41974,7 +41988,7 @@ def doCreateVaultMatter():
|
|
|
41974
41988
|
body['name'] = f'GAM Matter - {ISOformatTimeStamp(todaysTime())}'
|
|
41975
41989
|
try:
|
|
41976
41990
|
matter = callGAPI(v.matters(), 'create',
|
|
41977
|
-
throwReasons=[GAPI.ALREADY_EXISTS, GAPI.FORBIDDEN],
|
|
41991
|
+
throwReasons=[GAPI.ALREADY_EXISTS, GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
|
|
41978
41992
|
body=body)
|
|
41979
41993
|
matterId = matter['matterId']
|
|
41980
41994
|
matterNameId = formatVaultNameId(matter['name'], matterId)
|
|
@@ -41982,7 +41996,7 @@ def doCreateVaultMatter():
|
|
|
41982
41996
|
entityActionPerformed([Ent.VAULT_MATTER, matterNameId])
|
|
41983
41997
|
else:
|
|
41984
41998
|
writeStdout(f'{matterId}\n')
|
|
41985
|
-
except (GAPI.alreadyExists, GAPI.forbidden) as e:
|
|
41999
|
+
except (GAPI.alreadyExists, GAPI.forbidden, GAPI.invalidArgument) as e:
|
|
41986
42000
|
entityActionFailedWarning([Ent.VAULT_MATTER, body['name']], str(e))
|
|
41987
42001
|
return
|
|
41988
42002
|
jcount = len(collaborators)
|
|
@@ -41997,11 +42011,11 @@ def doCreateVaultMatter():
|
|
|
41997
42011
|
cbody['matterPermission']['accountId'] = collaborator['id']
|
|
41998
42012
|
try:
|
|
41999
42013
|
callGAPI(v.matters(), 'addPermissions',
|
|
42000
|
-
throwReasons=[GAPI.FAILED_PRECONDITION, GAPI.FORBIDDEN],
|
|
42014
|
+
throwReasons=[GAPI.FAILED_PRECONDITION, GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
|
|
42001
42015
|
matterId=matterId, body=cbody)
|
|
42002
42016
|
if not returnIdOnly:
|
|
42003
42017
|
entityActionPerformed([Ent.VAULT_MATTER, matterNameId, Ent.COLLABORATOR, collaborator['email']], j, jcount)
|
|
42004
|
-
except (GAPI.failedPrecondition, GAPI.forbidden) as e:
|
|
42018
|
+
except (GAPI.failedPrecondition, GAPI.forbidden, GAPI.invalidArgument) as e:
|
|
42005
42019
|
entityActionFailedWarning([Ent.VAULT_MATTER, matterNameId], str(e))
|
|
42006
42020
|
break
|
|
42007
42021
|
Ind.Decrement()
|
|
@@ -42025,10 +42039,10 @@ def doActionVaultMatter(action, matterId=None, matterNameId=None, v=None):
|
|
|
42025
42039
|
action_kwargs = {} if action == 'delete' else {'body': {}}
|
|
42026
42040
|
try:
|
|
42027
42041
|
callGAPI(v.matters(), action,
|
|
42028
|
-
throwReasons=[GAPI.NOT_FOUND, GAPI.FAILED_PRECONDITION, GAPI.FORBIDDEN],
|
|
42042
|
+
throwReasons=[GAPI.NOT_FOUND, GAPI.FAILED_PRECONDITION, GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
|
|
42029
42043
|
matterId=matterId, **action_kwargs)
|
|
42030
42044
|
entityActionPerformed([Ent.VAULT_MATTER, matterNameId])
|
|
42031
|
-
except (GAPI.notFound, GAPI.failedPrecondition, GAPI.forbidden) as e:
|
|
42045
|
+
except (GAPI.notFound, GAPI.failedPrecondition, GAPI.forbidden, GAPI.invalidArgument) as e:
|
|
42032
42046
|
entityActionFailedWarning([Ent.VAULT_MATTER, matterNameId], str(e))
|
|
42033
42047
|
|
|
42034
42048
|
# gam close vaultmatter|matter <MatterItem>
|
|
@@ -42081,7 +42095,7 @@ def doUpdateVaultMatter():
|
|
|
42081
42095
|
if 'name' not in body or 'description' not in body:
|
|
42082
42096
|
# bah, API requires name/description to be sent on update even when it's not changing
|
|
42083
42097
|
result = callGAPI(v.matters(), 'get',
|
|
42084
|
-
throwReasons=[GAPI.NOT_FOUND, GAPI.FORBIDDEN],
|
|
42098
|
+
throwReasons=[GAPI.NOT_FOUND, GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
|
|
42085
42099
|
matterId=matterId, view='BASIC')
|
|
42086
42100
|
body.setdefault('name', result['name'])
|
|
42087
42101
|
body.setdefault('description', result.get('description'))
|
|
@@ -42089,7 +42103,7 @@ def doUpdateVaultMatter():
|
|
|
42089
42103
|
throwReasons=[GAPI.NOT_FOUND, GAPI.FAILED_PRECONDITION, GAPI.FORBIDDEN],
|
|
42090
42104
|
matterId=matterId, body=body)
|
|
42091
42105
|
entityActionPerformed([Ent.VAULT_MATTER, matterNameId])
|
|
42092
|
-
except (GAPI.notFound, GAPI.failedPrecondition, GAPI.forbidden) as e:
|
|
42106
|
+
except (GAPI.notFound, GAPI.failedPrecondition, GAPI.forbidden, GAPI.invalidArgument) as e:
|
|
42093
42107
|
entityActionFailedWarning([Ent.VAULT_MATTER, matterNameId], str(e))
|
|
42094
42108
|
return
|
|
42095
42109
|
jcount = len(addCollaborators)
|
|
@@ -42102,10 +42116,10 @@ def doUpdateVaultMatter():
|
|
|
42102
42116
|
j += 1
|
|
42103
42117
|
try:
|
|
42104
42118
|
callGAPI(v.matters(), 'addPermissions',
|
|
42105
|
-
throwReasons=[GAPI.FAILED_PRECONDITION, GAPI.FORBIDDEN],
|
|
42119
|
+
throwReasons=[GAPI.FAILED_PRECONDITION, GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
|
|
42106
42120
|
matterId=matterId, body={'matterPermission': {'role': 'COLLABORATOR', 'accountId': collaborator['id']}})
|
|
42107
42121
|
entityActionPerformed([Ent.VAULT_MATTER, matterNameId, Ent.COLLABORATOR, collaborator['email']], j, jcount)
|
|
42108
|
-
except (GAPI.failedPrecondition, GAPI.forbidden) as e:
|
|
42122
|
+
except (GAPI.failedPrecondition, GAPI.forbidden, GAPI.invalidArgument) as e:
|
|
42109
42123
|
entityActionFailedWarning([Ent.VAULT_MATTER, matterNameId], str(e))
|
|
42110
42124
|
break
|
|
42111
42125
|
Ind.Decrement()
|
|
@@ -42119,10 +42133,10 @@ def doUpdateVaultMatter():
|
|
|
42119
42133
|
j += 1
|
|
42120
42134
|
try:
|
|
42121
42135
|
callGAPI(v.matters(), 'removePermissions',
|
|
42122
|
-
throwReasons=[GAPI.FAILED_PRECONDITION, GAPI.FORBIDDEN],
|
|
42136
|
+
throwReasons=[GAPI.FAILED_PRECONDITION, GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
|
|
42123
42137
|
matterId=matterId, body={'accountId': collaborator['id']})
|
|
42124
42138
|
entityActionPerformed([Ent.VAULT_MATTER, matterNameId, Ent.COLLABORATOR, collaborator['email']], j, jcount)
|
|
42125
|
-
except (GAPI.failedPrecondition, GAPI.forbidden) as e:
|
|
42139
|
+
except (GAPI.failedPrecondition, GAPI.forbidden, GAPI.invalidArgument) as e:
|
|
42126
42140
|
entityActionFailedWarning([Ent.VAULT_MATTER, matterNameId], str(e))
|
|
42127
42141
|
break
|
|
42128
42142
|
Ind.Decrement()
|
|
@@ -42155,11 +42169,11 @@ def doInfoVaultMatter():
|
|
|
42155
42169
|
fields = getFieldsFromFieldsList(fieldsList)
|
|
42156
42170
|
try:
|
|
42157
42171
|
matter = callGAPI(v.matters(), 'get',
|
|
42158
|
-
throwReasons=[GAPI.NOT_FOUND, GAPI.FORBIDDEN],
|
|
42172
|
+
throwReasons=[GAPI.NOT_FOUND, GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
|
|
42159
42173
|
matterId=matterId, view=view, fields=fields)
|
|
42160
42174
|
cd = buildGAPIObject(API.DIRECTORY) if 'matterPermissions' in matter else None
|
|
42161
42175
|
_showVaultMatter(matter, cd, FJQC)
|
|
42162
|
-
except (GAPI.notFound, GAPI.forbidden) as e:
|
|
42176
|
+
except (GAPI.notFound, GAPI.forbidden, GAPI.invalidArgument) as e:
|
|
42163
42177
|
entityActionFailedWarning([Ent.VAULT_MATTER, matterNameId], str(e))
|
|
42164
42178
|
|
|
42165
42179
|
VAULT_MATTER_STATE_MAP = {'open': 'OPEN', 'closed': 'CLOSED', 'deleted': 'DELETED'}
|
|
@@ -42215,9 +42229,9 @@ def doPrintShowVaultMatters():
|
|
|
42215
42229
|
try:
|
|
42216
42230
|
matters = callGAPIpages(v.matters(), 'list', 'matters',
|
|
42217
42231
|
pageMessage=getPageMessage(),
|
|
42218
|
-
throwReasons=[GAPI.FORBIDDEN],
|
|
42232
|
+
throwReasons=[GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT, GAPI.INVALID_ARGUMENT],
|
|
42219
42233
|
view=view, state=stateParm, fields=fields)
|
|
42220
|
-
except GAPI.forbidden as e:
|
|
42234
|
+
except (GAPI.forbidden, GAPI.invalidArgument, GAPI.invalidArgument) as e:
|
|
42221
42235
|
entityActionFailedWarning([Ent.VAULT_MATTER, None], str(e))
|
|
42222
42236
|
return
|
|
42223
42237
|
jcount = len(matters)
|
|
@@ -42408,6 +42422,8 @@ class PasswordOptions():
|
|
|
42408
42422
|
self.makeCleanPassword = True
|
|
42409
42423
|
self.cleanPasswordLen = 25
|
|
42410
42424
|
self.randomPasswordChars = None
|
|
42425
|
+
self.promptForPassword = False
|
|
42426
|
+
self.promptForUniquePassword = False
|
|
42411
42427
|
self.notifyPasswordSet = False
|
|
42412
42428
|
self.updateCmd = updateCmd
|
|
42413
42429
|
self.filename = ''
|
|
@@ -42454,7 +42470,7 @@ class PasswordOptions():
|
|
|
42454
42470
|
self.makeCleanPassword = True
|
|
42455
42471
|
notFoundBody[up] = self.CreateRandomPassword()
|
|
42456
42472
|
self.notFoundPassword = notFoundBody[up]
|
|
42457
|
-
elif myarg
|
|
42473
|
+
elif myarg in {'lograndompassword', 'logpassword'}:
|
|
42458
42474
|
self.filename = getString(Cmd.OB_FILE_NAME)
|
|
42459
42475
|
else:
|
|
42460
42476
|
return False
|
|
@@ -42475,7 +42491,8 @@ class PasswordOptions():
|
|
|
42475
42491
|
password = self.GetPassword()
|
|
42476
42492
|
if password:
|
|
42477
42493
|
body[up] = password
|
|
42478
|
-
self.makeRandomPassword = self.makeUniqueRandomPassword
|
|
42494
|
+
self.makeRandomPassword = self.makeUniqueRandomPassword =\
|
|
42495
|
+
self.promptForPassword = self.promptForUniquePassword = False
|
|
42479
42496
|
if password.lower() == 'blocklogin':
|
|
42480
42497
|
self.makeRandomPassword = True
|
|
42481
42498
|
self.makeCleanPassword = False
|
|
@@ -42488,6 +42505,13 @@ class PasswordOptions():
|
|
|
42488
42505
|
self.makeUniqueRandomPassword = self.makeCleanPassword = True
|
|
42489
42506
|
else:
|
|
42490
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
|
|
42491
42515
|
elif up == 'hashFunction':
|
|
42492
42516
|
body[up] = self.HASH_FUNCTION_MAP[myarg]
|
|
42493
42517
|
self.clearPassword = self.hashPassword = False
|
|
@@ -42510,11 +42534,17 @@ class PasswordOptions():
|
|
|
42510
42534
|
except Exception:
|
|
42511
42535
|
pass
|
|
42512
42536
|
|
|
42513
|
-
def AssignPassword(self, body, notify, notFoundBody, createIfNotFound):
|
|
42537
|
+
def AssignPassword(self, body, notify, notFoundBody, createIfNotFound, user=None):
|
|
42514
42538
|
up = 'password'
|
|
42515
42539
|
if self.makeRandomPassword or self.makeUniqueRandomPassword:
|
|
42516
42540
|
body[up] = self.CreateRandomPassword()
|
|
42517
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]
|
|
42518
42548
|
if up in body:
|
|
42519
42549
|
self.FinalizePassword(body, notify, up)
|
|
42520
42550
|
elif 'hashFunction' in body:
|
|
@@ -43148,7 +43178,12 @@ def getUserAttributes(cd, updateCmd, noUid=False):
|
|
|
43148
43178
|
body[up][schemaName][fieldName] = None
|
|
43149
43179
|
else:
|
|
43150
43180
|
unknownArgumentExit()
|
|
43151
|
-
if
|
|
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:
|
|
43152
43187
|
PwdOpts.AssignPassword(body, notify, notFoundBody, parameters['createIfNotFound'])
|
|
43153
43188
|
return (body, notify, tagReplacements, addGroups, addAliases, PwdOpts,
|
|
43154
43189
|
updatePrimaryEmail, notFoundBody, groupOrgUnitMap, parameters,
|
|
@@ -43182,7 +43217,7 @@ def createUserAddAliases(cd, user, aliasList, i, count):
|
|
|
43182
43217
|
# [replyto <EmailAaddress>]
|
|
43183
43218
|
# [<NotifyMessageContent>]
|
|
43184
43219
|
# (replace <Tag> <UserReplacement>)*]
|
|
43185
|
-
# [
|
|
43220
|
+
# [logpassword <FileName>] [ignorenullpassword]
|
|
43186
43221
|
# [verifynotinvitable]
|
|
43187
43222
|
# [addnumericsuffixonduplicate <Number>]
|
|
43188
43223
|
def doCreateUser():
|
|
@@ -43287,7 +43322,7 @@ def verifyUserPrimaryEmail(cd, user, createIfNotFound, i, count):
|
|
|
43287
43322
|
# [<NotifyMessageContent>]
|
|
43288
43323
|
# (replace <Tag> <UserReplacement>)*]
|
|
43289
43324
|
# [notifyonupdate [<Boolean>]]
|
|
43290
|
-
# [
|
|
43325
|
+
# [logpassword <FileName>] [ignorenullpassword]
|
|
43291
43326
|
def updateUsers(entityList):
|
|
43292
43327
|
def waitingForCreationToComplete(sleep_time):
|
|
43293
43328
|
writeStderr(Ind.Spaces()+Msg.WAITING_FOR_ITEM_CREATION_TO_COMPLETE_SLEEPING.format(Ent.Singular(Ent.USER), sleep_time))
|
|
@@ -43369,8 +43404,8 @@ def updateUsers(entityList):
|
|
|
43369
43404
|
if isInvitableUser:
|
|
43370
43405
|
entityActionNotPerformedWarning([Ent.USER, body['primaryEmail']], Msg.EMAIL_ADDRESS_IS_UNMANAGED_ACCOUNT, i, count)
|
|
43371
43406
|
continue
|
|
43372
|
-
if PwdOpts.makeUniqueRandomPassword:
|
|
43373
|
-
PwdOpts.AssignPassword(body, notify, notFoundBody, parameters['createIfNotFound'])
|
|
43407
|
+
if PwdOpts.makeUniqueRandomPassword or PwdOpts.promptForUniquePassword:
|
|
43408
|
+
PwdOpts.AssignPassword(body, notify, notFoundBody, parameters['createIfNotFound'], userKey)
|
|
43374
43409
|
retry = 0
|
|
43375
43410
|
while True:
|
|
43376
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,4 +1,4 @@
|
|
|
1
|
-
gam/__init__.py,sha256=
|
|
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=
|
|
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.
|
|
69
|
-
gam7-7.5.
|
|
70
|
-
gam7-7.5.
|
|
71
|
-
gam7-7.5.
|
|
72
|
-
gam7-7.5.
|
|
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
|
|
File without changes
|
|
File without changes
|