From dffdd2e1904acab9cc20bf348a0fe5cbb42e9fb4 Mon Sep 17 00:00:00 2001 From: Ross Scroggs Date: Tue, 8 Oct 2024 20:13:51 -0700 Subject: [PATCH] Added options `timestamp []` and `timeformat ` to `gam create|update drivefile` --- docs/GamUpdates.md | 5 ++++ docs/How-to-Upgrade-Legacy-GAM-to-GAM7.md | 4 ++-- docs/Users-Drive-Files-Manage.md | 14 +++++++++++- docs/Version-and-Help.md | 12 +++++----- src/GamCommands.txt | 2 ++ src/GamUpdate.txt | 5 ++++ src/gam/__init__.py | 28 +++++++++++++++++++++-- 7 files changed, 59 insertions(+), 11 deletions(-) diff --git a/docs/GamUpdates.md b/docs/GamUpdates.md index 8a378518..df0ca89d 100644 --- a/docs/GamUpdates.md +++ b/docs/GamUpdates.md @@ -10,6 +10,11 @@ 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.00.15 + +Added options `timestamp []` and `timeformat ` to `gam create|update drivefile` that allow +adding a timestamp to a created/updated file name. + ### 7.00.14 Retry the following unexpected errors in `gam print users`. diff --git a/docs/How-to-Upgrade-Legacy-GAM-to-GAM7.md b/docs/How-to-Upgrade-Legacy-GAM-to-GAM7.md index 09a04737..07f20332 100644 --- a/docs/How-to-Upgrade-Legacy-GAM-to-GAM7.md +++ b/docs/How-to-Upgrade-Legacy-GAM-to-GAM7.md @@ -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.00.14 - https://github.com/GAM-team/GAM - pyinstaller +GAM 7.00.15 - https://github.com/GAM-team/GAM - pyinstaller GAM Team Python 3.12.7 64-bit final MacOS Sonoma 14.5 x86_64 @@ -923,7 +923,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 -GAM7 7.00.14 - https://github.com/GAM-team/GAM - pythonsource +GAM7 7.00.15 - https://github.com/GAM-team/GAM - pythonsource GAM Team Python 3.12.7 64-bit final Windows-10-10.0.17134 AMD64 diff --git a/docs/Users-Drive-Files-Manage.md b/docs/Users-Drive-Files-Manage.md index f439ca88..1db4da7f 100644 --- a/docs/Users-Drive-Files-Manage.md +++ b/docs/Users-Drive-Files-Manage.md @@ -1,4 +1,4 @@ -!# Users - Drive Files Manage +# Users - Drive Files Manage - [API documentation](#api-documentation) - [Query documentation](Users-Drive-Query) - [Python Regular Expressions](Python-Regular-Expressions) Sub function @@ -170,6 +170,7 @@ gam create|add drivefile [(localfile |-)|(url )] [(drivefilename|newfilename ) | (replacefilename )*] [stripnameprefix ] [noduplicate] + [timestamp []] [timeformat ] * [(csv [todrive *] (addcsvdata )*) | (returnidonly|returnlinkonly|returneditlinkonly|showdetails)] @@ -205,6 +206,11 @@ These are the naming rules: If `stripnameprefix ` is specified, `` will be stripped from the front of the Google Drive file name if present. +You can add a timestamp to the FileName. +* `tdtimestamp` - Should a timestamp (of the time the file is uploaded to Google) be added to the title of the uploaded file. +* `tdtimeformat` - Format of the timestamp added to the title of the uploaded file; if not specified, an ISO format timestamp is added. + * See: https://docs.python.org/3/library/datetime.html#strftime-strptime-behavior + If `noduplicate` is specfied, GAM will issue a warning and not perform the create if a non-trashed item with the same name (regardless of MIME type) exists in the parent folder. @@ -464,6 +470,7 @@ gam update drivefile [copy] [returnidonly|ret [(localfile |-)|(url )] [retainname | (newfilename ) | (replacefilename )*] [stripnameprefix ] + [timestamp []] [timeformat ] * [(gsheet|csvsheet [clearfilter])|(addsheet )] [charset ] [columndelimiter ] @@ -513,6 +520,11 @@ For more complex renaming, use `replacefilename `: If `retainname` is not specified and `stripnameprefix ` is specified, `` will be stripped from the front of the Google Drive file name if present. +You can add a timestamp to the FileName. +* `tdtimestamp` - Should a timestamp (of the time the file is uploaded to Google) be added to the title of the uploaded file. +* `tdtimeformat` - Format of the timestamp added to the title of the uploaded file; if not specified, an ISO format timestamp is added. + * See: https://docs.python.org/3/library/datetime.html#strftime-strptime-behavior + You can update a specific sheet within a Google spreadsheet or add a new sheet to the spreadsheet * `gsheet|csvsheet ` - Specify a sheet by name in a Google Sheets file to be updated * `gsheet|csvsheet id:` - Specify a sheet by ID in a Google Sheets file to be updated diff --git a/docs/Version-and-Help.md b/docs/Version-and-Help.md index 3dabcbaa..d57224a6 100644 --- a/docs/Version-and-Help.md +++ b/docs/Version-and-Help.md @@ -3,7 +3,7 @@ Print the current version of Gam with details ``` gam version -GAM 7.00.14 - https://github.com/GAM-team/GAM - pyinstaller +GAM 7.00.15 - https://github.com/GAM-team/GAM - pyinstaller GAM Team Python 3.12.7 64-bit final MacOS Sonoma 14.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.00.14 - https://github.com/GAM-team/GAM - pyinstaller +GAM 7.00.15 - https://github.com/GAM-team/GAM - pyinstaller GAM Team Python 3.12.7 64-bit final MacOS Sonoma 14.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.00.14 - https://github.com/GAM-team/GAM - pyinstaller +GAM 7.00.15 - https://github.com/GAM-team/GAM - pyinstaller GAM Team Python 3.12.7 64-bit final MacOS Sonoma 14.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.00.14 + Latest: 7.00.15 echo $? 1 ``` @@ -72,7 +72,7 @@ echo $? Print the current version number without details ``` gam version simple -7.00.14 +7.00.15 ``` 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.00.14 - https://github.com/GAM-team/GAM +GAM 7.00.15 - https://github.com/GAM-team/GAM GAM Team Python 3.12.7 64-bit final MacOS Sonoma 14.5 x86_64 diff --git a/src/GamCommands.txt b/src/GamCommands.txt index 0e8d6c32..1a4a0e8b 100644 --- a/src/GamCommands.txt +++ b/src/GamCommands.txt @@ -6414,6 +6414,7 @@ gam create|add drivefile [(localfile |-)|(url )] [(drivefilename|newfilename ) | (replacefilename )*] [stripnameprefix ] [noduplicate] + [timestamp []] [timeformat ] * [(csv [todrive *] (addcsvdata currenttime|)*) | (returnidonly|returnlinkonly|returneditlinkonly|showdetails)] @@ -6434,6 +6435,7 @@ gam update drivefile [copy] [returnidonly|ret [(localfile |-)|(url )] [retainname | (newfilename ) | (replacefilename )*] [stripnameprefix ] + [timestamp []] [timeformat ] * [(gsheet|csvsheet [clearfilter])|(addsheet )] [charset ] [columndelimiter ] diff --git a/src/GamUpdate.txt b/src/GamUpdate.txt index e3a598c0..137cabd5 100644 --- a/src/GamUpdate.txt +++ b/src/GamUpdate.txt @@ -1,3 +1,8 @@ +7.00.15 + +Added options `timestamp []` and `timeformat ` to `gam create|update drivefile` that allow +adding a timestamp to a created/updated file name. + 7.00.14 Retry the following unexpected errors in `gam print users`. diff --git a/src/gam/__init__.py b/src/gam/__init__.py index b70a3589..51f36770 100755 --- a/src/gam/__init__.py +++ b/src/gam/__init__.py @@ -25,7 +25,7 @@ https://github.com/GAM-team/GAM/wiki """ __author__ = 'GAM Team ' -__version__ = '7.00.14' +__version__ = '7.00.15' __license__ = 'Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)' #pylint: disable=wrong-import-position @@ -52146,6 +52146,8 @@ DFA_SHAREDDRIVE_PARENTQUERY = 'sharedDriveParentQuery' DFA_KWARGS = 'kwargs' DFA_SEARCHARGS = 'searchargs' DFA_USE_CONTENT_AS_INDEXABLE_TEXT = 'useContentAsIndexableText' +DFA_TIMESTAMP = 'timestamp' +DFA_TIMEFORMAT = 'timeformat' def _driveFileParentSpecified(parameters): return (parameters[DFA_PARENTID] or parameters[DFA_PARENTQUERY] or @@ -52420,7 +52422,9 @@ def initDriveFileAttributes(): DFA_SHAREDDRIVE_PARENTQUERY: None, DFA_KWARGS: {}, DFA_SEARCHARGS: {}, - DFA_USE_CONTENT_AS_INDEXABLE_TEXT: False} + DFA_USE_CONTENT_AS_INDEXABLE_TEXT: False, + DFA_TIMESTAMP: False, + DFA_TIMEFORMAT: None} DRIVEFILE_PROPERTY_VISIBILITY_CHOICE_MAP = { 'private': 'appProperties', @@ -52604,6 +52608,10 @@ def getDriveFileAttribute(myarg, body, parameters, updateCmd): body['contentHints']['indexableText'] = getString(Cmd.OB_STRING) elif myarg == 'securityupdate': body['linkShareMetadata'] = {'securityUpdateEnabled': getBoolean(), 'securityUpdateEligible': True} + elif myarg == 'timestamp': + parameters[DFA_TIMESTAMP] = getBoolean() + elif myarg == 'timeformat': + parameters[DFA_TIMEFORMAT] = getString(Cmd.OB_STRING, minLen=0) elif getDriveFileCopyAttribute(myarg, body, parameters): pass else: @@ -57125,6 +57133,14 @@ def processFilenameReplacements(name, replacements): name = re.sub(replacement[0], replacement[1], name) return name +def addTimestampToFilename(parameters, body): + tdtime = datetime.datetime.now(GC.Values[GC.TIMEZONE]) + body['name'] += ' - ' + if not parameters[DFA_TIMEFORMAT]: + body['name'] += ISOformatTimeStamp(tdtime) + else: + body['name'] += tdtime.strftime(parameters[DFA_TIMEFORMAT]) + createReturnItemMap = { 'returnidonly': 'id', 'returnlinkonly': 'webViewLink', @@ -57135,6 +57151,7 @@ createReturnItemMap = { # [(localfile |-)|(url )] # [(drivefilename|newfilename ) | (replacefilename )*] # [stripnameprefix ] +# [timestamp ]] [timeformat ] # * [noduplicate] # [(csv [todrive *] (addcsvdata )*)) | # (returnidonly|returnlinkonly|returneditlinkonly|showdetails)] @@ -57180,6 +57197,8 @@ def createDriveFile(users): body['name'] = newName else: body['name'] = 'Untitled' + if parameters[DFA_TIMESTAMP]: + addTimestampToFilename(parameters, body) if parameters[DFA_LOCALFILEPATH]: if parameters[DFA_LOCALFILEPATH] != '-' and parameters[DFA_PRESERVE_FILE_TIMES]: setPreservedFileTimes(body, parameters, False) @@ -57658,6 +57677,7 @@ def checkDriveFileShortcut(users): # [(localfile |-)|(url )] # [retainname | (newfilename ) | (replacefilename )*] # [stripnameprefix ] +# [timestamp ]] [timeformat ] # * # [(gsheet|csvsheet [clearfilter])|(addsheet )] # [charset ] [columndelimiter ] @@ -57763,6 +57783,8 @@ def updateDriveFile(users): body['name'] = processFilenameReplacements(newName, parameters[DFA_REPLACEFILENAME]) else: body['name'] = newName + if parameters[DFA_TIMESTAMP]: + addTimestampToFilename(parameters, body) if addSheetEntity or updateSheetEntity: entityValueList = [Ent.USER, user, Ent.DRIVE_FILE_ID, fileId] try: @@ -57891,6 +57913,8 @@ def updateDriveFile(users): body['name'] = processFilenameReplacements(newName, parameters[DFA_REPLACEFILENAME]) else: body['name'] = newName + if parameters[DFA_TIMESTAMP]: + addTimestampToFilename(parameters, body) Ind.Increment() j = 0 for fileId in fileIdEntity['list']: