mirror of
https://github.com/GAM-team/GAM.git
synced 2026-06-21 06:31:37 +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>
|
||||
[formatjson]
|
||||
gam show buildings
|
||||
[allfields|<BuildingFildName>*|(fields <BuildingFieldNameList>)]
|
||||
[allfields|<BuildingFieldName>*|(fields <BuildingFieldNameList>)]
|
||||
[formatjson]
|
||||
gam print buildings [todrive <ToDriveAttribute>*]
|
||||
[allfields|<BuildingFildName>*|(fields <BuildingFieldNameList>)]
|
||||
[allfields|<BuildingFieldName>*|(fields <BuildingFieldNameList>)]
|
||||
[delimiter <Character>] [formatjson [quotechar <Character>]]
|
||||
|
||||
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
|
||||
|
||||
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>'
|
||||
__version__ = '7.12.01'
|
||||
__version__ = '7.12.02'
|
||||
__license__ = 'Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)'
|
||||
|
||||
#pylint: disable=wrong-import-position
|
||||
@@ -6246,6 +6246,7 @@ def getItemsToModify(entityType, entity, memberRoles=None, isSuspended=None, isA
|
||||
result = callGAPIpages(cd.users(), 'list', 'users',
|
||||
pageMessage=getPageMessage(),
|
||||
throwReasons=[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', fields='nextPageToken,users(primaryEmail,archived)',
|
||||
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',
|
||||
pageMessage=getPageMessageForWhom(),
|
||||
throwReasons=[GAPI.BAD_REQUEST, GAPI.RESOURCE_NOT_FOUND, GAPI.DOMAIN_NOT_FOUND, GAPI.FORBIDDEN],
|
||||
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
|
||||
domain=domain,
|
||||
query=query, orderBy='email', fields='nextPageToken,users(primaryEmail,archived)',
|
||||
maxResults=GC.Values[GC.USER_MAX_RESULTS])
|
||||
@@ -6448,6 +6450,7 @@ def getItemsToModify(entityType, entity, memberRoles=None, isSuspended=None, isA
|
||||
pageMessage=pageMessage, messageAttribute='primaryEmail',
|
||||
throwReasons=[GAPI.INVALID_ORGUNIT, GAPI.ORGUNIT_NOT_FOUND,
|
||||
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',
|
||||
fields=fields, maxResults=GC.Values[GC.USER_MAX_RESULTS])
|
||||
for users in feed:
|
||||
@@ -6481,6 +6484,7 @@ def getItemsToModify(entityType, entity, memberRoles=None, isSuspended=None, isA
|
||||
pageMessage=getPageMessage(),
|
||||
throwReasons=[GAPI.INVALID_ORGUNIT, GAPI.ORGUNIT_NOT_FOUND,
|
||||
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',
|
||||
fields='nextPageToken,users(primaryEmail,suspended,archived)',
|
||||
maxResults=GC.Values[GC.USER_MAX_RESULTS])
|
||||
@@ -13321,6 +13325,7 @@ def getUserOrgUnits(cd, orgUnit, orgUnitId):
|
||||
pageMessage=getPageMessageForWhom(),
|
||||
throwReasons=[GAPI.INVALID_ORGUNIT, GAPI.ORGUNIT_NOT_FOUND,
|
||||
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',
|
||||
fields='nextPageToken,users(primaryEmail,orgUnitPath)', maxResults=GC.Values[GC.USER_MAX_RESULTS])
|
||||
userOrgUnits = {}
|
||||
@@ -17786,6 +17791,7 @@ def _doInfoOrgs(entityList):
|
||||
orgUnitPath = result['orgUnitPath']
|
||||
users = callGAPIpages(cd.users(), 'list', 'users',
|
||||
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',
|
||||
fields='nextPageToken,users(primaryEmail,orgUnitPath)', maxResults=GC.Values[GC.USER_MAX_RESULTS])
|
||||
printEntitiesCount(entityType, None)
|
||||
@@ -18053,6 +18059,7 @@ def doPrintOrgs():
|
||||
pageMessage=pageMessage,
|
||||
throwReasons=[GAPI.INVALID_ORGUNIT, GAPI.ORGUNIT_NOT_FOUND,
|
||||
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',
|
||||
fields='nextPageToken,users(orgUnitPath,suspended)', maxResults=GC.Values[GC.USER_MAX_RESULTS])
|
||||
for users in feed:
|
||||
@@ -18342,6 +18349,7 @@ def doCheckOrgUnit():
|
||||
pageMessage=pageMessage,
|
||||
throwReasons=[GAPI.INVALID_ORGUNIT, GAPI.ORGUNIT_NOT_FOUND,
|
||||
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),
|
||||
fields='nextPageToken,users(orgUnitPath)', maxResults=GC.Values[GC.USER_MAX_RESULTS])
|
||||
for users in feed:
|
||||
@@ -18907,7 +18915,7 @@ def doPrintAliases():
|
||||
throwReasons=[GAPI.INVALID_ORGUNIT, GAPI.INVALID_INPUT, GAPI.DOMAIN_NOT_FOUND,
|
||||
GAPI.RESOURCE_NOT_FOUND, GAPI.FORBIDDEN, GAPI.BAD_REQUEST,
|
||||
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',
|
||||
fields=f'nextPageToken,users({",".join(userFields)})',
|
||||
maxResults=GC.Values[GC.USER_MAX_RESULTS], **kwargs)
|
||||
@@ -19006,7 +19014,7 @@ def doPrintAddresses():
|
||||
pageMessage=getPageMessage(showFirstLastItems=True), messageAttribute='primaryEmail',
|
||||
throwReasons=[GAPI.RESOURCE_NOT_FOUND, GAPI.FORBIDDEN, GAPI.BAD_REQUEST,
|
||||
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)})',
|
||||
maxResults=GC.Values[GC.USER_MAX_RESULTS], **kwargs)
|
||||
except (GAPI.unknownError, GAPI.failedPrecondition) as e:
|
||||
@@ -44339,6 +44347,7 @@ def undeleteUsers(entityList):
|
||||
try:
|
||||
deleted_users = callGAPIpages(cd.users(), 'list', 'users',
|
||||
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',
|
||||
maxResults=GC.Values[GC.USER_MAX_RESULTS])
|
||||
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,
|
||||
GAPI.BAD_REQUEST, GAPI.RESOURCE_NOT_FOUND, GAPI.FORBIDDEN,
|
||||
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,
|
||||
showDeleted=showDeleted, orderBy=orderBy, sortOrder=sortOrder, viewType=viewType,
|
||||
projection=schemaParms['projection'], customFieldMask=schemaParms['customFieldMask'],
|
||||
@@ -45797,6 +45806,7 @@ def doPrintUserCountsByOrgUnit():
|
||||
result = callGAPIpages(cd.users(), 'list', 'users',
|
||||
pageMessage=pageMessage,
|
||||
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)',
|
||||
maxResults=GC.Values[GC.USER_MAX_RESULTS], **kwargs)
|
||||
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
|
||||
|
||||
### 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
|
||||
|
||||
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$ gam version
|
||||
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>
|
||||
Python 3.13.5 64-bit final
|
||||
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:\>gam version
|
||||
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>
|
||||
Python 3.13.5 64-bit final
|
||||
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:
|
||||
```
|
||||
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:
|
||||
@@ -23,13 +23,13 @@ Or a pyproject.toml file:
|
||||
name = "your-project"
|
||||
# ...
|
||||
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:
|
||||
```
|
||||
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
|
||||
|
||||
@@ -135,7 +135,7 @@ By default, Gam displays the information as an indented list of keys and values.
|
||||
## Manage Resold Subscriptions
|
||||
```
|
||||
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>)
|
||||
[customer_auth_token <String>] [deal <String>] [purchaseorderid <String>]
|
||||
gam update resoldsubscription <CustomerID> <SKUID>
|
||||
|
||||
@@ -390,14 +390,14 @@ gam delete building <BuildingID>
|
||||
gam info building <BuildingID>
|
||||
[formatjson]
|
||||
gam show buildings
|
||||
[allfields|<BuildingFildName>*|(fields <BuildingFieldNameList>)]
|
||||
[allfields|<BuildingFieldName>*|(fields <BuildingFieldNameList>)]
|
||||
[formatjson]
|
||||
```
|
||||
By default, Gam displays the information as an indented list of keys and values.
|
||||
* `formatjson` - Display the fields in JSON format.
|
||||
```
|
||||
gam print buildings [todrive <ToDriveAttribute>*]
|
||||
[allfields|<BuildingFildName>*|(fields <BuildingFieldNameList>)]
|
||||
[allfields|<BuildingFieldName>*|(fields <BuildingFieldNameList>)]
|
||||
[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,
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
Print the current version of Gam with details
|
||||
```
|
||||
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>
|
||||
Python 3.13.5 64-bit final
|
||||
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
|
||||
```
|
||||
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>
|
||||
Python 3.13.5 64-bit final
|
||||
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
|
||||
```
|
||||
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>
|
||||
Python 3.13.5 64-bit final
|
||||
MacOS Sequoia 15.5 x86_64
|
||||
@@ -64,7 +64,7 @@ MacOS High Sierra 10.13.6 x86_64
|
||||
Path: /Users/Admin/bin/gam7
|
||||
Version Check:
|
||||
Current: 5.35.08
|
||||
Latest: 7.12.00
|
||||
Latest: 7.12.01
|
||||
echo $?
|
||||
1
|
||||
```
|
||||
@@ -72,7 +72,7 @@ echo $?
|
||||
Print the current version number without details
|
||||
```
|
||||
gam version simple
|
||||
7.12.00
|
||||
7.12.01
|
||||
```
|
||||
In Linux/MacOS you can do:
|
||||
```
|
||||
@@ -82,7 +82,7 @@ echo $VER
|
||||
Print the current version of Gam and address of this Wiki
|
||||
```
|
||||
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>
|
||||
Python 3.13.5 64-bit final
|
||||
MacOS Sequoia 15.5 x86_64
|
||||
|
||||
Reference in New Issue
Block a user