mirror of
https://github.com/GAM-team/GAM.git
synced 2026-07-03 20:31:35 +00:00
Classroom student groups in general release
This commit is contained in:
@@ -1,3 +1,7 @@
|
|||||||
|
7.32.04
|
||||||
|
|
||||||
|
Support for student groups in Google Classroom no longer requires Developer Preview membership.
|
||||||
|
|
||||||
7.32.03
|
7.32.03
|
||||||
|
|
||||||
Added option `template` as an additional formating option for `gam <UserTypeEntity> show signature`
|
Added option `template` as an additional formating option for `gam <UserTypeEntity> show signature`
|
||||||
@@ -5,7 +9,15 @@ that displays just the HTML data; this simplifies capturing the data for use as
|
|||||||
```
|
```
|
||||||
$ gam redirect stdout ./SigTemplate.html user user@domain.com show signature template
|
$ gam redirect stdout ./SigTemplate.html user user@domain.com show signature template
|
||||||
$ more SigTemplate.html
|
$ more SigTemplate.html
|
||||||
<div dir="ltr"><div dir="ltr"><div dir="ltr"><p style="margin:0px;font-size-adjust:none;font-stretch:normal;font-size:12px;line-height:normal;font-family:Monaco;color:rgb(0,0,0)"><span style="background-color:rgb(82,208,206)">{RT}Email: {Email}{/RT}</span></p><p style="margin:0px;font-size-adjust:none;font-stretch:normal;font-size:12px;line-height:normal;font-family:Monaco;color:rgb(0,0,0)"><span style="background-color:rgb(82,208,206)">{RT}Phone: {Phone}{/RT}</span></p><p style="margin:0px;font-size-adjust:none;font-stretch:normal;font-size:12px;line-height:normal;font-family:Monaco;color:rgb(0,0,0)"><span style="background-color:rgb(82,208,206)">{RT}Mobile: {Mobile}{/RT}</span></p></div><br></div>\n</div>
|
<div dir="ltr"><div dir="ltr"><div dir="ltr">
|
||||||
|
<p style="margin:0px;font-size-adjust:none;font-stretch:normal;font-size:12px;line-height:normal;font-family:Monaco;color:rgb(0,0,0)">
|
||||||
|
<span style="background-color:rgb(82,208,206)">{RT}Email: {Email}{/RT}</span></p>
|
||||||
|
<p style="margin:0px;font-size-adjust:none;font-stretch:normal;font-size:12px;line-height:normal;font-family:Monaco;color:rgb(0,0,0)">
|
||||||
|
<span style="background-color:rgb(82,208,206)">{RT}Phone: {Phone}{/RT}</span></p>
|
||||||
|
<p style="margin:0px;font-size-adjust:none;font-stretch:normal;font-size:12px;line-height:normal;font-family:Monaco;color:rgb(0,0,0)">
|
||||||
|
<span style="background-color:rgb(82,208,206)">{RT}Mobile: {Mobile}{/RT}</span></p>
|
||||||
|
</div><br></div>\n</div>
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
7.32.02
|
7.32.02
|
||||||
|
|||||||
@@ -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.32.03'
|
__version__ = '7.32.04'
|
||||||
__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
|
||||||
@@ -4820,7 +4820,7 @@ def getService(api, httpObj):
|
|||||||
triesLimit = 3
|
triesLimit = 3
|
||||||
for n in range(1, triesLimit+1):
|
for n in range(1, triesLimit+1):
|
||||||
try:
|
try:
|
||||||
if api not in {API.CHAT, API.CLASSROOM} or not GC.Values[GC.DEVELOPER_PREVIEW_API_KEY]:
|
if api not in {API.CHAT} or not GC.Values[GC.DEVELOPER_PREVIEW_API_KEY]:
|
||||||
discoveryServiceUrl = DISCOVERY_URIS[v2discovery]
|
discoveryServiceUrl = DISCOVERY_URIS[v2discovery]
|
||||||
else:
|
else:
|
||||||
discoveryServiceUrl = DEVELOPER_PREVIEW_DISCOVERY_URI
|
discoveryServiceUrl = DEVELOPER_PREVIEW_DISCOVERY_URI
|
||||||
@@ -52846,7 +52846,6 @@ def doCreateCourseStudentGroups():
|
|||||||
throwReasons=[GAPI.NOT_FOUND, GAPI.SERVICE_NOT_AVAILABLE, GAPI.NOT_IMPLEMENTED,
|
throwReasons=[GAPI.NOT_FOUND, GAPI.SERVICE_NOT_AVAILABLE, GAPI.NOT_IMPLEMENTED,
|
||||||
GAPI.FORBIDDEN, GAPI.PERMISSION_DENIED],
|
GAPI.FORBIDDEN, GAPI.PERMISSION_DENIED],
|
||||||
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
|
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
|
||||||
previewVersion='V1_20250630_PREVIEW',
|
|
||||||
**kwargs)
|
**kwargs)
|
||||||
kvList[-1] = f"{studentGroup['title']}({studentGroup['id']})"
|
kvList[-1] = f"{studentGroup['title']}({studentGroup['id']})"
|
||||||
if not csvPF:
|
if not csvPF:
|
||||||
@@ -52893,7 +52892,6 @@ def doUpdateCourseStudentGroups():
|
|||||||
throwReasons=[GAPI.NOT_FOUND, GAPI.SERVICE_NOT_AVAILABLE, GAPI.NOT_IMPLEMENTED,
|
throwReasons=[GAPI.NOT_FOUND, GAPI.SERVICE_NOT_AVAILABLE, GAPI.NOT_IMPLEMENTED,
|
||||||
GAPI.FORBIDDEN, GAPI.PERMISSION_DENIED],
|
GAPI.FORBIDDEN, GAPI.PERMISSION_DENIED],
|
||||||
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
|
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
|
||||||
previewVersion='V1_20250630_PREVIEW',
|
|
||||||
**kwargs)
|
**kwargs)
|
||||||
kvList[-1] = f"{studentGroup['title']}({studentGroup['id']})"
|
kvList[-1] = f"{studentGroup['title']}({studentGroup['id']})"
|
||||||
entityActionPerformed(kvList)
|
entityActionPerformed(kvList)
|
||||||
@@ -52927,7 +52925,6 @@ def doDeleteCourseStudentGroups():
|
|||||||
throwReasons=[GAPI.NOT_FOUND, GAPI.SERVICE_NOT_AVAILABLE, GAPI.NOT_IMPLEMENTED,
|
throwReasons=[GAPI.NOT_FOUND, GAPI.SERVICE_NOT_AVAILABLE, GAPI.NOT_IMPLEMENTED,
|
||||||
GAPI.FORBIDDEN, GAPI.PERMISSION_DENIED],
|
GAPI.FORBIDDEN, GAPI.PERMISSION_DENIED],
|
||||||
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
|
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
|
||||||
previewVersion='V1_20250630_PREVIEW',
|
|
||||||
**kwargs)
|
**kwargs)
|
||||||
entityActionPerformed(kvList, i, count)
|
entityActionPerformed(kvList, i, count)
|
||||||
except GAPI.notFound as e:
|
except GAPI.notFound as e:
|
||||||
@@ -52972,7 +52969,6 @@ def doClearCourseStudentGroups():
|
|||||||
throwReasons=[GAPI.NOT_FOUND, GAPI.SERVICE_NOT_AVAILABLE, GAPI.NOT_IMPLEMENTED,
|
throwReasons=[GAPI.NOT_FOUND, GAPI.SERVICE_NOT_AVAILABLE, GAPI.NOT_IMPLEMENTED,
|
||||||
GAPI.FORBIDDEN, GAPI.PERMISSION_DENIED],
|
GAPI.FORBIDDEN, GAPI.PERMISSION_DENIED],
|
||||||
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
|
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
|
||||||
previewVersion='V1_20250630_PREVIEW',
|
|
||||||
courseId=courseId)
|
courseId=courseId)
|
||||||
except GAPI.notFound as e:
|
except GAPI.notFound as e:
|
||||||
entityActionFailedWarning([Ent.COURSE, courseId], str(e))
|
entityActionFailedWarning([Ent.COURSE, courseId], str(e))
|
||||||
@@ -52993,7 +52989,6 @@ def doClearCourseStudentGroups():
|
|||||||
throwReasons=[GAPI.NOT_FOUND, GAPI.SERVICE_NOT_AVAILABLE, GAPI.NOT_IMPLEMENTED,
|
throwReasons=[GAPI.NOT_FOUND, GAPI.SERVICE_NOT_AVAILABLE, GAPI.NOT_IMPLEMENTED,
|
||||||
GAPI.FORBIDDEN, GAPI.PERMISSION_DENIED],
|
GAPI.FORBIDDEN, GAPI.PERMISSION_DENIED],
|
||||||
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
|
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
|
||||||
previewVersion='V1_20250630_PREVIEW',
|
|
||||||
**kwargs)
|
**kwargs)
|
||||||
entityActionPerformed(kvList, j, jcount)
|
entityActionPerformed(kvList, j, jcount)
|
||||||
except GAPI.notFound as e:
|
except GAPI.notFound as e:
|
||||||
@@ -53067,7 +53062,6 @@ def doPrintCourseStudentGroups(showMembers=False):
|
|||||||
throwReasons=[GAPI.NOT_FOUND, GAPI.SERVICE_NOT_AVAILABLE, GAPI.NOT_IMPLEMENTED,
|
throwReasons=[GAPI.NOT_FOUND, GAPI.SERVICE_NOT_AVAILABLE, GAPI.NOT_IMPLEMENTED,
|
||||||
GAPI.FORBIDDEN, GAPI.PERMISSION_DENIED],
|
GAPI.FORBIDDEN, GAPI.PERMISSION_DENIED],
|
||||||
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
|
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
|
||||||
previewVersion='V1_20250630_PREVIEW',
|
|
||||||
courseId=courseId)
|
courseId=courseId)
|
||||||
except GAPI.notFound as e:
|
except GAPI.notFound as e:
|
||||||
entityActionFailedWarning([Ent.COURSE, courseId], str(e))
|
entityActionFailedWarning([Ent.COURSE, courseId], str(e))
|
||||||
@@ -53102,7 +53096,6 @@ def doPrintCourseStudentGroups(showMembers=False):
|
|||||||
throwReasons=[GAPI.NOT_FOUND, GAPI.SERVICE_NOT_AVAILABLE,
|
throwReasons=[GAPI.NOT_FOUND, GAPI.SERVICE_NOT_AVAILABLE,
|
||||||
GAPI.FORBIDDEN, GAPI.PERMISSION_DENIED],
|
GAPI.FORBIDDEN, GAPI.PERMISSION_DENIED],
|
||||||
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
|
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
|
||||||
previewVersion='V1_20250630_PREVIEW',
|
|
||||||
courseId=courseId, studentGroupId=studentGroupId)
|
courseId=courseId, studentGroupId=studentGroupId)
|
||||||
if showItemCountOnly:
|
if showItemCountOnly:
|
||||||
itemCount += len(students)
|
itemCount += len(students)
|
||||||
@@ -53170,7 +53163,6 @@ def doProcessCourseStudentGroupMembers():
|
|||||||
throwReasons=[GAPI.NOT_FOUND, GAPI.SERVICE_NOT_AVAILABLE,
|
throwReasons=[GAPI.NOT_FOUND, GAPI.SERVICE_NOT_AVAILABLE,
|
||||||
GAPI.FORBIDDEN, GAPI.PERMISSION_DENIED],
|
GAPI.FORBIDDEN, GAPI.PERMISSION_DENIED],
|
||||||
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
|
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
|
||||||
previewVersion='V1_20250630_PREVIEW',
|
|
||||||
courseId=courseId, studentGroupId=studentGroupId)
|
courseId=courseId, studentGroupId=studentGroupId)
|
||||||
except GAPI.notFound as e:
|
except GAPI.notFound as e:
|
||||||
entityActionFailedWarning([Ent.COURSE, courseId, Ent.COURSE_STUDENTGROUP, studentGroupId], str(e))
|
entityActionFailedWarning([Ent.COURSE, courseId, Ent.COURSE_STUDENTGROUP, studentGroupId], str(e))
|
||||||
@@ -53206,7 +53198,6 @@ def doProcessCourseStudentGroupMembers():
|
|||||||
GAPI.SERVICE_NOT_AVAILABLE, GAPI.NOT_IMPLEMENTED,
|
GAPI.SERVICE_NOT_AVAILABLE, GAPI.NOT_IMPLEMENTED,
|
||||||
GAPI.FORBIDDEN, GAPI.PERMISSION_DENIED],
|
GAPI.FORBIDDEN, GAPI.PERMISSION_DENIED],
|
||||||
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
|
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
|
||||||
previewVersion='V1_20250630_PREVIEW',
|
|
||||||
**kwargs)
|
**kwargs)
|
||||||
entityActionPerformed(kvList, i, count)
|
entityActionPerformed(kvList, i, count)
|
||||||
except (GAPI.alreadyExists, GAPI.notFound) as e:
|
except (GAPI.alreadyExists, GAPI.notFound) as e:
|
||||||
|
|||||||
Reference in New Issue
Block a user