gam7 7.6.10__py3-none-any.whl → 7.6.12__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 +68 -76
- gam/gamlib/glapi.py +1 -8
- gam/gamlib/glclargs.py +0 -2
- gam/gamlib/glentity.py +0 -2
- {gam7-7.6.10.dist-info → gam7-7.6.12.dist-info}/METADATA +2 -2
- {gam7-7.6.10.dist-info → gam7-7.6.12.dist-info}/RECORD +9 -9
- {gam7-7.6.10.dist-info → gam7-7.6.12.dist-info}/WHEEL +0 -0
- {gam7-7.6.10.dist-info → gam7-7.6.12.dist-info}/entry_points.txt +0 -0
- {gam7-7.6.10.dist-info → gam7-7.6.12.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.06.
|
|
28
|
+
__version__ = '7.06.12'
|
|
29
29
|
__license__ = 'Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)'
|
|
30
30
|
|
|
31
31
|
#pylint: disable=wrong-import-position
|
|
@@ -95,6 +95,8 @@ import wsgiref.simple_server
|
|
|
95
95
|
import wsgiref.util
|
|
96
96
|
import zipfile
|
|
97
97
|
|
|
98
|
+
# disable legacy stuff we don't use and isn't secure
|
|
99
|
+
os.environ['CRYPTOGRAPHY_OPENSSL_NO_LEGACY'] = "1"
|
|
98
100
|
from cryptography import x509
|
|
99
101
|
from cryptography.hazmat.backends import default_backend
|
|
100
102
|
from cryptography.hazmat.primitives import hashes, serialization
|
|
@@ -9358,32 +9360,9 @@ def getOSPlatform():
|
|
|
9358
9360
|
|
|
9359
9361
|
# gam checkconnection
|
|
9360
9362
|
def doCheckConnection():
|
|
9361
|
-
|
|
9362
|
-
|
|
9363
|
-
|
|
9364
|
-
'workspace.google.com',
|
|
9365
|
-
'oauth2.googleapis.com',
|
|
9366
|
-
'www.googleapis.com']
|
|
9367
|
-
fix_hosts = {'calendar-json.googleapis.com': 'www.googleapis.com',
|
|
9368
|
-
'storage-api.googleapis.com': 'storage.googleapis.com'}
|
|
9369
|
-
api_hosts = ['apps-apis.google.com',
|
|
9370
|
-
'sites.google.com',
|
|
9371
|
-
'versionhistory.googleapis.com',
|
|
9372
|
-
'www.google.com']
|
|
9373
|
-
for host in API.PROJECT_APIS:
|
|
9374
|
-
host = fix_hosts.get(host, host)
|
|
9375
|
-
if host not in api_hosts and host not in hosts:
|
|
9376
|
-
api_hosts.append(host)
|
|
9377
|
-
hosts.extend(sorted(api_hosts))
|
|
9378
|
-
host_count = len(hosts)
|
|
9379
|
-
httpObj = getHttpObj(timeout=30)
|
|
9380
|
-
httpObj.follow_redirects = False
|
|
9381
|
-
headers = {'user-agent': GAM_USER_AGENT}
|
|
9382
|
-
okay = createGreenText('OK')
|
|
9383
|
-
not_okay = createRedText('ERROR')
|
|
9384
|
-
try_count = 0
|
|
9385
|
-
success_count = 0
|
|
9386
|
-
for host in hosts:
|
|
9363
|
+
|
|
9364
|
+
def check_host(host):
|
|
9365
|
+
nonlocal try_count, okay, not_okay, success_count
|
|
9387
9366
|
try_count += 1
|
|
9388
9367
|
dns_err = None
|
|
9389
9368
|
ip = 'unknown'
|
|
@@ -9393,12 +9372,12 @@ def doCheckConnection():
|
|
|
9393
9372
|
dns_err = f'{not_okay}\n DNS failure: {str(e)}\n'
|
|
9394
9373
|
except Exception as e:
|
|
9395
9374
|
dns_err = f'{not_okay}\n Unknown DNS failure: {str(e)}\n'
|
|
9396
|
-
check_line = f'Checking {host} ({ip}) ({try_count}
|
|
9375
|
+
check_line = f'Checking {host} ({ip}) ({try_count})...'
|
|
9397
9376
|
writeStdout(f'{check_line:<100}')
|
|
9398
9377
|
flushStdout()
|
|
9399
9378
|
if dns_err:
|
|
9400
9379
|
writeStdout(dns_err)
|
|
9401
|
-
|
|
9380
|
+
return
|
|
9402
9381
|
gen_firewall = 'You probably have security software or a firewall on your machine or network that is preventing GAM from making Internet connections. Check your network configuration or try running GAM on a hotspot or home network to see if the problem exists only on your organization\'s network.'
|
|
9403
9382
|
try:
|
|
9404
9383
|
if host.startswith('http'):
|
|
@@ -9427,7 +9406,54 @@ def doCheckConnection():
|
|
|
9427
9406
|
writeStdout(f'{not_okay}\n Timed out trying to connect to host\n')
|
|
9428
9407
|
except Exception as e:
|
|
9429
9408
|
writeStdout(f'{not_okay}\n {str(e)}\n')
|
|
9430
|
-
|
|
9409
|
+
|
|
9410
|
+
try_count = 0
|
|
9411
|
+
httpObj = getHttpObj(timeout=30)
|
|
9412
|
+
httpObj.follow_redirects = False
|
|
9413
|
+
headers = {'user-agent': GAM_USER_AGENT}
|
|
9414
|
+
okay = createGreenText('OK')
|
|
9415
|
+
not_okay = createRedText('ERROR')
|
|
9416
|
+
success_count = 0
|
|
9417
|
+
initial_hosts = ['api.github.com',
|
|
9418
|
+
'raw.githubusercontent.com',
|
|
9419
|
+
'accounts.google.com',
|
|
9420
|
+
'oauth2.googleapis.com',
|
|
9421
|
+
'www.googleapis.com']
|
|
9422
|
+
for host in initial_hosts:
|
|
9423
|
+
check_host(host)
|
|
9424
|
+
api_hosts = ['apps-apis.google.com',
|
|
9425
|
+
'www.google.com']
|
|
9426
|
+
for host in api_hosts:
|
|
9427
|
+
check_host(host)
|
|
9428
|
+
# For v2 discovery APIs, GAM gets discovery file from <api>.googleapis.com so
|
|
9429
|
+
# add those domains.
|
|
9430
|
+
disc_hosts = []
|
|
9431
|
+
for api, config in API._INFO.items():
|
|
9432
|
+
if config.get('v2discovery') and not config.get('localdiscovery'):
|
|
9433
|
+
if mapped_api := config.get('mappedAPI'):
|
|
9434
|
+
api = mapped_api
|
|
9435
|
+
host = f'{api}.googleapis.com'
|
|
9436
|
+
if host not in disc_hosts:
|
|
9437
|
+
disc_hosts.append(host)
|
|
9438
|
+
for host in disc_hosts:
|
|
9439
|
+
check_host(host)
|
|
9440
|
+
checked_hosts = initial_hosts + api_hosts + disc_hosts
|
|
9441
|
+
# now we need to "build" each API and check it's base URL host
|
|
9442
|
+
# if we haven't already. This may not be any hosts at all but
|
|
9443
|
+
# to ensure we are checking all hosts GAM may use we should
|
|
9444
|
+
# keep this.
|
|
9445
|
+
for api in API._INFO:
|
|
9446
|
+
if api in [API.CONTACTS, API.EMAIL_AUDIT]:
|
|
9447
|
+
continue
|
|
9448
|
+
svc = getService(api, httpObj)
|
|
9449
|
+
base_url = svc._rootDesc.get('baseUrl')
|
|
9450
|
+
parsed_base_url = urlparse(base_url)
|
|
9451
|
+
base_host = parsed_base_url.netloc
|
|
9452
|
+
if base_host not in checked_hosts:
|
|
9453
|
+
writeStdout(f'Checking {base_host} for {api}\n')
|
|
9454
|
+
check_host(base_host)
|
|
9455
|
+
checked_hosts.append(base_host)
|
|
9456
|
+
if success_count == try_count:
|
|
9431
9457
|
writeStdout(createGreenText('All hosts passed!\n'))
|
|
9432
9458
|
else:
|
|
9433
9459
|
systemErrorExit(3, createYellowText('Some hosts failed to connect! Please follow the recommendations for those hosts to correct any issues and try again.'))
|
|
@@ -15778,27 +15804,13 @@ ANALYTIC_ENTITY_MAP = {
|
|
|
15778
15804
|
'pageSize': 50,
|
|
15779
15805
|
'maxPageSize': 200,
|
|
15780
15806
|
},
|
|
15781
|
-
Ent.ANALYTIC_UA_PROPERTY:
|
|
15782
|
-
{'titles': ['User', 'accountId', 'name', 'id', 'created', 'updated'],
|
|
15783
|
-
'JSONtitles': ['User', 'accountId', 'name', 'id', 'JSON'],
|
|
15784
|
-
'timeObjects': ['created', 'updated'],
|
|
15785
|
-
'items': 'items',
|
|
15786
|
-
'pageSize': 50,
|
|
15787
|
-
'maxPageSize': 200,
|
|
15788
|
-
},
|
|
15789
15807
|
}
|
|
15790
15808
|
|
|
15791
15809
|
def printShowAnalyticItems(users, entityType):
|
|
15792
15810
|
analyticEntityMap = ANALYTIC_ENTITY_MAP[entityType]
|
|
15793
15811
|
csvPF = CSVPrintFile(analyticEntityMap['titles'], 'sortall') if Act.csvFormat() else None
|
|
15794
15812
|
FJQC = FormatJSONQuoteChar(csvPF)
|
|
15795
|
-
|
|
15796
|
-
kwargs = {'pageSize': analyticEntityMap['pageSize']}
|
|
15797
|
-
api = API.ANALYTICS_ADMIN
|
|
15798
|
-
else:
|
|
15799
|
-
# kwargs = {'webPropertyId': '~all'}
|
|
15800
|
-
kwargs = {}
|
|
15801
|
-
api = API.ANALYTICS
|
|
15813
|
+
kwargs = {'pageSize': analyticEntityMap['pageSize']}
|
|
15802
15814
|
if entityType in {Ent.ANALYTIC_ACCOUNT, Ent.ANALYTIC_PROPERTY}:
|
|
15803
15815
|
kwargs['showDeleted'] = False
|
|
15804
15816
|
while Cmd.ArgumentsRemaining():
|
|
@@ -15811,16 +15823,12 @@ def printShowAnalyticItems(users, entityType):
|
|
|
15811
15823
|
kwargs['showDeleted'] = getBoolean()
|
|
15812
15824
|
elif entityType == Ent.ANALYTIC_PROPERTY and myarg == 'filter':
|
|
15813
15825
|
kwargs['filter'] = getString(Cmd.OB_STRING)
|
|
15814
|
-
elif entityType == Ent.ANALYTIC_UA_PROPERTY and myarg == 'accountid':
|
|
15815
|
-
kwargs['accountId'] = getString(Cmd.OB_STRING).replace('accounts/', '')
|
|
15816
15826
|
elif entityType == Ent.ANALYTIC_DATASTREAM and myarg == 'parent':
|
|
15817
15827
|
kwargs['parent'] = getString(Cmd.OB_STRING)
|
|
15818
15828
|
else:
|
|
15819
15829
|
FJQC.GetFormatJSONQuoteChar(myarg, True)
|
|
15820
15830
|
if entityType == Ent.ANALYTIC_PROPERTY and 'filter' not in kwargs:
|
|
15821
15831
|
missingArgumentExit('filter')
|
|
15822
|
-
if entityType == Ent.ANALYTIC_UA_PROPERTY and 'accountId' not in kwargs:
|
|
15823
|
-
missingArgumentExit('accountid')
|
|
15824
15832
|
if entityType == Ent.ANALYTIC_DATASTREAM and 'parent' not in kwargs:
|
|
15825
15833
|
missingArgumentExit('parent')
|
|
15826
15834
|
if csvPF and FJQC.formatJSON:
|
|
@@ -15828,7 +15836,7 @@ def printShowAnalyticItems(users, entityType):
|
|
|
15828
15836
|
i, count, users = getEntityArgument(users)
|
|
15829
15837
|
for user in users:
|
|
15830
15838
|
i += 1
|
|
15831
|
-
user, analytics = buildGAPIServiceObject(
|
|
15839
|
+
user, analytics = buildGAPIServiceObject(API.ANALYTICS_ADMIN, user, i, count)
|
|
15832
15840
|
if not analytics:
|
|
15833
15841
|
continue
|
|
15834
15842
|
if entityType == Ent.ANALYTIC_ACCOUNT:
|
|
@@ -15837,11 +15845,8 @@ def printShowAnalyticItems(users, entityType):
|
|
|
15837
15845
|
service = analytics.accountSummaries()
|
|
15838
15846
|
elif entityType == Ent.ANALYTIC_DATASTREAM:
|
|
15839
15847
|
service = analytics.properties().dataStreams()
|
|
15840
|
-
|
|
15848
|
+
else: # entityType == Ent.ANALYTIC_PROPERTY:
|
|
15841
15849
|
service = analytics.properties()
|
|
15842
|
-
else: #Ent.ANALYTIC_UA_PROPERTY:
|
|
15843
|
-
service = analytics.management().webproperties()
|
|
15844
|
-
# service = analytics.management().profiles()
|
|
15845
15850
|
if csvPF:
|
|
15846
15851
|
printGettingAllEntityItemsForWhom(entityType, user, i, count)
|
|
15847
15852
|
pageMessage = getPageMessageForWhom()
|
|
@@ -15882,10 +15887,7 @@ def printShowAnalyticItems(users, entityType):
|
|
|
15882
15887
|
if not FJQC.formatJSON:
|
|
15883
15888
|
csvPF.WriteRowTitles(row)
|
|
15884
15889
|
elif csvPF.CheckRowTitles(row):
|
|
15885
|
-
|
|
15886
|
-
row = {'User': user, 'name': item['name'], 'displayName': item['displayName']}
|
|
15887
|
-
else:
|
|
15888
|
-
row = {'User': user, 'accountId': item['accountId'], 'id': item['id'], 'name': item['name']}
|
|
15890
|
+
row = {'User': user, 'name': item['name'], 'displayName': item['displayName']}
|
|
15889
15891
|
for field in analyticEntityMap['JSONtitles'][2:-1]:
|
|
15890
15892
|
row[field] = item[field]
|
|
15891
15893
|
row['JSON'] = json.dumps(cleanJSON(item, timeObjects=analyticEntityMap['timeObjects']),
|
|
@@ -15923,17 +15925,6 @@ def printShowAnalyticAccountSummaries(users):
|
|
|
15923
15925
|
def printShowAnalyticProperties(users):
|
|
15924
15926
|
printShowAnalyticItems(users, Ent.ANALYTIC_PROPERTY)
|
|
15925
15927
|
|
|
15926
|
-
# gam <UserTypeEntity> print analyticuaproperties [todrive <ToDriveAttribute>*]
|
|
15927
|
-
# accountid [accounts/]<String>
|
|
15928
|
-
# [maxresults <Integer>]
|
|
15929
|
-
# [formatjson [quotechar <Character>]]
|
|
15930
|
-
# gam <UserTypeEntity> show analyticuaproperties
|
|
15931
|
-
# accountid [accounts/]<String>
|
|
15932
|
-
# [maxresults <Integer>]
|
|
15933
|
-
# [formatjson]
|
|
15934
|
-
def printShowAnalyticUAProperties(users):
|
|
15935
|
-
printShowAnalyticItems(users, Ent.ANALYTIC_UA_PROPERTY)
|
|
15936
|
-
|
|
15937
15928
|
# gam <UserTypeEntity> print analyticdatastreams [todrive <ToDriveAttribute>*]
|
|
15938
15929
|
# parent <String>
|
|
15939
15930
|
# [maxresults <Integer>]
|
|
@@ -34179,7 +34170,8 @@ def getGroupMembers(cd, groupEmail, memberRoles, membersList, membersSet, i, cou
|
|
|
34179
34170
|
elif memberOptions[MEMBEROPTION_NODUPLICATES]:
|
|
34180
34171
|
groupMemberList = []
|
|
34181
34172
|
for member in groupMembers:
|
|
34182
|
-
|
|
34173
|
+
namespace = member['email'].find('@') == -1
|
|
34174
|
+
if member['type'] != Ent.TYPE_GROUP or namespace:
|
|
34183
34175
|
if ((member['type'] in typesSet and
|
|
34184
34176
|
checkMemberMatch(member, memberOptions) and
|
|
34185
34177
|
_checkMemberRoleIsSuspendedIsArchived(member, validRoles, memberOptions[MEMBEROPTION_ISSUSPENDED], memberOptions[MEMBEROPTION_ISARCHIVED]) and
|
|
@@ -34208,7 +34200,8 @@ def getGroupMembers(cd, groupEmail, memberRoles, membersList, membersSet, i, cou
|
|
|
34208
34200
|
memberOptions, memberDisplayOptions, level+1, typesSet)
|
|
34209
34201
|
else:
|
|
34210
34202
|
for member in groupMembers:
|
|
34211
|
-
|
|
34203
|
+
namespace = member['email'].find('@') == -1
|
|
34204
|
+
if member['type'] != Ent.TYPE_GROUP or namespace:
|
|
34212
34205
|
if ((member['type'] in typesSet) and
|
|
34213
34206
|
checkMemberMatch(member, memberOptions) and
|
|
34214
34207
|
_checkMemberRoleIsSuspendedIsArchived(member, validRoles,
|
|
@@ -36307,7 +36300,8 @@ def getCIGroupMembers(ci, groupName, memberRoles, membersList, membersSet, i, co
|
|
|
36307
36300
|
for member in groupMembers:
|
|
36308
36301
|
getCIGroupMemberRoleFixType(member)
|
|
36309
36302
|
memberName = member.get('preferredMemberKey', {}).get('id', '')
|
|
36310
|
-
|
|
36303
|
+
namespace = member.get('preferredMemberKey', {}).get('namespace', '')
|
|
36304
|
+
if member['type'] != Ent.TYPE_GROUP or namespace:
|
|
36311
36305
|
if (member['type'] in typesSet and
|
|
36312
36306
|
checkCIMemberMatch(member, memberOptions) and
|
|
36313
36307
|
_checkMemberRole(member, validRoles) and
|
|
@@ -36335,7 +36329,8 @@ def getCIGroupMembers(ci, groupName, memberRoles, membersList, membersSet, i, co
|
|
|
36335
36329
|
for member in groupMembers:
|
|
36336
36330
|
getCIGroupMemberRoleFixType(member)
|
|
36337
36331
|
memberName = member.get('preferredMemberKey', {}).get('id', '')
|
|
36338
|
-
|
|
36332
|
+
namespace = member.get('preferredMemberKey', {}).get('namespace', '')
|
|
36333
|
+
if member['type'] != Ent.TYPE_GROUP or namespace:
|
|
36339
36334
|
if (member['type'] in typesSet and
|
|
36340
36335
|
checkCIMemberMatch(member, memberOptions) and
|
|
36341
36336
|
_checkMemberRole(member, validRoles) and
|
|
@@ -76686,7 +76681,6 @@ USER_COMMANDS_WITH_OBJECTS = {
|
|
|
76686
76681
|
Cmd.ARG_ANALYTICACCOUNTSUMMARY: printShowAnalyticAccountSummaries,
|
|
76687
76682
|
Cmd.ARG_ANALYTICDATASTREAM: printShowAnalyticDatastreams,
|
|
76688
76683
|
Cmd.ARG_ANALYTICPROPERTY: printShowAnalyticProperties,
|
|
76689
|
-
Cmd.ARG_ANALYTICUAPROPERTY: printShowAnalyticUAProperties,
|
|
76690
76684
|
Cmd.ARG_ASP: printShowASPs,
|
|
76691
76685
|
Cmd.ARG_BACKUPCODE: printShowBackupCodes,
|
|
76692
76686
|
Cmd.ARG_CALENDAR: printShowCalendars,
|
|
@@ -76793,7 +76787,6 @@ USER_COMMANDS_WITH_OBJECTS = {
|
|
|
76793
76787
|
Cmd.ARG_ANALYTICACCOUNTSUMMARY: printShowAnalyticAccountSummaries,
|
|
76794
76788
|
Cmd.ARG_ANALYTICDATASTREAM: printShowAnalyticDatastreams,
|
|
76795
76789
|
Cmd.ARG_ANALYTICPROPERTY: printShowAnalyticProperties,
|
|
76796
|
-
Cmd.ARG_ANALYTICUAPROPERTY: printShowAnalyticUAProperties,
|
|
76797
76790
|
Cmd.ARG_ASP: printShowASPs,
|
|
76798
76791
|
Cmd.ARG_BACKUPCODE: printShowBackupCodes,
|
|
76799
76792
|
Cmd.ARG_CALENDAR: printShowCalendars,
|
|
@@ -77006,7 +76999,6 @@ USER_COMMANDS_OBJ_ALIASES = {
|
|
|
77006
76999
|
Cmd.ARG_ANALYTICACCOUNTSUMMARIES: Cmd.ARG_ANALYTICACCOUNTSUMMARY,
|
|
77007
77000
|
Cmd.ARG_ANALYTICDATASTREAMS: Cmd.ARG_ANALYTICDATASTREAM,
|
|
77008
77001
|
Cmd.ARG_ANALYTICPROPERTIES: Cmd.ARG_ANALYTICPROPERTY,
|
|
77009
|
-
Cmd.ARG_ANALYTICUAPROPERTIES: Cmd.ARG_ANALYTICUAPROPERTY,
|
|
77010
77002
|
Cmd.ARG_ASPS: Cmd.ARG_ASP,
|
|
77011
77003
|
Cmd.ARG_BACKUPCODES: Cmd.ARG_BACKUPCODE,
|
|
77012
77004
|
Cmd.ARG_CALENDARS: Cmd.ARG_CALENDAR,
|
gam/gamlib/glapi.py
CHANGED
|
@@ -22,7 +22,6 @@
|
|
|
22
22
|
# APIs
|
|
23
23
|
ACCESSCONTEXTMANAGER = 'accesscontextmanager'
|
|
24
24
|
ALERTCENTER = 'alertcenter'
|
|
25
|
-
ANALYTICS = 'analytics'
|
|
26
25
|
ANALYTICS_ADMIN = 'analyticsadmin'
|
|
27
26
|
CALENDAR = 'calendar'
|
|
28
27
|
CBCM = 'cbcm'
|
|
@@ -162,7 +161,6 @@ PROJECT_APIS = [
|
|
|
162
161
|
'accesscontextmanager.googleapis.com',
|
|
163
162
|
'admin.googleapis.com',
|
|
164
163
|
'alertcenter.googleapis.com',
|
|
165
|
-
'analytics.googleapis.com',
|
|
166
164
|
'analyticsadmin.googleapis.com',
|
|
167
165
|
# 'audit.googleapis.com',
|
|
168
166
|
'calendar-json.googleapis.com',
|
|
@@ -201,7 +199,6 @@ PROJECT_APIS = [
|
|
|
201
199
|
_INFO = {
|
|
202
200
|
ACCESSCONTEXTMANAGER: {'name': 'Access Context Manager API', 'version': 'v1', 'v2discovery': True},
|
|
203
201
|
ALERTCENTER: {'name': 'AlertCenter API', 'version': 'v1beta1', 'v2discovery': True},
|
|
204
|
-
ANALYTICS: {'name': 'Analytics API', 'version': 'v3', 'v2discovery': False},
|
|
205
202
|
ANALYTICS_ADMIN: {'name': 'Analytics Admin API', 'version': 'v1beta', 'v2discovery': True},
|
|
206
203
|
CALENDAR: {'name': 'Calendar API', 'version': 'v3', 'v2discovery': True, 'mappedAPI': 'calendar-json'},
|
|
207
204
|
CBCM: {'name': 'Chrome Browser Cloud Management API', 'version': 'v1.1beta1', 'v2discovery': True, 'localjson': True},
|
|
@@ -244,7 +241,7 @@ _INFO = {
|
|
|
244
241
|
EMAIL_AUDIT: {'name': 'Email Audit API', 'version': 'v1', 'v2discovery': False},
|
|
245
242
|
FORMS: {'name': 'Forms API', 'version': 'v1', 'v2discovery': True},
|
|
246
243
|
GMAIL: {'name': 'Gmail API', 'version': 'v1', 'v2discovery': True},
|
|
247
|
-
GROUPSMIGRATION: {'name': 'Groups Migration API', 'version': 'v1', 'v2discovery':
|
|
244
|
+
GROUPSMIGRATION: {'name': 'Groups Migration API', 'version': 'v1', 'v2discovery': True},
|
|
248
245
|
GROUPSSETTINGS: {'name': 'Groups Settings API', 'version': 'v1', 'v2discovery': True},
|
|
249
246
|
IAM: {'name': 'Identity and Access Management API', 'version': 'v1', 'v2discovery': True},
|
|
250
247
|
IAM_CREDENTIALS: {'name': 'Identity and Access Management Credentials API', 'version': 'v1', 'v2discovery': True},
|
|
@@ -532,10 +529,6 @@ _SVCACCT_SCOPES = [
|
|
|
532
529
|
'api': ALERTCENTER,
|
|
533
530
|
'subscopes': [],
|
|
534
531
|
'scope': 'https://www.googleapis.com/auth/apps.alerts'},
|
|
535
|
-
{'name': 'Analytics API - read only',
|
|
536
|
-
'api': ANALYTICS,
|
|
537
|
-
'subscopes': [],
|
|
538
|
-
'scope': 'https://www.googleapis.com/auth/analytics.readonly'},
|
|
539
532
|
{'name': 'Analytics Admin API - read only',
|
|
540
533
|
'api': ANALYTICS_ADMIN,
|
|
541
534
|
'subscopes': [],
|
gam/gamlib/glclargs.py
CHANGED
|
@@ -423,8 +423,6 @@ class GamCLArgs():
|
|
|
423
423
|
ARG_ANALYTICDATASTREAMS = 'analyticdatastreams'
|
|
424
424
|
ARG_ANALYTICPROPERTY = 'analyticproperty'
|
|
425
425
|
ARG_ANALYTICPROPERTIES = 'analyticproperties'
|
|
426
|
-
ARG_ANALYTICUAPROPERTY = 'analyticuaproperty'
|
|
427
|
-
ARG_ANALYTICUAPROPERTIES = 'analyticuaproperties'
|
|
428
426
|
ARG_API = 'api'
|
|
429
427
|
ARG_APIS = 'apis'
|
|
430
428
|
ARG_APIPROJECT = 'apiproject'
|
gam/gamlib/glentity.py
CHANGED
|
@@ -61,7 +61,6 @@ class GamEntity():
|
|
|
61
61
|
ANALYTIC_ACCOUNT_SUMMARY = 'anas'
|
|
62
62
|
ANALYTIC_DATASTREAM = 'anad'
|
|
63
63
|
ANALYTIC_PROPERTY = 'anap'
|
|
64
|
-
ANALYTIC_UA_PROPERTY = 'anau'
|
|
65
64
|
API = 'api '
|
|
66
65
|
APP_ACCESS_SETTINGS = 'apps'
|
|
67
66
|
APP_ID = 'appi'
|
|
@@ -412,7 +411,6 @@ class GamEntity():
|
|
|
412
411
|
ANALYTIC_ACCOUNT_SUMMARY: ['Analytic Account Summaries', 'Analytic Account Summary'],
|
|
413
412
|
ANALYTIC_DATASTREAM: ['Analytic Datastreams', 'Analytic Datastream'],
|
|
414
413
|
ANALYTIC_PROPERTY: ['Analytic GA4 Properties', 'Analytic GA4 Property'],
|
|
415
|
-
ANALYTIC_UA_PROPERTY: ['Analytic UA Properties', 'Analytic UA Property'],
|
|
416
414
|
API: ['APIs', 'API'],
|
|
417
415
|
APP_ACCESS_SETTINGS: ['Application Access Settings', 'Application Access Settings'],
|
|
418
416
|
APP_ID: ['Application IDs', 'Application ID'],
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: gam7
|
|
3
|
-
Version: 7.6.
|
|
3
|
+
Version: 7.6.12
|
|
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
|
|
@@ -27,7 +27,7 @@ Requires-Dist: google-auth-httplib2>=0.2.0
|
|
|
27
27
|
Requires-Dist: google-auth-oauthlib>=1.2.2
|
|
28
28
|
Requires-Dist: google-auth>=2.39.0
|
|
29
29
|
Requires-Dist: httplib2>=0.22.0
|
|
30
|
-
Requires-Dist: lxml
|
|
30
|
+
Requires-Dist: lxml>=5.4.0
|
|
31
31
|
Requires-Dist: passlib>=1.7.4
|
|
32
32
|
Requires-Dist: pathvalidate>=3.2.3
|
|
33
33
|
Requires-Dist: pyscard==2.2.1
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
gam/__init__.py,sha256=
|
|
1
|
+
gam/__init__.py,sha256=s4okaQ_92Eml4EHKJJxlbpYggCz8UK750Ds-_gZxk38,3492639
|
|
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
|
|
@@ -23,10 +23,10 @@ gam/atom/token_store.py,sha256=7E6Ecvxa86WCvl1pJAhv78jg9OxQv8pMtIUcPhZCq04,3803
|
|
|
23
23
|
gam/atom/url.py,sha256=pxO1TlORxyKQTQ1bkBE1unFzjnv9c8LjJkm-UEORShY,4276
|
|
24
24
|
gam/gamlib/__init__.py,sha256=z5mF-y0j8pm-YNFBaiuxB4M_GAUPG-cXWwrhYwrVReM,679
|
|
25
25
|
gam/gamlib/glaction.py,sha256=1Il_HrChVnPkzZwiZs5au4mFQVtq4K1Z42uIuR6qdnI,9419
|
|
26
|
-
gam/gamlib/glapi.py,sha256=
|
|
26
|
+
gam/gamlib/glapi.py,sha256=85YwZ5LhBoVd9kU3m-gwLRq8FwTWCaRIwARuQvH8Mjc,34022
|
|
27
27
|
gam/gamlib/glcfg.py,sha256=cV011FpIWge4oi5_dJrdof66vUqX6UCvTGWWTNVmYEg,28055
|
|
28
|
-
gam/gamlib/glclargs.py,sha256=
|
|
29
|
-
gam/gamlib/glentity.py,sha256=
|
|
28
|
+
gam/gamlib/glclargs.py,sha256=6irl5ZEu-pd4cGimc0PHZtJS8Ui6QHHgNzFO93beEcc,42206
|
|
29
|
+
gam/gamlib/glentity.py,sha256=fqWUlxQqPKlfFrkuPjCK2lZhhFBIZboCuO0qCxuEwqA,33691
|
|
30
30
|
gam/gamlib/glgapi.py,sha256=xk3pEaIE-zHrTNCn5rJYERqqpbN55E1wXlKoqvWP44E,39232
|
|
31
31
|
gam/gamlib/glgdata.py,sha256=weRppttWm6uRyqtBoGPKoHiNZ2h28nhfUV4J_mbCszY,2707
|
|
32
32
|
gam/gamlib/glglobals.py,sha256=Y73xM1RNhIbtcqnMv1gcZF3wDWOeLWW-7SvoQyWw6tA,9659
|
|
@@ -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.6.
|
|
69
|
-
gam7-7.6.
|
|
70
|
-
gam7-7.6.
|
|
71
|
-
gam7-7.6.
|
|
72
|
-
gam7-7.6.
|
|
68
|
+
gam7-7.6.12.dist-info/METADATA,sha256=Gm8h23k_mO_J3Fk_Wxcxg6PwNgojPfcZSnBpniWVddg,2970
|
|
69
|
+
gam7-7.6.12.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
70
|
+
gam7-7.6.12.dist-info/entry_points.txt,sha256=HVUM5J7dA8YwvJfG30jiLefR19ExMs387TWugWd9sf4,42
|
|
71
|
+
gam7-7.6.12.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
|
72
|
+
gam7-7.6.12.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|