mirror of
https://github.com/GAM-team/GAM.git
synced 2026-07-03 12:21:35 +00:00
Compare commits
5 Commits
v7.12.01
...
20250710.1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
83f94c8122 | ||
|
|
056f23c6cb | ||
|
|
7b1619f95d | ||
|
|
fe4ea3fe41 | ||
|
|
f5edd6bf81 |
@@ -4657,10 +4657,10 @@ gam delete building <BuildingID>
|
|||||||
gam info building <BuildingID>
|
gam info building <BuildingID>
|
||||||
[formatjson]
|
[formatjson]
|
||||||
gam show buildings
|
gam show buildings
|
||||||
[allfields|<BuildingFildName>*|(fields <BuildingFieldNameList>)]
|
[allfields|<BuildingFieldName>*|(fields <BuildingFieldNameList>)]
|
||||||
[formatjson]
|
[formatjson]
|
||||||
gam print buildings [todrive <ToDriveAttribute>*]
|
gam print buildings [todrive <ToDriveAttribute>*]
|
||||||
[allfields|<BuildingFildName>*|(fields <BuildingFieldNameList>)]
|
[allfields|<BuildingFieldName>*|(fields <BuildingFieldNameList>)]
|
||||||
[delimiter <Character>] [formatjson [quotechar <Character>]]
|
[delimiter <Character>] [formatjson [quotechar <Character>]]
|
||||||
|
|
||||||
gam create|add feature name <Name>
|
gam create|add feature name <Name>
|
||||||
|
|||||||
@@ -1,3 +1,10 @@
|
|||||||
|
7.12.02
|
||||||
|
|
||||||
|
Updated `gam print users` to handle the following error:
|
||||||
|
```
|
||||||
|
ERROR: 503: serviceNotAvailable - The service is currently unavailable
|
||||||
|
```
|
||||||
|
|
||||||
7.12.01
|
7.12.01
|
||||||
|
|
||||||
Added support for `plan free` in `gam create resoldsubscription`.
|
Added support for `plan free` in `gam create resoldsubscription`.
|
||||||
|
|||||||
1
src/README.md
Symbolic link
1
src/README.md
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../README.md
|
||||||
@@ -25,7 +25,7 @@ https://github.com/GAM-team/GAM/wiki
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
__author__ = 'GAM Team <google-apps-manager@googlegroups.com>'
|
__author__ = 'GAM Team <google-apps-manager@googlegroups.com>'
|
||||||
__version__ = '7.12.01'
|
__version__ = '7.12.02'
|
||||||
__license__ = 'Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)'
|
__license__ = 'Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)'
|
||||||
|
|
||||||
#pylint: disable=wrong-import-position
|
#pylint: disable=wrong-import-position
|
||||||
@@ -6246,6 +6246,7 @@ def getItemsToModify(entityType, entity, memberRoles=None, isSuspended=None, isA
|
|||||||
result = callGAPIpages(cd.users(), 'list', 'users',
|
result = callGAPIpages(cd.users(), 'list', 'users',
|
||||||
pageMessage=getPageMessage(),
|
pageMessage=getPageMessage(),
|
||||||
throwReasons=[GAPI.BAD_REQUEST, GAPI.RESOURCE_NOT_FOUND, GAPI.FORBIDDEN],
|
throwReasons=[GAPI.BAD_REQUEST, GAPI.RESOURCE_NOT_FOUND, GAPI.FORBIDDEN],
|
||||||
|
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
|
||||||
customer=GC.Values[GC.CUSTOMER_ID],
|
customer=GC.Values[GC.CUSTOMER_ID],
|
||||||
query=query, orderBy='email', fields='nextPageToken,users(primaryEmail,archived)',
|
query=query, orderBy='email', fields='nextPageToken,users(primaryEmail,archived)',
|
||||||
maxResults=GC.Values[GC.USER_MAX_RESULTS])
|
maxResults=GC.Values[GC.USER_MAX_RESULTS])
|
||||||
@@ -6270,6 +6271,7 @@ def getItemsToModify(entityType, entity, memberRoles=None, isSuspended=None, isA
|
|||||||
result = callGAPIpages(cd.users(), 'list', 'users',
|
result = callGAPIpages(cd.users(), 'list', 'users',
|
||||||
pageMessage=getPageMessageForWhom(),
|
pageMessage=getPageMessageForWhom(),
|
||||||
throwReasons=[GAPI.BAD_REQUEST, GAPI.RESOURCE_NOT_FOUND, GAPI.DOMAIN_NOT_FOUND, GAPI.FORBIDDEN],
|
throwReasons=[GAPI.BAD_REQUEST, GAPI.RESOURCE_NOT_FOUND, GAPI.DOMAIN_NOT_FOUND, GAPI.FORBIDDEN],
|
||||||
|
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
|
||||||
domain=domain,
|
domain=domain,
|
||||||
query=query, orderBy='email', fields='nextPageToken,users(primaryEmail,archived)',
|
query=query, orderBy='email', fields='nextPageToken,users(primaryEmail,archived)',
|
||||||
maxResults=GC.Values[GC.USER_MAX_RESULTS])
|
maxResults=GC.Values[GC.USER_MAX_RESULTS])
|
||||||
@@ -6448,6 +6450,7 @@ def getItemsToModify(entityType, entity, memberRoles=None, isSuspended=None, isA
|
|||||||
pageMessage=pageMessage, messageAttribute='primaryEmail',
|
pageMessage=pageMessage, messageAttribute='primaryEmail',
|
||||||
throwReasons=[GAPI.INVALID_ORGUNIT, GAPI.ORGUNIT_NOT_FOUND,
|
throwReasons=[GAPI.INVALID_ORGUNIT, GAPI.ORGUNIT_NOT_FOUND,
|
||||||
GAPI.INVALID_INPUT, GAPI.BAD_REQUEST, GAPI.RESOURCE_NOT_FOUND, GAPI.FORBIDDEN],
|
GAPI.INVALID_INPUT, GAPI.BAD_REQUEST, GAPI.RESOURCE_NOT_FOUND, GAPI.FORBIDDEN],
|
||||||
|
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
|
||||||
customer=GC.Values[GC.CUSTOMER_ID], query=orgUnitPathQuery(ou, isSuspended), orderBy='email',
|
customer=GC.Values[GC.CUSTOMER_ID], query=orgUnitPathQuery(ou, isSuspended), orderBy='email',
|
||||||
fields=fields, maxResults=GC.Values[GC.USER_MAX_RESULTS])
|
fields=fields, maxResults=GC.Values[GC.USER_MAX_RESULTS])
|
||||||
for users in feed:
|
for users in feed:
|
||||||
@@ -6481,6 +6484,7 @@ def getItemsToModify(entityType, entity, memberRoles=None, isSuspended=None, isA
|
|||||||
pageMessage=getPageMessage(),
|
pageMessage=getPageMessage(),
|
||||||
throwReasons=[GAPI.INVALID_ORGUNIT, GAPI.ORGUNIT_NOT_FOUND,
|
throwReasons=[GAPI.INVALID_ORGUNIT, GAPI.ORGUNIT_NOT_FOUND,
|
||||||
GAPI.INVALID_INPUT, GAPI.BAD_REQUEST, GAPI.RESOURCE_NOT_FOUND, GAPI.FORBIDDEN],
|
GAPI.INVALID_INPUT, GAPI.BAD_REQUEST, GAPI.RESOURCE_NOT_FOUND, GAPI.FORBIDDEN],
|
||||||
|
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
|
||||||
customer=GC.Values[GC.CUSTOMER_ID], query=query, orderBy='email',
|
customer=GC.Values[GC.CUSTOMER_ID], query=query, orderBy='email',
|
||||||
fields='nextPageToken,users(primaryEmail,suspended,archived)',
|
fields='nextPageToken,users(primaryEmail,suspended,archived)',
|
||||||
maxResults=GC.Values[GC.USER_MAX_RESULTS])
|
maxResults=GC.Values[GC.USER_MAX_RESULTS])
|
||||||
@@ -13321,6 +13325,7 @@ def getUserOrgUnits(cd, orgUnit, orgUnitId):
|
|||||||
pageMessage=getPageMessageForWhom(),
|
pageMessage=getPageMessageForWhom(),
|
||||||
throwReasons=[GAPI.INVALID_ORGUNIT, GAPI.ORGUNIT_NOT_FOUND,
|
throwReasons=[GAPI.INVALID_ORGUNIT, GAPI.ORGUNIT_NOT_FOUND,
|
||||||
GAPI.INVALID_INPUT, GAPI.BAD_REQUEST, GAPI.RESOURCE_NOT_FOUND, GAPI.FORBIDDEN],
|
GAPI.INVALID_INPUT, GAPI.BAD_REQUEST, GAPI.RESOURCE_NOT_FOUND, GAPI.FORBIDDEN],
|
||||||
|
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
|
||||||
customer=GC.Values[GC.CUSTOMER_ID], query=orgUnitPathQuery(orgUnit, None), orderBy='email',
|
customer=GC.Values[GC.CUSTOMER_ID], query=orgUnitPathQuery(orgUnit, None), orderBy='email',
|
||||||
fields='nextPageToken,users(primaryEmail,orgUnitPath)', maxResults=GC.Values[GC.USER_MAX_RESULTS])
|
fields='nextPageToken,users(primaryEmail,orgUnitPath)', maxResults=GC.Values[GC.USER_MAX_RESULTS])
|
||||||
userOrgUnits = {}
|
userOrgUnits = {}
|
||||||
@@ -17786,6 +17791,7 @@ def _doInfoOrgs(entityList):
|
|||||||
orgUnitPath = result['orgUnitPath']
|
orgUnitPath = result['orgUnitPath']
|
||||||
users = callGAPIpages(cd.users(), 'list', 'users',
|
users = callGAPIpages(cd.users(), 'list', 'users',
|
||||||
throwReasons=[GAPI.BAD_REQUEST, GAPI.INVALID_INPUT, GAPI.RESOURCE_NOT_FOUND, GAPI.FORBIDDEN],
|
throwReasons=[GAPI.BAD_REQUEST, GAPI.INVALID_INPUT, GAPI.RESOURCE_NOT_FOUND, GAPI.FORBIDDEN],
|
||||||
|
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
|
||||||
customer=GC.Values[GC.CUSTOMER_ID], query=orgUnitPathQuery(orgUnitPath, isSuspended), orderBy='email',
|
customer=GC.Values[GC.CUSTOMER_ID], query=orgUnitPathQuery(orgUnitPath, isSuspended), orderBy='email',
|
||||||
fields='nextPageToken,users(primaryEmail,orgUnitPath)', maxResults=GC.Values[GC.USER_MAX_RESULTS])
|
fields='nextPageToken,users(primaryEmail,orgUnitPath)', maxResults=GC.Values[GC.USER_MAX_RESULTS])
|
||||||
printEntitiesCount(entityType, None)
|
printEntitiesCount(entityType, None)
|
||||||
@@ -18053,6 +18059,7 @@ def doPrintOrgs():
|
|||||||
pageMessage=pageMessage,
|
pageMessage=pageMessage,
|
||||||
throwReasons=[GAPI.INVALID_ORGUNIT, GAPI.ORGUNIT_NOT_FOUND,
|
throwReasons=[GAPI.INVALID_ORGUNIT, GAPI.ORGUNIT_NOT_FOUND,
|
||||||
GAPI.INVALID_INPUT, GAPI.BAD_REQUEST, GAPI.RESOURCE_NOT_FOUND, GAPI.FORBIDDEN],
|
GAPI.INVALID_INPUT, GAPI.BAD_REQUEST, GAPI.RESOURCE_NOT_FOUND, GAPI.FORBIDDEN],
|
||||||
|
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
|
||||||
customer=GC.Values[GC.CUSTOMER_ID], query=orgUnitPathQuery(orgUnitPath, None), orderBy='email',
|
customer=GC.Values[GC.CUSTOMER_ID], query=orgUnitPathQuery(orgUnitPath, None), orderBy='email',
|
||||||
fields='nextPageToken,users(orgUnitPath,suspended)', maxResults=GC.Values[GC.USER_MAX_RESULTS])
|
fields='nextPageToken,users(orgUnitPath,suspended)', maxResults=GC.Values[GC.USER_MAX_RESULTS])
|
||||||
for users in feed:
|
for users in feed:
|
||||||
@@ -18342,6 +18349,7 @@ def doCheckOrgUnit():
|
|||||||
pageMessage=pageMessage,
|
pageMessage=pageMessage,
|
||||||
throwReasons=[GAPI.INVALID_ORGUNIT, GAPI.ORGUNIT_NOT_FOUND,
|
throwReasons=[GAPI.INVALID_ORGUNIT, GAPI.ORGUNIT_NOT_FOUND,
|
||||||
GAPI.INVALID_INPUT, GAPI.BAD_REQUEST, GAPI.RESOURCE_NOT_FOUND, GAPI.FORBIDDEN],
|
GAPI.INVALID_INPUT, GAPI.BAD_REQUEST, GAPI.RESOURCE_NOT_FOUND, GAPI.FORBIDDEN],
|
||||||
|
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
|
||||||
customer=GC.Values[GC.CUSTOMER_ID], query=orgUnitPathQuery(orgUnitPath, None),
|
customer=GC.Values[GC.CUSTOMER_ID], query=orgUnitPathQuery(orgUnitPath, None),
|
||||||
fields='nextPageToken,users(orgUnitPath)', maxResults=GC.Values[GC.USER_MAX_RESULTS])
|
fields='nextPageToken,users(orgUnitPath)', maxResults=GC.Values[GC.USER_MAX_RESULTS])
|
||||||
for users in feed:
|
for users in feed:
|
||||||
@@ -18907,7 +18915,7 @@ def doPrintAliases():
|
|||||||
throwReasons=[GAPI.INVALID_ORGUNIT, GAPI.INVALID_INPUT, GAPI.DOMAIN_NOT_FOUND,
|
throwReasons=[GAPI.INVALID_ORGUNIT, GAPI.INVALID_INPUT, GAPI.DOMAIN_NOT_FOUND,
|
||||||
GAPI.RESOURCE_NOT_FOUND, GAPI.FORBIDDEN, GAPI.BAD_REQUEST,
|
GAPI.RESOURCE_NOT_FOUND, GAPI.FORBIDDEN, GAPI.BAD_REQUEST,
|
||||||
GAPI.UNKNOWN_ERROR, GAPI.FAILED_PRECONDITION],
|
GAPI.UNKNOWN_ERROR, GAPI.FAILED_PRECONDITION],
|
||||||
retryReasons=[GAPI.UNKNOWN_ERROR, GAPI.FAILED_PRECONDITION],
|
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS+[GAPI.UNKNOWN_ERROR, GAPI.FAILED_PRECONDITION],
|
||||||
query=query, orderBy='email',
|
query=query, orderBy='email',
|
||||||
fields=f'nextPageToken,users({",".join(userFields)})',
|
fields=f'nextPageToken,users({",".join(userFields)})',
|
||||||
maxResults=GC.Values[GC.USER_MAX_RESULTS], **kwargs)
|
maxResults=GC.Values[GC.USER_MAX_RESULTS], **kwargs)
|
||||||
@@ -19006,7 +19014,7 @@ def doPrintAddresses():
|
|||||||
pageMessage=getPageMessage(showFirstLastItems=True), messageAttribute='primaryEmail',
|
pageMessage=getPageMessage(showFirstLastItems=True), messageAttribute='primaryEmail',
|
||||||
throwReasons=[GAPI.RESOURCE_NOT_FOUND, GAPI.FORBIDDEN, GAPI.BAD_REQUEST,
|
throwReasons=[GAPI.RESOURCE_NOT_FOUND, GAPI.FORBIDDEN, GAPI.BAD_REQUEST,
|
||||||
GAPI.UNKNOWN_ERROR, GAPI.FAILED_PRECONDITION],
|
GAPI.UNKNOWN_ERROR, GAPI.FAILED_PRECONDITION],
|
||||||
retryReasons=[GAPI.UNKNOWN_ERROR, GAPI.FAILED_PRECONDITION],
|
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS+[GAPI.UNKNOWN_ERROR, GAPI.FAILED_PRECONDITION],
|
||||||
orderBy='email', fields=f'nextPageToken,users({",".join(userFields)})',
|
orderBy='email', fields=f'nextPageToken,users({",".join(userFields)})',
|
||||||
maxResults=GC.Values[GC.USER_MAX_RESULTS], **kwargs)
|
maxResults=GC.Values[GC.USER_MAX_RESULTS], **kwargs)
|
||||||
except (GAPI.unknownError, GAPI.failedPrecondition) as e:
|
except (GAPI.unknownError, GAPI.failedPrecondition) as e:
|
||||||
@@ -44339,6 +44347,7 @@ def undeleteUsers(entityList):
|
|||||||
try:
|
try:
|
||||||
deleted_users = callGAPIpages(cd.users(), 'list', 'users',
|
deleted_users = callGAPIpages(cd.users(), 'list', 'users',
|
||||||
throwReasons=[GAPI.BAD_REQUEST, GAPI.RESOURCE_NOT_FOUND, GAPI.FORBIDDEN],
|
throwReasons=[GAPI.BAD_REQUEST, GAPI.RESOURCE_NOT_FOUND, GAPI.FORBIDDEN],
|
||||||
|
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
|
||||||
customer=GC.Values[GC.CUSTOMER_ID], showDeleted=True, orderBy='email',
|
customer=GC.Values[GC.CUSTOMER_ID], showDeleted=True, orderBy='email',
|
||||||
maxResults=GC.Values[GC.USER_MAX_RESULTS])
|
maxResults=GC.Values[GC.USER_MAX_RESULTS])
|
||||||
except (GAPI.badRequest, GAPI.resourceNotFound, GAPI.forbidden):
|
except (GAPI.badRequest, GAPI.resourceNotFound, GAPI.forbidden):
|
||||||
@@ -45591,7 +45600,7 @@ def doPrintUsers(entityList=None):
|
|||||||
throwReasons=[GAPI.DOMAIN_NOT_FOUND, GAPI.INVALID_ORGUNIT, GAPI.INVALID_INPUT,
|
throwReasons=[GAPI.DOMAIN_NOT_FOUND, GAPI.INVALID_ORGUNIT, GAPI.INVALID_INPUT,
|
||||||
GAPI.BAD_REQUEST, GAPI.RESOURCE_NOT_FOUND, GAPI.FORBIDDEN,
|
GAPI.BAD_REQUEST, GAPI.RESOURCE_NOT_FOUND, GAPI.FORBIDDEN,
|
||||||
GAPI.UNKNOWN_ERROR, GAPI.FAILED_PRECONDITION],
|
GAPI.UNKNOWN_ERROR, GAPI.FAILED_PRECONDITION],
|
||||||
retryReasons=[GAPI.UNKNOWN_ERROR, GAPI.FAILED_PRECONDITION],
|
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS+[GAPI.UNKNOWN_ERROR, GAPI.FAILED_PRECONDITION],
|
||||||
query=query, fields=fields,
|
query=query, fields=fields,
|
||||||
showDeleted=showDeleted, orderBy=orderBy, sortOrder=sortOrder, viewType=viewType,
|
showDeleted=showDeleted, orderBy=orderBy, sortOrder=sortOrder, viewType=viewType,
|
||||||
projection=schemaParms['projection'], customFieldMask=schemaParms['customFieldMask'],
|
projection=schemaParms['projection'], customFieldMask=schemaParms['customFieldMask'],
|
||||||
@@ -45797,6 +45806,7 @@ def doPrintUserCountsByOrgUnit():
|
|||||||
result = callGAPIpages(cd.users(), 'list', 'users',
|
result = callGAPIpages(cd.users(), 'list', 'users',
|
||||||
pageMessage=pageMessage,
|
pageMessage=pageMessage,
|
||||||
throwReasons=[GAPI.BAD_REQUEST, GAPI.RESOURCE_NOT_FOUND, GAPI.DOMAIN_NOT_FOUND, GAPI.FORBIDDEN],
|
throwReasons=[GAPI.BAD_REQUEST, GAPI.RESOURCE_NOT_FOUND, GAPI.DOMAIN_NOT_FOUND, GAPI.FORBIDDEN],
|
||||||
|
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
|
||||||
orderBy='email', fields='nextPageToken,users(orgUnitPath,archived,suspended)',
|
orderBy='email', fields='nextPageToken,users(orgUnitPath,archived,suspended)',
|
||||||
maxResults=GC.Values[GC.USER_MAX_RESULTS], **kwargs)
|
maxResults=GC.Values[GC.USER_MAX_RESULTS], **kwargs)
|
||||||
except (GAPI.badRequest, GAPI.resourceNotFound, GAPI.forbidden, GAPI.domainNotFound):
|
except (GAPI.badRequest, GAPI.resourceNotFound, GAPI.forbidden, GAPI.domainNotFound):
|
||||||
|
|||||||
@@ -10,6 +10,12 @@ Add the `-s` option to the end of the above commands to suppress creating the `g
|
|||||||
|
|
||||||
See [Downloads-Installs-GAM7](https://github.com/GAM-team/GAM/wiki/Downloads-Installs) for Windows or other options, including manual installation
|
See [Downloads-Installs-GAM7](https://github.com/GAM-team/GAM/wiki/Downloads-Installs) for Windows or other options, including manual installation
|
||||||
|
|
||||||
|
### 7.12.01
|
||||||
|
|
||||||
|
Added support for `plan free` in `gam create resoldsubscription`.
|
||||||
|
|
||||||
|
* The free plan is exclusive to the Cloud Identity SKU and does not incur any billing.
|
||||||
|
|
||||||
### 7.12.00
|
### 7.12.00
|
||||||
|
|
||||||
Started updated handling of missing scopes messages in client access commands;
|
Started updated handling of missing scopes messages in client access commands;
|
||||||
|
|||||||
@@ -251,7 +251,7 @@ writes the credentials into the file oauth2.txt.
|
|||||||
admin@server:/Users/admin$ rm -f /Users/admin/GAMConfig/oauth2.txt
|
admin@server:/Users/admin$ rm -f /Users/admin/GAMConfig/oauth2.txt
|
||||||
admin@server:/Users/admin$ gam version
|
admin@server:/Users/admin$ gam version
|
||||||
WARNING: Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, Item: oauth2_txt, Value: /Users/admin/GAMConfig/oauth2.txt, Not Found
|
WARNING: Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, Item: oauth2_txt, Value: /Users/admin/GAMConfig/oauth2.txt, Not Found
|
||||||
GAM 7.12.00 - https://github.com/GAM-team/GAM - pyinstaller
|
GAM 7.12.01 - https://github.com/GAM-team/GAM - pyinstaller
|
||||||
GAM Team <google-apps-manager@googlegroups.com>
|
GAM Team <google-apps-manager@googlegroups.com>
|
||||||
Python 3.13.5 64-bit final
|
Python 3.13.5 64-bit final
|
||||||
MacOS Sequoia 15.5 x86_64
|
MacOS Sequoia 15.5 x86_64
|
||||||
@@ -989,7 +989,7 @@ writes the credentials into the file oauth2.txt.
|
|||||||
C:\>del C:\GAMConfig\oauth2.txt
|
C:\>del C:\GAMConfig\oauth2.txt
|
||||||
C:\>gam version
|
C:\>gam version
|
||||||
WARNING: Config File: C:\GAMConfig\gam.cfg, Section: DEFAULT, Item: oauth2_txt, Value: C:\GAMConfig\oauth2.txt, Not Found
|
WARNING: Config File: C:\GAMConfig\gam.cfg, Section: DEFAULT, Item: oauth2_txt, Value: C:\GAMConfig\oauth2.txt, Not Found
|
||||||
GAM 7.12.00 - https://github.com/GAM-team/GAM - pythonsource
|
GAM 7.12.01 - https://github.com/GAM-team/GAM - pythonsource
|
||||||
GAM Team <google-apps-manager@googlegroups.com>
|
GAM Team <google-apps-manager@googlegroups.com>
|
||||||
Python 3.13.5 64-bit final
|
Python 3.13.5 64-bit final
|
||||||
Windows-10-10.0.17134 AMD64
|
Windows-10-10.0.17134 AMD64
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ pip install git+https://github.com/GAM-team/GAM.git#subdirectory=src
|
|||||||
|
|
||||||
Or as a PEP 508 Requirement Specifier, e.g. in requirements.txt file:
|
Or as a PEP 508 Requirement Specifier, e.g. in requirements.txt file:
|
||||||
```
|
```
|
||||||
advanced-gam-for-google-workspace @ git+https://github.com/GAM-team/GAM.git#subdirectory=src
|
gam-for-google-workspace @ git+https://github.com/GAM-team/GAM.git#subdirectory=src
|
||||||
```
|
```
|
||||||
|
|
||||||
Or a pyproject.toml file:
|
Or a pyproject.toml file:
|
||||||
@@ -23,13 +23,13 @@ Or a pyproject.toml file:
|
|||||||
name = "your-project"
|
name = "your-project"
|
||||||
# ...
|
# ...
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"advanced-gam-for-google-workspace @ git+https://github.com/GAM-team/GAM.git#subdirectory=src"
|
"gam-for-google-workspace @ git+https://github.com/GAM-team/GAM.git#subdirectory=src"
|
||||||
]
|
]
|
||||||
```
|
```
|
||||||
|
|
||||||
Target a specific revision or tag:
|
Target a specific revision or tag:
|
||||||
```
|
```
|
||||||
advanced-gam-for-google-workspace @ git+https://github.com/GAM-team/GAM.git@v6.76.01#subdirectory=src
|
gam-for-google-workspace @ git+https://github.com/GAM-team/GAM.git@v7.12.01#subdirectory=src
|
||||||
```
|
```
|
||||||
|
|
||||||
## Using the library
|
## Using the library
|
||||||
|
|||||||
@@ -135,7 +135,7 @@ By default, Gam displays the information as an indented list of keys and values.
|
|||||||
## Manage Resold Subscriptions
|
## Manage Resold Subscriptions
|
||||||
```
|
```
|
||||||
gam create resoldsubscription <CustomerID> (sku <SKUID>)
|
gam create resoldsubscription <CustomerID> (sku <SKUID>)
|
||||||
(plan annual_monthly_pay|annual_yearly_pay|flexible|trial)
|
(plan annual_monthly_pay|annual_yearly_pay|flexible|trial|free)
|
||||||
(seats <Number>)
|
(seats <Number>)
|
||||||
[customer_auth_token <String>] [deal <String>] [purchaseorderid <String>]
|
[customer_auth_token <String>] [deal <String>] [purchaseorderid <String>]
|
||||||
gam update resoldsubscription <CustomerID> <SKUID>
|
gam update resoldsubscription <CustomerID> <SKUID>
|
||||||
|
|||||||
@@ -390,14 +390,14 @@ gam delete building <BuildingID>
|
|||||||
gam info building <BuildingID>
|
gam info building <BuildingID>
|
||||||
[formatjson]
|
[formatjson]
|
||||||
gam show buildings
|
gam show buildings
|
||||||
[allfields|<BuildingFildName>*|(fields <BuildingFieldNameList>)]
|
[allfields|<BuildingFieldName>*|(fields <BuildingFieldNameList>)]
|
||||||
[formatjson]
|
[formatjson]
|
||||||
```
|
```
|
||||||
By default, Gam displays the information as an indented list of keys and values.
|
By default, Gam displays the information as an indented list of keys and values.
|
||||||
* `formatjson` - Display the fields in JSON format.
|
* `formatjson` - Display the fields in JSON format.
|
||||||
```
|
```
|
||||||
gam print buildings [todrive <ToDriveAttribute>*]
|
gam print buildings [todrive <ToDriveAttribute>*]
|
||||||
[allfields|<BuildingFildName>*|(fields <BuildingFieldNameList>)]
|
[allfields|<BuildingFieldName>*|(fields <BuildingFieldNameList>)]
|
||||||
[delimiter <Character>] [formatjson [quotechar <Character>]]
|
[delimiter <Character>] [formatjson [quotechar <Character>]]
|
||||||
```
|
```
|
||||||
By default, Gam displays the information as columns of fields; the following option causes the output to be in JSON format,
|
By default, Gam displays the information as columns of fields; the following option causes the output to be in JSON format,
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
Print the current version of Gam with details
|
Print the current version of Gam with details
|
||||||
```
|
```
|
||||||
gam version
|
gam version
|
||||||
GAM 7.12.00 - https://github.com/GAM-team/GAM - pyinstaller
|
GAM 7.12.01 - https://github.com/GAM-team/GAM - pyinstaller
|
||||||
GAM Team <google-apps-manager@googlegroups.com>
|
GAM Team <google-apps-manager@googlegroups.com>
|
||||||
Python 3.13.5 64-bit final
|
Python 3.13.5 64-bit final
|
||||||
MacOS Sequoia 15.5 x86_64
|
MacOS Sequoia 15.5 x86_64
|
||||||
@@ -15,7 +15,7 @@ Time: 2023-06-02T21:10:00-07:00
|
|||||||
Print the current version of Gam with details and time offset information
|
Print the current version of Gam with details and time offset information
|
||||||
```
|
```
|
||||||
gam version timeoffset
|
gam version timeoffset
|
||||||
GAM 7.12.00 - https://github.com/GAM-team/GAM - pyinstaller
|
GAM 7.12.01 - https://github.com/GAM-team/GAM - pyinstaller
|
||||||
GAM Team <google-apps-manager@googlegroups.com>
|
GAM Team <google-apps-manager@googlegroups.com>
|
||||||
Python 3.13.5 64-bit final
|
Python 3.13.5 64-bit final
|
||||||
MacOS Sequoia 15.5 x86_64
|
MacOS Sequoia 15.5 x86_64
|
||||||
@@ -27,7 +27,7 @@ Your system time differs from www.googleapis.com by less than 1 second
|
|||||||
Print the current version of Gam with extended details and SSL information
|
Print the current version of Gam with extended details and SSL information
|
||||||
```
|
```
|
||||||
gam version extended
|
gam version extended
|
||||||
GAM 7.12.00 - https://github.com/GAM-team/GAM - pyinstaller
|
GAM 7.12.01 - https://github.com/GAM-team/GAM - pyinstaller
|
||||||
GAM Team <google-apps-manager@googlegroups.com>
|
GAM Team <google-apps-manager@googlegroups.com>
|
||||||
Python 3.13.5 64-bit final
|
Python 3.13.5 64-bit final
|
||||||
MacOS Sequoia 15.5 x86_64
|
MacOS Sequoia 15.5 x86_64
|
||||||
@@ -64,7 +64,7 @@ MacOS High Sierra 10.13.6 x86_64
|
|||||||
Path: /Users/Admin/bin/gam7
|
Path: /Users/Admin/bin/gam7
|
||||||
Version Check:
|
Version Check:
|
||||||
Current: 5.35.08
|
Current: 5.35.08
|
||||||
Latest: 7.12.00
|
Latest: 7.12.01
|
||||||
echo $?
|
echo $?
|
||||||
1
|
1
|
||||||
```
|
```
|
||||||
@@ -72,7 +72,7 @@ echo $?
|
|||||||
Print the current version number without details
|
Print the current version number without details
|
||||||
```
|
```
|
||||||
gam version simple
|
gam version simple
|
||||||
7.12.00
|
7.12.01
|
||||||
```
|
```
|
||||||
In Linux/MacOS you can do:
|
In Linux/MacOS you can do:
|
||||||
```
|
```
|
||||||
@@ -82,7 +82,7 @@ echo $VER
|
|||||||
Print the current version of Gam and address of this Wiki
|
Print the current version of Gam and address of this Wiki
|
||||||
```
|
```
|
||||||
gam help
|
gam help
|
||||||
GAM 7.12.00 - https://github.com/GAM-team/GAM
|
GAM 7.12.01 - https://github.com/GAM-team/GAM
|
||||||
GAM Team <google-apps-manager@googlegroups.com>
|
GAM Team <google-apps-manager@googlegroups.com>
|
||||||
Python 3.13.5 64-bit final
|
Python 3.13.5 64-bit final
|
||||||
MacOS Sequoia 15.5 x86_64
|
MacOS Sequoia 15.5 x86_64
|
||||||
|
|||||||
Reference in New Issue
Block a user