mirror of
https://github.com/GAM-team/GAM.git
synced 2026-07-03 12:21:35 +00:00
Updated <ToDriveAttribute> to allow multiple tdshare <EmailAddress> commenter|reader|writer options.
This commit is contained in:
@@ -11,6 +11,47 @@ Add the `-s` option to the end of the above commands to suppress creating the `g
|
|||||||
|
|
||||||
See [Downloads](https://github.com/taers232c/GAMADV-XTD3/wiki/Downloads) for Windows or other options, including manual installation
|
See [Downloads](https://github.com/taers232c/GAMADV-XTD3/wiki/Downloads) for Windows or other options, including manual installation
|
||||||
|
|
||||||
|
### 6.67.32
|
||||||
|
|
||||||
|
Updated `<ToDriveAttribute>` to allow multiple `tdshare <EmailAddress> commenter|reader|writer` options.
|
||||||
|
|
||||||
|
### 6.67.31
|
||||||
|
|
||||||
|
Updated `gam <UserTypeEntity> claim|transfer ownership <DriveFileEntity>` to properly
|
||||||
|
handle the case where `<DriveFileEntity>` referencess a Drive shortcut.
|
||||||
|
|
||||||
|
### 6.67.30
|
||||||
|
|
||||||
|
Fixed bug where the `fullpath` option in various commands was not converting the generic shared drive name `Drive` to the drive's actual name.
|
||||||
|
|
||||||
|
### 6.67.29
|
||||||
|
|
||||||
|
Added optional argument `owneraccess` to `gam courses <CourseEntity> remove teachers|students [owneracccess] <UserTypeEntity` and
|
||||||
|
`gam course <CourseID> remove teacher|student [owneraccess] <EmailAddress>` in order to test a possible API change.
|
||||||
|
|
||||||
|
Updated code to avoid a trap when `gam config auto_batch_min 1 csv file.csv gam ...` was entered.
|
||||||
|
The `config auto_batch_min 1` is not appropriate in this context and will be ignored.
|
||||||
|
|
||||||
|
### 6.67.28
|
||||||
|
|
||||||
|
Improved handling of `Bad Request` error in `gam <UserTypeEntity> collect orphans`.
|
||||||
|
|
||||||
|
### 6.67.27
|
||||||
|
|
||||||
|
Updated `gam <UserTypeEntity> collect orphans` to handle the following error:
|
||||||
|
```
|
||||||
|
ERROR: 400: badRequest - Bad Request
|
||||||
|
```
|
||||||
|
|
||||||
|
### 6.67.26
|
||||||
|
|
||||||
|
Fixed bug in `gam print vaultexports ... formatjson` that caused a trap.
|
||||||
|
|
||||||
|
### 6.67.25
|
||||||
|
|
||||||
|
Added option `owneraccess` to `gam info courses <CourseEntity>` and `gam info course <CourseID>` in order
|
||||||
|
to test a possible API change.
|
||||||
|
|
||||||
### 6.67.24
|
### 6.67.24
|
||||||
|
|
||||||
Fixed bug that caused HTML password notification email messages to be displayed in raw form.
|
Fixed bug that caused HTML password notification email messages to be displayed in raw form.
|
||||||
|
|||||||
@@ -334,7 +334,7 @@ writes the credentials into the file oauth2.txt.
|
|||||||
admin@server:/Users/admin/bin/gamadv-xtd3$ rm -f /Users/admin/GAMConfig/oauth2.txt
|
admin@server:/Users/admin/bin/gamadv-xtd3$ rm -f /Users/admin/GAMConfig/oauth2.txt
|
||||||
admin@server:/Users/admin/bin/gamadv-xtd3$ ./gam version
|
admin@server:/Users/admin/bin/gamadv-xtd3$ ./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
|
||||||
GAMADV-XTD3 6.67.24 - https://github.com/taers232c/GAMADV-XTD3 - pythonsource
|
GAMADV-XTD3 6.67.32 - https://github.com/taers232c/GAMADV-XTD3 - pythonsource
|
||||||
Ross Scroggs <ross.scroggs@gmail.com>
|
Ross Scroggs <ross.scroggs@gmail.com>
|
||||||
Python 3.12.1 64-bit final
|
Python 3.12.1 64-bit final
|
||||||
MacOS Sonoma 14.2.1 x86_64
|
MacOS Sonoma 14.2.1 x86_64
|
||||||
@@ -1002,7 +1002,7 @@ writes the credentials into the file oauth2.txt.
|
|||||||
C:\GAMADV-XTD3>del C:\GAMConfig\oauth2.txt
|
C:\GAMADV-XTD3>del C:\GAMConfig\oauth2.txt
|
||||||
C:\GAMADV-XTD3>gam version
|
C:\GAMADV-XTD3>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
|
||||||
GAMADV-XTD3 6.67.24 - https://github.com/taers232c/GAMADV-XTD3 - pythonsource
|
GAMADV-XTD3 6.67.32 - https://github.com/taers232c/GAMADV-XTD3 - pythonsource
|
||||||
Ross Scroggs <ross.scroggs@gmail.com>
|
Ross Scroggs <ross.scroggs@gmail.com>
|
||||||
Python 3.12.1 64-bit final
|
Python 3.12.1 64-bit final
|
||||||
Windows-10-10.0.17134 AMD64
|
Windows-10-10.0.17134 AMD64
|
||||||
|
|||||||
@@ -186,7 +186,7 @@ direct the uploaded file to a particular user and location and add a timestamp t
|
|||||||
(tdnoescapechar [<Boolean>])|
|
(tdnoescapechar [<Boolean>])|
|
||||||
(tdparent (id:<DriveFolderID>)|<DriveFolderName>)|
|
(tdparent (id:<DriveFolderID>)|<DriveFolderName>)|
|
||||||
(tdretaintitle [<Boolean>])|
|
(tdretaintitle [<Boolean>])|
|
||||||
(tdshare <EmailAddress> commenter|reader|writer)|
|
(tdshare <EmailAddress> commenter|reader|writer)*|
|
||||||
(tdsheet (id:<Number>)|<String>)|
|
(tdsheet (id:<Number>)|<String>)|
|
||||||
(tdsheettimestamp [<Boolean>] [tdsheettimeformat <String>])
|
(tdsheettimestamp [<Boolean>] [tdsheettimeformat <String>])
|
||||||
(tdsheettitle <String>)|
|
(tdsheettitle <String>)|
|
||||||
@@ -213,7 +213,7 @@ It is uploaded to the root folder of the admin user named in `oauth2.txt`.
|
|||||||
## Create new file
|
## Create new file
|
||||||
If `tdfileid <DriveFileID>` is not specified, a new file is created.
|
If `tdfileid <DriveFileID>` is not specified, a new file is created.
|
||||||
* `tdparent` - An existing/writable parent folder for the uploaded file; if not specified, the `todrive_parent` value from gam.cfg is used; that value defaults to the root folder.
|
* `tdparent` - An existing/writable parent folder for the uploaded file; if not specified, the `todrive_parent` value from gam.cfg is used; that value defaults to the root folder.
|
||||||
* `tdshare <EmailAddress> commenter|reader|writer` - Share the new file with `<EmailAddress>` with the specified role. `<EmailAddress>` must be valid within your Google Workspace.
|
* `tdshare <EmailAddress> commenter|reader|writer` - Share the new file with `<EmailAddress>` with the specified role. `<EmailAddress>` must be valid within your Google Workspace. You can specify multiple shares.
|
||||||
|
|
||||||
## File name, file description and sheet name
|
## File name, file description and sheet name
|
||||||
* `tdtitle` - The title for the uploaded file, if not specified, the Gam default title is used.
|
* `tdtitle` - The title for the uploaded file, if not specified, the Gam default title is used.
|
||||||
|
|||||||
@@ -713,12 +713,14 @@ The attendee changes are displayed but not processed unless `doit` is specified.
|
|||||||
|
|
||||||
## Manage focus time events
|
## Manage focus time events
|
||||||
You can create and delete focus time events; they can not be updated.
|
You can create and delete focus time events; they can not be updated.
|
||||||
To update a working location event, delete the working location event and recreate it.
|
To update a focus time event, delete the focus time event and recreate it.
|
||||||
```
|
```
|
||||||
gam <UserTypeEntity> create focustime
|
gam <UserTypeEntity> create focustime
|
||||||
[chatstatus available|donotdisturb]|
|
[chatstatus available|donotdisturb]|
|
||||||
[declinemode none|all|new] [declinemessage <String>]|
|
[declinemode none|all|new] [declinemessage <String>]|
|
||||||
(timerange <Time> <Time>)+
|
[summary <String>]
|
||||||
|
(timerange <Time> <Time>
|
||||||
|
(recurrence <RRULE, EXRULE, RDATE and EXDATE line>)*
|
||||||
|
|
||||||
gam <UserTypeEntity> delete focustime
|
gam <UserTypeEntity> delete focustime
|
||||||
(timerange <Time> <Time>)+
|
(timerange <Time> <Time>)+
|
||||||
@@ -762,17 +764,20 @@ The `quotechar <Character>` option allows you to choose an alternate quote chara
|
|||||||
|
|
||||||
## Manage out of office events
|
## Manage out of office events
|
||||||
You can create and delete out of office events; they can not be updated.
|
You can create and delete out of office events; they can not be updated.
|
||||||
To update a working location event, delete the working location event and recreate it.
|
To update an out of office event, delete the out of office event and recreate it.
|
||||||
```
|
```
|
||||||
gam <UserTypeEntity> create outofoffice
|
gam <UserTypeEntity> create outofoffice
|
||||||
[declinemode none|all|new] [declinemessage <String>]|
|
[declinemode none|all|new]
|
||||||
(timerange <Time> <Time>)+
|
[declinemessage <String>]
|
||||||
|
[summary <String>]
|
||||||
|
(timerange <Time> <Time>
|
||||||
|
(recurrence <RRULE, EXRULE, RDATE and EXDATE line>)*
|
||||||
|
|
||||||
gam <UserTypeEntity> delete outofoffice
|
gam <UserTypeEntity> delete outofoffice
|
||||||
(timerange <Time> <Time>)+
|
(timerange <Time> <Time>)+
|
||||||
```
|
```
|
||||||
|
|
||||||
out of office events span a time range:
|
Out of office events span a time range:
|
||||||
* `timerange <Time> <Time>` - A time range, may span multiple days
|
* `timerange <Time> <Time>` - A time range, may span multiple days
|
||||||
|
|
||||||
## Display out of office events
|
## Display out of office events
|
||||||
|
|||||||
@@ -10,7 +10,8 @@
|
|||||||
|
|
||||||
## API documentation
|
## API documentation
|
||||||
* https://developers.google.com/gmail/api/v1/reference/users/settings/delegates
|
* https://developers.google.com/gmail/api/v1/reference/users/settings/delegates
|
||||||
* https://support.google.com/a/answer/7223765?hl=en
|
* https://support.google.com/a/answer/7223765
|
||||||
|
* https://support.google.com/a/answer/11946994
|
||||||
|
|
||||||
## Definitions
|
## Definitions
|
||||||
* [`<UserTypeEntity>`](Collections-of-Users)
|
* [`<UserTypeEntity>`](Collections-of-Users)
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
Print the current version of Gam with details
|
Print the current version of Gam with details
|
||||||
```
|
```
|
||||||
gam version
|
gam version
|
||||||
GAMADV-XTD3 6.67.24 - https://github.com/taers232c/GAMADV-XTD3 - pythonsource
|
GAMADV-XTD3 6.67.32 - https://github.com/taers232c/GAMADV-XTD3 - pythonsource
|
||||||
Ross Scroggs <ross.scroggs@gmail.com>
|
Ross Scroggs <ross.scroggs@gmail.com>
|
||||||
Python 3.12.1 64-bit final
|
Python 3.12.1 64-bit final
|
||||||
MacOS Sonoma 14.2.1 x86_64
|
MacOS Sonoma 14.2.1 x86_64
|
||||||
@@ -16,7 +16,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
|
||||||
GAMADV-XTD3 6.67.24 - https://github.com/taers232c/GAMADV-XTD3 - pythonsource
|
GAMADV-XTD3 6.67.32 - https://github.com/taers232c/GAMADV-XTD3 - pythonsource
|
||||||
Ross Scroggs <ross.scroggs@gmail.com>
|
Ross Scroggs <ross.scroggs@gmail.com>
|
||||||
Python 3.12.1 64-bit final
|
Python 3.12.1 64-bit final
|
||||||
MacOS Sonoma 14.2.1 x86_64
|
MacOS Sonoma 14.2.1 x86_64
|
||||||
@@ -28,7 +28,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
|
||||||
GAMADV-XTD3 6.67.24 - https://github.com/taers232c/GAMADV-XTD3 - pythonsource
|
GAMADV-XTD3 6.67.32 - https://github.com/taers232c/GAMADV-XTD3 - pythonsource
|
||||||
Ross Scroggs <ross.scroggs@gmail.com>
|
Ross Scroggs <ross.scroggs@gmail.com>
|
||||||
Python 3.12.1 64-bit final
|
Python 3.12.1 64-bit final
|
||||||
MacOS Sonoma 14.2.1 x86_64
|
MacOS Sonoma 14.2.1 x86_64
|
||||||
@@ -65,7 +65,7 @@ MacOS High Sierra 10.13.6 x86_64
|
|||||||
Path: /Users/Admin/bin/gamadv-xtd3
|
Path: /Users/Admin/bin/gamadv-xtd3
|
||||||
Version Check:
|
Version Check:
|
||||||
Current: 5.35.08
|
Current: 5.35.08
|
||||||
Latest: 6.67.24
|
Latest: 6.67.32
|
||||||
echo $?
|
echo $?
|
||||||
1
|
1
|
||||||
```
|
```
|
||||||
@@ -73,7 +73,7 @@ echo $?
|
|||||||
Print the current version number without details
|
Print the current version number without details
|
||||||
```
|
```
|
||||||
gam version simple
|
gam version simple
|
||||||
6.67.24
|
6.67.32
|
||||||
```
|
```
|
||||||
In Linux/MacOS you can do:
|
In Linux/MacOS you can do:
|
||||||
```
|
```
|
||||||
@@ -83,7 +83,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 6.67.24 - https://github.com/taers232c/GAMADV-XTD3
|
GAM 6.67.32 - https://github.com/taers232c/GAMADV-XTD3
|
||||||
Ross Scroggs <ross.scroggs@gmail.com>
|
Ross Scroggs <ross.scroggs@gmail.com>
|
||||||
Python 3.12.1 64-bit final
|
Python 3.12.1 64-bit final
|
||||||
MacOS Sonoma 14.2.1 x86_64
|
MacOS Sonoma 14.2.1 x86_64
|
||||||
|
|||||||
@@ -611,7 +611,7 @@ If an item contains spaces, it should be surrounded by ".
|
|||||||
(tdnoescapechar [<Boolean>])|
|
(tdnoescapechar [<Boolean>])|
|
||||||
(tdparent (id:<DriveFolderID>)|<DriveFolderName>)|
|
(tdparent (id:<DriveFolderID>)|<DriveFolderName>)|
|
||||||
(tdretaintitle [<Boolean>])|
|
(tdretaintitle [<Boolean>])|
|
||||||
(tdshare <EmailAddress> commenter|reader|writer)|
|
(tdshare <EmailAddress> commenter|reader|writer)*|
|
||||||
(tdsheet (id:<Number>)|<String>)|
|
(tdsheet (id:<Number>)|<String>)|
|
||||||
(tdsheettimestamp [<Boolean>] [tdsheettimeformat <String>])
|
(tdsheettimestamp [<Boolean>] [tdsheettimeformat <String>])
|
||||||
(tdsheettitle <String>)|
|
(tdsheettitle <String>)|
|
||||||
|
|||||||
@@ -2,6 +2,10 @@
|
|||||||
|
|
||||||
Merged GAM-Team version
|
Merged GAM-Team version
|
||||||
|
|
||||||
|
6.67.32
|
||||||
|
|
||||||
|
Updated `<ToDriveAttribute>` to allow multiple `tdshare <EmailAddress> commenter|reader|writer` options.
|
||||||
|
|
||||||
6.67.31
|
6.67.31
|
||||||
|
|
||||||
Updated `gam <UserTypeEntity> claim|transfer ownership <DriveFileEntity>` to properly
|
Updated `gam <UserTypeEntity> claim|transfer ownership <DriveFileEntity>` to properly
|
||||||
|
|||||||
@@ -7845,7 +7845,7 @@ class CSVPrintFile():
|
|||||||
'fileId': None, 'parentId': None, 'parent': GC.Values[GC.TODRIVE_PARENT], 'retaintitle': False,
|
'fileId': None, 'parentId': None, 'parent': GC.Values[GC.TODRIVE_PARENT], 'retaintitle': False,
|
||||||
'localcopy': GC.Values[GC.TODRIVE_LOCALCOPY], 'uploadnodata': GC.Values[GC.TODRIVE_UPLOAD_NODATA],
|
'localcopy': GC.Values[GC.TODRIVE_LOCALCOPY], 'uploadnodata': GC.Values[GC.TODRIVE_UPLOAD_NODATA],
|
||||||
'nobrowser': GC.Values[GC.TODRIVE_NOBROWSER], 'noemail': GC.Values[GC.TODRIVE_NOEMAIL],
|
'nobrowser': GC.Values[GC.TODRIVE_NOBROWSER], 'noemail': GC.Values[GC.TODRIVE_NOEMAIL],
|
||||||
'share': {}}
|
'share': []}
|
||||||
while Cmd.ArgumentsRemaining():
|
while Cmd.ArgumentsRemaining():
|
||||||
myarg = getArgument()
|
myarg = getArgument()
|
||||||
if myarg == 'tduser':
|
if myarg == 'tduser':
|
||||||
@@ -7918,9 +7918,9 @@ class CSVPrintFile():
|
|||||||
elif myarg == 'tdnoescapechar':
|
elif myarg == 'tdnoescapechar':
|
||||||
self.todrive['noescapechar'] = getBoolean()
|
self.todrive['noescapechar'] = getBoolean()
|
||||||
elif myarg == 'tdshare':
|
elif myarg == 'tdshare':
|
||||||
self.todrive['share']['emailAddress'] = normalizeEmailAddressOrUID(getString(Cmd.OB_EMAIL_ADDRESS))
|
self.todrive['share'].append({'emailAddress': normalizeEmailAddressOrUID(getString(Cmd.OB_EMAIL_ADDRESS)),
|
||||||
self.todrive['share']['type'] = 'user'
|
'type': 'user',
|
||||||
self.todrive['share']['role'] = getChoice(self.TDSHARE_ACL_ROLES_MAP, mapChoice=True)
|
'role': getChoice(self.TDSHARE_ACL_ROLES_MAP, mapChoice=True)})
|
||||||
else:
|
else:
|
||||||
Cmd.Backup()
|
Cmd.Backup()
|
||||||
break
|
break
|
||||||
@@ -8581,15 +8581,17 @@ class CSVPrintFile():
|
|||||||
closeFile(csvFile)
|
closeFile(csvFile)
|
||||||
return
|
return
|
||||||
closeFile(csvFile)
|
closeFile(csvFile)
|
||||||
if not self.todrive['fileId'] and self.todrive['share'] and self.todrive['share']['emailAddress'] != user:
|
if not self.todrive['fileId'] and self.todrive['share']:
|
||||||
Act.Set(Act.SHARE)
|
Act.Set(Act.SHARE)
|
||||||
|
for share in self.todrive['share']:
|
||||||
|
if share['emailAddress'] != user:
|
||||||
try:
|
try:
|
||||||
callGAPI(drive.permissions(), 'create',
|
callGAPI(drive.permissions(), 'create',
|
||||||
bailOnInternalError=True,
|
bailOnInternalError=True,
|
||||||
throwReasons=GAPI.DRIVE_ACCESS_THROW_REASONS+GAPI.DRIVE3_CREATE_ACL_THROW_REASONS,
|
throwReasons=GAPI.DRIVE_ACCESS_THROW_REASONS+GAPI.DRIVE3_CREATE_ACL_THROW_REASONS,
|
||||||
fileId=spreadsheetId, sendNotificationEmail=False, body=self.todrive['share'], fields='', supportsAllDrives=True)
|
fileId=spreadsheetId, sendNotificationEmail=False, body=share, fields='', supportsAllDrives=True)
|
||||||
entityActionPerformed([Ent.USER, user, Ent.SPREADSHEET, title,
|
entityActionPerformed([Ent.USER, user, Ent.SPREADSHEET, title,
|
||||||
Ent.TARGET_USER, self.todrive['share']['emailAddress'], Ent.ROLE, self.todrive['share']['role']])
|
Ent.TARGET_USER, share['emailAddress'], Ent.ROLE, share['role']])
|
||||||
except (GAPI.badRequest, GAPI.invalid, GAPI.fileNotFound, GAPI.forbidden, GAPI.internalError,
|
except (GAPI.badRequest, GAPI.invalid, GAPI.fileNotFound, GAPI.forbidden, GAPI.internalError,
|
||||||
GAPI.insufficientFilePermissions, GAPI.insufficientParentPermissions, GAPI.unknownError, GAPI.ownershipChangeAcrossDomainNotPermitted,
|
GAPI.insufficientFilePermissions, GAPI.insufficientParentPermissions, GAPI.unknownError, GAPI.ownershipChangeAcrossDomainNotPermitted,
|
||||||
GAPI.teamDriveDomainUsersOnlyRestriction, GAPI.teamDriveTeamMembersOnlyRestriction,
|
GAPI.teamDriveDomainUsersOnlyRestriction, GAPI.teamDriveTeamMembersOnlyRestriction,
|
||||||
@@ -8604,7 +8606,7 @@ class CSVPrintFile():
|
|||||||
GAPI.teamDrivesFolderSharingNotSupported, GAPI.invalidLinkVisibility,
|
GAPI.teamDrivesFolderSharingNotSupported, GAPI.invalidLinkVisibility,
|
||||||
GAPI.invalidSharingRequest, GAPI.fileNeverWritable, GAPI.abusiveContentRestriction) as e:
|
GAPI.invalidSharingRequest, GAPI.fileNeverWritable, GAPI.abusiveContentRestriction) as e:
|
||||||
entityActionFailedWarning([Ent.USER, user, Ent.SPREADSHEET, title,
|
entityActionFailedWarning([Ent.USER, user, Ent.SPREADSHEET, title,
|
||||||
Ent.TARGET_USER, self.todrive['share']['emailAddress'], Ent.ROLE, self.todrive['share']['role']],
|
Ent.TARGET_USER, share['emailAddress'], Ent.ROLE, share['role']],
|
||||||
str(e))
|
str(e))
|
||||||
if ((result['mimeType'] == MIMETYPE_GA_SPREADSHEET) and
|
if ((result['mimeType'] == MIMETYPE_GA_SPREADSHEET) and
|
||||||
(self.todrive['sheetEntity'] or self.todrive['locale'] or self.todrive['timeZone'] or
|
(self.todrive['sheetEntity'] or self.todrive['locale'] or self.todrive['timeZone'] or
|
||||||
|
|||||||
Reference in New Issue
Block a user