gam7 7.23.7__py3-none-any.whl → 7.24.1__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 +23 -21
- gam/gamlib/glapi.py +21 -4
- {gam7-7.23.7.dist-info → gam7-7.24.1.dist-info}/METADATA +1 -1
- {gam7-7.23.7.dist-info → gam7-7.24.1.dist-info}/RECORD +7 -7
- {gam7-7.23.7.dist-info → gam7-7.24.1.dist-info}/WHEEL +0 -0
- {gam7-7.23.7.dist-info → gam7-7.24.1.dist-info}/entry_points.txt +0 -0
- {gam7-7.23.7.dist-info → gam7-7.24.1.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.
|
|
28
|
+
__version__ = '7.24.01'
|
|
29
29
|
__license__ = 'Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)'
|
|
30
30
|
|
|
31
31
|
#pylint: disable=wrong-import-position
|
|
@@ -3049,9 +3049,10 @@ def getGDocData(gformat):
|
|
|
3049
3049
|
mimeType = GDOC_FORMAT_MIME_TYPES[gformat]
|
|
3050
3050
|
user = getEmailAddress()
|
|
3051
3051
|
fileIdEntity = getDriveFileEntity(queryShortcutsOK=False)
|
|
3052
|
-
|
|
3052
|
+
_, drive = buildGAPIServiceObject(chooseSaAPI(API.DRIVECD, API.DRIVE3), user)
|
|
3053
3053
|
if not drive:
|
|
3054
3054
|
sys.exit(GM.Globals[GM.SYSEXITRC])
|
|
3055
|
+
_, _, jcount = _validateUserGetFileIDs(user, 0, 0, fileIdEntity, drive=drive)
|
|
3055
3056
|
if jcount == 0:
|
|
3056
3057
|
getGDocSheetDataFailedExit([Ent.USER, user], Msg.NO_ENTITIES_FOUND.format(Ent.Singular(Ent.DRIVE_FILE)))
|
|
3057
3058
|
if jcount > 1:
|
|
@@ -3105,14 +3106,15 @@ def getGSheetData():
|
|
|
3105
3106
|
user = getEmailAddress()
|
|
3106
3107
|
fileIdEntity = getDriveFileEntity(queryShortcutsOK=False)
|
|
3107
3108
|
sheetEntity = getSheetEntity(False)
|
|
3108
|
-
user, drive
|
|
3109
|
+
user, drive = buildGAPIServiceObject(chooseSaAPI(API.DRIVECD, API.DRIVE3), user)
|
|
3109
3110
|
if not drive:
|
|
3110
3111
|
sys.exit(GM.Globals[GM.SYSEXITRC])
|
|
3112
|
+
_, _, jcount = _validateUserGetFileIDs(user, 0, 0, fileIdEntity, drive=drive)
|
|
3111
3113
|
if jcount == 0:
|
|
3112
3114
|
getGDocSheetDataFailedExit([Ent.USER, user], Msg.NO_ENTITIES_FOUND.format(Ent.Singular(Ent.DRIVE_FILE)))
|
|
3113
3115
|
if jcount > 1:
|
|
3114
3116
|
getGDocSheetDataFailedExit([Ent.USER, user], Msg.MULTIPLE_ENTITIES_FOUND.format(Ent.Plural(Ent.DRIVE_FILE), jcount, ','.join(fileIdEntity['list'])))
|
|
3115
|
-
_, sheet = buildGAPIServiceObject(API.SHEETS, user)
|
|
3117
|
+
_, sheet = buildGAPIServiceObject(chooseSaAPI(API.SHEETSCD, API.SHEETS), user)
|
|
3116
3118
|
if not sheet:
|
|
3117
3119
|
sys.exit(GM.Globals[GM.SYSEXITRC])
|
|
3118
3120
|
fileId = fileIdEntity['list'][0]
|
|
@@ -4801,8 +4803,6 @@ def defaultSvcAcctScopes():
|
|
|
4801
4803
|
saScopes[scope['api']].extend(scope['scope'])
|
|
4802
4804
|
saScopes[API.DRIVEACTIVITY].append(API.DRIVE_SCOPE)
|
|
4803
4805
|
saScopes[API.DRIVE2] = saScopes[API.DRIVE3]
|
|
4804
|
-
saScopes[API.DRIVETD] = saScopes[API.DRIVE3]
|
|
4805
|
-
saScopes[API.SHEETSTD] = saScopes[API.SHEETS]
|
|
4806
4806
|
return saScopes
|
|
4807
4807
|
|
|
4808
4808
|
def _getSvcAcctData():
|
|
@@ -5609,6 +5609,12 @@ def getSaUser(user):
|
|
|
5609
5609
|
GM.Globals[GM.CURRENT_CLIENT_API_SCOPES] = currentClientAPIScopes
|
|
5610
5610
|
return userEmail
|
|
5611
5611
|
|
|
5612
|
+
def chooseSaAPI(api1, api2):
|
|
5613
|
+
_getSvcAcctData()
|
|
5614
|
+
if api1 in GM.Globals[GM.SVCACCT_SCOPES]:
|
|
5615
|
+
return api1
|
|
5616
|
+
return api2
|
|
5617
|
+
|
|
5612
5618
|
def buildGAPIServiceObject(api, user, i=0, count=0, displayError=True):
|
|
5613
5619
|
userEmail = getSaUser(user)
|
|
5614
5620
|
httpObj = getHttpObj(cache=GM.Globals[GM.CACHE_DIR])
|
|
@@ -8030,7 +8036,7 @@ class CSVPrintFile():
|
|
|
8030
8036
|
|
|
8031
8037
|
def getDriveObject():
|
|
8032
8038
|
if not GC.Values[GC.TODRIVE_CLIENTACCESS]:
|
|
8033
|
-
_, drive = buildGAPIServiceObject(API.DRIVETD, self.todrive['user'])
|
|
8039
|
+
_, drive = buildGAPIServiceObject(chooseSaAPI(API.DRIVETD, API.DRIVE3), self.todrive['user'])
|
|
8034
8040
|
if not drive:
|
|
8035
8041
|
invalidTodriveUserExit(Ent.USER, Msg.NOT_FOUND)
|
|
8036
8042
|
else:
|
|
@@ -8183,7 +8189,7 @@ class CSVPrintFile():
|
|
|
8183
8189
|
if result['mimeType'] != MIMETYPE_GA_SPREADSHEET:
|
|
8184
8190
|
invalidTodriveFileIdExit([], f'{Msg.NOT_A} {Ent.Singular(Ent.SPREADSHEET)}', tdfileidLocation)
|
|
8185
8191
|
if not GC.Values[GC.TODRIVE_CLIENTACCESS]:
|
|
8186
|
-
_, sheet = buildGAPIServiceObject(API.SHEETSTD, self.todrive['user'])
|
|
8192
|
+
_, sheet = buildGAPIServiceObject(chooseSaAPI(API.SHEETSTD, API.SHEETS), self.todrive['user'])
|
|
8187
8193
|
if sheet is None:
|
|
8188
8194
|
invalidTodriveUserExit(Ent.USER, Msg.NOT_FOUND)
|
|
8189
8195
|
else:
|
|
@@ -8696,7 +8702,7 @@ class CSVPrintFile():
|
|
|
8696
8702
|
sheetTitle += tdtime.strftime(self.todrive['sheettimeformat'])
|
|
8697
8703
|
action = Act.Get()
|
|
8698
8704
|
if not GC.Values[GC.TODRIVE_CLIENTACCESS]:
|
|
8699
|
-
user, drive = buildGAPIServiceObject(API.DRIVETD, self.todrive['user'])
|
|
8705
|
+
user, drive = buildGAPIServiceObject(chooseSaAPI(API.DRIVETD, API.DRIVE3), self.todrive['user'])
|
|
8700
8706
|
if not drive:
|
|
8701
8707
|
closeFile(csvFile)
|
|
8702
8708
|
return
|
|
@@ -8729,7 +8735,7 @@ class CSVPrintFile():
|
|
|
8729
8735
|
if result['mimeType'] != MIMETYPE_GA_SPREADSHEET:
|
|
8730
8736
|
todriveCSVErrorExit(entityValueList, f'{Msg.NOT_A} {Ent.Singular(Ent.SPREADSHEET)}')
|
|
8731
8737
|
if not GC.Values[GC.TODRIVE_CLIENTACCESS]:
|
|
8732
|
-
_, sheet = buildGAPIServiceObject(API.SHEETSTD, user)
|
|
8738
|
+
_, sheet = buildGAPIServiceObject(chooseSaAPI(API.SHEETSTD, API.SHEETS), user)
|
|
8733
8739
|
if sheet is None:
|
|
8734
8740
|
return
|
|
8735
8741
|
else:
|
|
@@ -8877,7 +8883,7 @@ class CSVPrintFile():
|
|
|
8877
8883
|
(self.todrive['sheetEntity'] or self.todrive['locale'] or self.todrive['timeZone'] or
|
|
8878
8884
|
self.todrive['sheettitle'] or self.todrive['cellwrap'] or self.todrive['cellnumberformat'])):
|
|
8879
8885
|
if not GC.Values[GC.TODRIVE_CLIENTACCESS]:
|
|
8880
|
-
_, sheet = buildGAPIServiceObject(API.SHEETSTD, user)
|
|
8886
|
+
_, sheet = buildGAPIServiceObject(chooseSaAPI(API.SHEETSTD, API.SHEETS), user)
|
|
8881
8887
|
if sheet is None:
|
|
8882
8888
|
return
|
|
8883
8889
|
else:
|
|
@@ -16263,7 +16269,7 @@ def _showCustomerLicenseInfo(customerInfo, FJQC):
|
|
|
16263
16269
|
while True:
|
|
16264
16270
|
try:
|
|
16265
16271
|
result = callGAPI(rep.customerUsageReports(), 'get',
|
|
16266
|
-
throwReasons=[GAPI.INVALID, GAPI.FORBIDDEN, GAPI.PERMISSION_DENIED],
|
|
16272
|
+
throwReasons=[GAPI.INVALID, GAPI.FAILED_PRECONDITION, GAPI.FORBIDDEN, GAPI.PERMISSION_DENIED],
|
|
16267
16273
|
date=tryDate, customerId=customerInfo['id'],
|
|
16268
16274
|
fields='warnings,usageReports', parameters=parameters)
|
|
16269
16275
|
usageReports = numUsersAvailable(result)
|
|
@@ -16276,7 +16282,7 @@ def _showCustomerLicenseInfo(customerInfo, FJQC):
|
|
|
16276
16282
|
if fullData == 0:
|
|
16277
16283
|
continue
|
|
16278
16284
|
break
|
|
16279
|
-
except GAPI.invalid as e:
|
|
16285
|
+
except (GAPI.invalid, GAPI.failedPrecondition) as e:
|
|
16280
16286
|
tryDate = _adjustTryDate(str(e), 0, -1, tryDate)
|
|
16281
16287
|
if not tryDate:
|
|
16282
16288
|
return
|
|
@@ -17052,10 +17058,7 @@ def doPrintShowAdmins():
|
|
|
17052
17058
|
if assignedTo not in assignedToIdEmailMap:
|
|
17053
17059
|
emailTypes = ALL_ASSIGNEE_TYPES if admin.get('assigneeType', '') != 'group' else ['group']
|
|
17054
17060
|
assigneeEmail, assigneeType = convertUIDtoEmailAddressWithType(f'uid:{assignedTo}', cd, sal, emailTypes=emailTypes)
|
|
17055
|
-
|
|
17056
|
-
assignedToField = ADMIN_ASSIGNEE_TYPE_TO_ASSIGNEDTO_FIELD_MAP[assigneeType]
|
|
17057
|
-
else:
|
|
17058
|
-
assignedToField = 'assignedToUnknown'
|
|
17061
|
+
assignedToField = ADMIN_ASSIGNEE_TYPE_TO_ASSIGNEDTO_FIELD_MAP.get(assigneeType, 'assignedToUnknown')
|
|
17059
17062
|
if assignedToField == 'assignedToUnknown':
|
|
17060
17063
|
assigneeEmail = True
|
|
17061
17064
|
assignedToIdEmailMap[assignedTo] = {'assignedToField': assignedToField, 'assigneeEmail': assigneeEmail}
|
|
@@ -17084,6 +17087,7 @@ def doPrintShowAdmins():
|
|
|
17084
17087
|
typesSet = set()
|
|
17085
17088
|
kwargs = {}
|
|
17086
17089
|
rolePrivileges = {}
|
|
17090
|
+
allGroupRoles = ','.join(sorted(ALL_GROUP_ROLES))
|
|
17087
17091
|
fieldsList = PRINT_ADMIN_FIELDS+['assigneeType']
|
|
17088
17092
|
assignedToIdEmailMap = {}
|
|
17089
17093
|
while Cmd.ArgumentsRemaining():
|
|
@@ -17098,7 +17102,6 @@ def doPrintShowAdmins():
|
|
|
17098
17102
|
pass
|
|
17099
17103
|
elif myarg == 'recursive':
|
|
17100
17104
|
recursive = True
|
|
17101
|
-
allGroupRoles = ','.join(sorted(ALL_GROUP_ROLES))
|
|
17102
17105
|
memberOptions = initMemberOptions()
|
|
17103
17106
|
memberOptions[MEMBEROPTION_INCLUDEDERIVEDMEMBERSHIP] = True
|
|
17104
17107
|
memberOptions[MEMBEROPTION_DISPLAYMATCH] = False
|
|
@@ -17136,7 +17139,7 @@ def doPrintShowAdmins():
|
|
|
17136
17139
|
return
|
|
17137
17140
|
except GAPI.notFound as e:
|
|
17138
17141
|
entityActionFailedExit([Ent.ADMIN_ROLE, kwargs['roleId']], str(e))
|
|
17139
|
-
except
|
|
17142
|
+
except GAPI.serviceNotAvailable as e:
|
|
17140
17143
|
entityActionFailedExit([Ent.ADMINISTRATOR, userKey], str(e))
|
|
17141
17144
|
except (GAPI.badRequest, GAPI.customerNotFound):
|
|
17142
17145
|
accessErrorExit(cd)
|
|
@@ -17164,7 +17167,6 @@ def doPrintShowAdmins():
|
|
|
17164
17167
|
groupMembers[assignedTo] = membersList[:]
|
|
17165
17168
|
if not _setNamesFromIds(admin, _getPrivileges(admin)):
|
|
17166
17169
|
continue
|
|
17167
|
-
expandedAdmins.append(admin)
|
|
17168
17170
|
if not groupMembers[assignedTo]:
|
|
17169
17171
|
expandedAdmins.append(admin)
|
|
17170
17172
|
continue
|
|
@@ -17203,7 +17205,7 @@ def doPrintShowAdmins():
|
|
|
17203
17205
|
else:
|
|
17204
17206
|
for admin in expandedAdmins:
|
|
17205
17207
|
admin.pop('assigneeType', None)
|
|
17206
|
-
admin.pop('assignedToField')
|
|
17208
|
+
admin.pop('assignedToField', None)
|
|
17207
17209
|
if not oneItemPerRow or 'rolePrivileges' not in admin:
|
|
17208
17210
|
csvPF.WriteRowTitles(flattenJSON(admin))
|
|
17209
17211
|
else:
|
gam/gamlib/glapi.py
CHANGED
|
@@ -60,6 +60,7 @@ DIRECTORY = 'directory'
|
|
|
60
60
|
DOCS = 'docs'
|
|
61
61
|
DRIVE2 = 'drive2'
|
|
62
62
|
DRIVE3 = 'drive3'
|
|
63
|
+
DRIVECD = 'drivecd'
|
|
63
64
|
DRIVETD = 'drivetd'
|
|
64
65
|
DRIVEACTIVITY = 'driveactivity'
|
|
65
66
|
DRIVELABELS = 'drivelabels'
|
|
@@ -91,6 +92,7 @@ SERVICEACCOUNTLOOKUP = 'serviceaccountlookup'
|
|
|
91
92
|
SERVICEMANAGEMENT = 'servicemanagement'
|
|
92
93
|
SERVICEUSAGE = 'serviceusage'
|
|
93
94
|
SHEETS = 'sheets'
|
|
95
|
+
SHEETSCD = 'sheetscd'
|
|
94
96
|
SHEETSTD = 'sheetstd'
|
|
95
97
|
SITEVERIFICATION = 'siteVerification'
|
|
96
98
|
STORAGE = 'storage'
|
|
@@ -156,6 +158,7 @@ OAUTH2_TOKEN_ERRORS = [
|
|
|
156
158
|
'access_denied: Account restricted',
|
|
157
159
|
'internal_failure: Backend Error',
|
|
158
160
|
'internal_failure: None',
|
|
161
|
+
'invalid_account: Forbidden',
|
|
159
162
|
'invalid_grant',
|
|
160
163
|
'invalid_grant: Bad Request',
|
|
161
164
|
'invalid_grant: Invalid email or User ID',
|
|
@@ -253,7 +256,8 @@ _INFO = {
|
|
|
253
256
|
DOCS: {'name': 'Docs API', 'version': 'v1', 'v2discovery': True},
|
|
254
257
|
DRIVE2: {'name': 'Drive API v2', 'version': 'v2', 'v2discovery': False, 'mappedAPI': 'drive'},
|
|
255
258
|
DRIVE3: {'name': 'Drive API v3', 'version': 'v3', 'v2discovery': False, 'mappedAPI': 'drive'},
|
|
256
|
-
|
|
259
|
+
DRIVECD: {'name': 'Drive API v3 - read command data', 'version': 'v3', 'v2discovery': False, 'mappedAPI': 'drive'},
|
|
260
|
+
DRIVETD: {'name': 'Drive API v3 - write todrive data', 'version': 'v3', 'v2discovery': False, 'mappedAPI': 'drive'},
|
|
257
261
|
DRIVEACTIVITY: {'name': 'Drive Activity API v2', 'version': 'v2', 'v2discovery': True},
|
|
258
262
|
DRIVELABELS_ADMIN: {'name': 'Drive Labels API - Admin', 'version': 'v2', 'v2discovery': True, 'mappedAPI': DRIVELABELS},
|
|
259
263
|
DRIVELABELS_USER: {'name': 'Drive Labels API - User', 'version': 'v2', 'v2discovery': True, 'mappedAPI': DRIVELABELS},
|
|
@@ -283,7 +287,8 @@ _INFO = {
|
|
|
283
287
|
SERVICEMANAGEMENT: {'name': 'Service Management API', 'version': 'v1', 'v2discovery': True},
|
|
284
288
|
SERVICEUSAGE: {'name': 'Service Usage API', 'version': 'v1', 'v2discovery': True},
|
|
285
289
|
SHEETS: {'name': 'Sheets API', 'version': 'v4', 'v2discovery': True},
|
|
286
|
-
|
|
290
|
+
SHEETSCD: {'name': 'Sheets API - read command data', 'version': 'v4', 'v2discovery': True, 'mappedAPI': SHEETS},
|
|
291
|
+
SHEETSTD: {'name': 'Sheets API - write todrive data', 'version': 'v4', 'v2discovery': True, 'mappedAPI': SHEETS},
|
|
287
292
|
SITEVERIFICATION: {'name': 'Site Verification API', 'version': 'v1', 'v2discovery': True},
|
|
288
293
|
STORAGE: {'name': 'Cloud Storage API', 'version': 'v1', 'v2discovery': True},
|
|
289
294
|
STORAGEREAD: {'name': 'Cloud Storage API - Read', 'version': 'v1', 'v2discovery': True, 'mappedAPI': STORAGE},
|
|
@@ -750,9 +755,15 @@ _SVCACCT_SCOPES = [
|
|
|
750
755
|
]
|
|
751
756
|
|
|
752
757
|
_SVCACCT_SPECIAL_SCOPES = [
|
|
753
|
-
{'name': 'Drive API -
|
|
758
|
+
{'name': 'Drive API - read command data',
|
|
759
|
+
'api': DRIVECD,
|
|
760
|
+
'subscopes': [],
|
|
761
|
+
'offByDefault': True,
|
|
762
|
+
'scope': DRIVE_SCOPE+'.readonly'},
|
|
763
|
+
{'name': 'Drive API - write todrive data',
|
|
754
764
|
'api': DRIVETD,
|
|
755
765
|
'subscopes': [],
|
|
766
|
+
'offByDefault': True,
|
|
756
767
|
'scope': DRIVE_SCOPE},
|
|
757
768
|
{'name': 'Gmail API - Full Access - read only',
|
|
758
769
|
'api': GMAIL,
|
|
@@ -764,8 +775,14 @@ _SVCACCT_SPECIAL_SCOPES = [
|
|
|
764
775
|
'subscopes': [],
|
|
765
776
|
'offByDefault': True,
|
|
766
777
|
'scope': GMAIL_SEND_SCOPE},
|
|
767
|
-
{'name': 'Sheets API -
|
|
778
|
+
{'name': 'Sheets API - read command data',
|
|
779
|
+
'api': SHEETSCD,
|
|
780
|
+
'offByDefault': True,
|
|
781
|
+
'subscopes': [],
|
|
782
|
+
'scope': 'https://www.googleapis.com/auth/spreadsheets.readonly'},
|
|
783
|
+
{'name': 'Sheets API - write todrive data',
|
|
768
784
|
'api': SHEETSTD,
|
|
785
|
+
'offByDefault': True,
|
|
769
786
|
'subscopes': [],
|
|
770
787
|
'scope': 'https://www.googleapis.com/auth/spreadsheets'},
|
|
771
788
|
]
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
gam/__init__.py,sha256=
|
|
1
|
+
gam/__init__.py,sha256=i7YaQlrH7H5C7Zt11T0UazlQbcMgwLtfBN8v5tTXjFs,3623835
|
|
2
2
|
gam/__main__.py,sha256=amz0-959ph6zkZKqjaar4n60yho-T37w6qWI36qx0CA,1049
|
|
3
3
|
gam/cacerts.pem,sha256=DUsVo2XlFYwfkhe3gnxa-Km4Z4noz74hSApXwTT-nQE,44344
|
|
4
4
|
gam/cbcm-v1.1beta1.json,sha256=xO5XloCQQULmPbFBx5bckdqmbLFQ7sJ2TImhE1ysDIY,19439
|
|
@@ -22,7 +22,7 @@ gam/atom/token_store.py,sha256=7E6Ecvxa86WCvl1pJAhv78jg9OxQv8pMtIUcPhZCq04,3803
|
|
|
22
22
|
gam/atom/url.py,sha256=pxO1TlORxyKQTQ1bkBE1unFzjnv9c8LjJkm-UEORShY,4276
|
|
23
23
|
gam/gamlib/__init__.py,sha256=z5mF-y0j8pm-YNFBaiuxB4M_GAUPG-cXWwrhYwrVReM,679
|
|
24
24
|
gam/gamlib/glaction.py,sha256=1Il_HrChVnPkzZwiZs5au4mFQVtq4K1Z42uIuR6qdnI,9419
|
|
25
|
-
gam/gamlib/glapi.py,sha256=
|
|
25
|
+
gam/gamlib/glapi.py,sha256=1iz0ml8GcWRhs2BesJ_LxrAcoRwZDn5WG6Dryoy6sg0,36755
|
|
26
26
|
gam/gamlib/glcfg.py,sha256=jX9IIrqSa8CPZ-UdnMDs2RuGo8vPh3jpgvRhI9VRbII,28325
|
|
27
27
|
gam/gamlib/glclargs.py,sha256=LlTtwJJHqU48l7SQT4bcZCWlw3Y46g42Bn1ACGW8gIk,53307
|
|
28
28
|
gam/gamlib/glentity.py,sha256=KWFomkoNE6lLE83zVqVIlJ2rkzfLkhEasW1M0TWGieA,35373
|
|
@@ -47,8 +47,8 @@ gam/gdata/apps/audit/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrK
|
|
|
47
47
|
gam/gdata/apps/audit/service.py,sha256=Z1eueThcNeVUMWP1DRWc_DGHrJCiJI8W_xj6L-cqu-Q,9658
|
|
48
48
|
gam/gdata/apps/contacts/__init__.py,sha256=Um6zgIkiahZns7yAEuC3pxHSMD8iciZ_EoynSLoYPfU,30463
|
|
49
49
|
gam/gdata/apps/contacts/service.py,sha256=5lNb-Ii1Gyek6ePFji3kyoYtCBc8CuJTwagx2BL2o14,15684
|
|
50
|
-
gam7-7.
|
|
51
|
-
gam7-7.
|
|
52
|
-
gam7-7.
|
|
53
|
-
gam7-7.
|
|
54
|
-
gam7-7.
|
|
50
|
+
gam7-7.24.1.dist-info/METADATA,sha256=wRNSzJdAGm2Wy4lQuHlh_jBpxQSwfKu6iIfv3E6mtCQ,3092
|
|
51
|
+
gam7-7.24.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
52
|
+
gam7-7.24.1.dist-info/entry_points.txt,sha256=HVUM5J7dA8YwvJfG30jiLefR19ExMs387TWugWd9sf4,42
|
|
53
|
+
gam7-7.24.1.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
|
54
|
+
gam7-7.24.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|