mirror of
https://github.com/GAM-team/GAM.git
synced 2025-07-06 12:43:35 +00:00
Added option countsonly
to gam <UserTypeEntity> print|show notes
This commit is contained in:
@ -10,6 +10,11 @@ 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.72.08
|
||||||
|
|
||||||
|
Added option `countsonly` to `gam <UserTypeEntity> print|show notes` that displays
|
||||||
|
the number of notes a user owns and the number of notes of user can edit.
|
||||||
|
|
||||||
### 6.72.07
|
### 6.72.07
|
||||||
|
|
||||||
Updated commands that send emails to not downshift `'First Last<firstlast@domain.com>'` to `'first last<firstlast@domain.com>'`.
|
Updated commands that send emails to not downshift `'First Last<firstlast@domain.com>'` to `'first last<firstlast@domain.com>'`.
|
||||||
|
@ -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.72.07 - https://github.com/taers232c/GAMADV-XTD3 - pythonsource
|
GAMADV-XTD3 6.72.08 - https://github.com/taers232c/GAMADV-XTD3 - pythonsource
|
||||||
Ross Scroggs <ross.scroggs@gmail.com>
|
Ross Scroggs <ross.scroggs@gmail.com>
|
||||||
Python 3.12.2 64-bit final
|
Python 3.12.2 64-bit final
|
||||||
MacOS Sonoma 14.2.1 x86_64
|
MacOS Sonoma 14.2.1 x86_64
|
||||||
@ -1006,7 +1006,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.72.07 - https://github.com/taers232c/GAMADV-XTD3 - pythonsource
|
GAMADV-XTD3 6.72.08 - https://github.com/taers232c/GAMADV-XTD3 - pythonsource
|
||||||
Ross Scroggs <ross.scroggs@gmail.com>
|
Ross Scroggs <ross.scroggs@gmail.com>
|
||||||
Python 3.12.2 64-bit final
|
Python 3.12.2 64-bit final
|
||||||
Windows-10-10.0.17134 AMD64
|
Windows-10-10.0.17134 AMD64
|
||||||
|
@ -131,13 +131,17 @@ Display all notes
|
|||||||
```
|
```
|
||||||
gam <UserTypeEntity> show notes
|
gam <UserTypeEntity> show notes
|
||||||
[fields <NotesFieldList>] [filter <String>]
|
[fields <NotesFieldList>] [filter <String>]
|
||||||
[role owner|writwer]
|
[role owner|writer]
|
||||||
|
[countsonly]
|
||||||
[compact|formatjson]
|
[compact|formatjson]
|
||||||
```
|
```
|
||||||
By default, GAM displays all non-trashed notes:
|
By default, GAM displays all non-trashed notes:
|
||||||
* `filter trashed` - Display notes in the trash
|
* `filter trashed` - Display notes in the trash
|
||||||
* `role owner|writer` - Display notes where the user has the specified role
|
* `role owner|writer` - Display notes where the user has the specified role
|
||||||
|
|
||||||
|
When option `countsonly` is specified, the number of notes a user owns and the number of notes of user can edit
|
||||||
|
if displayed.
|
||||||
|
|
||||||
By default, Gam displays the information as an indented list of keys and values; the note text is displayed as individual lines.
|
By default, Gam displays the information as an indented list of keys and values; the note text is displayed as individual lines.
|
||||||
* `compact` - Display the note text with escaped carriage returns as \r and newlines as \n
|
* `compact` - Display the note text with escaped carriage returns as \r and newlines as \n
|
||||||
* `formatjson` - Display the note in JSON format
|
* `formatjson` - Display the note in JSON format
|
||||||
@ -145,7 +149,8 @@ By default, Gam displays the information as an indented list of keys and values;
|
|||||||
```
|
```
|
||||||
gam <UserTypeEntity> print notes [todrive <ToDriveAttribute>*]
|
gam <UserTypeEntity> print notes [todrive <ToDriveAttribute>*]
|
||||||
[fields <NotesFieldList>] [filter <String>]
|
[fields <NotesFieldList>] [filter <String>]
|
||||||
[role owner|writwer]
|
[role owner|writer]
|
||||||
|
[countsonly]
|
||||||
[formatjson [quotechar <Character>]]
|
[formatjson [quotechar <Character>]]
|
||||||
|
|
||||||
```
|
```
|
||||||
@ -153,6 +158,9 @@ By default, GAM displays all non-trashed notes:
|
|||||||
* `filter trashed` - Display notes in the trash
|
* `filter trashed` - Display notes in the trash
|
||||||
* `role owner|writer` - Display notes where the user has the specified role
|
* `role owner|writer` - Display notes where the user has the specified role
|
||||||
|
|
||||||
|
When option `countsonly` is specified, the number of notes a user owns and the number of notes of user can edit
|
||||||
|
if displayed.
|
||||||
|
|
||||||
By default, when writing CSV files, Gam uses a quote character of double quote `"`. The quote character is used to enclose columns that contain
|
By default, when writing CSV files, Gam uses a quote character of double quote `"`. The quote character is used to enclose columns that contain
|
||||||
the quote character itself, the column delimiter (comma by default) and new-line characters. Any quote characters within the column are doubled.
|
the quote character itself, the column delimiter (comma by default) and new-line characters. Any quote characters within the column are doubled.
|
||||||
When using the `formatjson` option, double quotes are used extensively in the data resulting in hard to read/process output.
|
When using the `formatjson` option, double quotes are used extensively in the data resulting in hard to read/process output.
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
Print the current version of Gam with details
|
Print the current version of Gam with details
|
||||||
```
|
```
|
||||||
gam version
|
gam version
|
||||||
GAMADV-XTD3 6.72.07 - https://github.com/taers232c/GAMADV-XTD3 - pythonsource
|
GAMADV-XTD3 6.72.08 - https://github.com/taers232c/GAMADV-XTD3 - pythonsource
|
||||||
Ross Scroggs <ross.scroggs@gmail.com>
|
Ross Scroggs <ross.scroggs@gmail.com>
|
||||||
Python 3.12.2 64-bit final
|
Python 3.12.2 64-bit final
|
||||||
MacOS Sonoma 14.2.1 x86_64
|
MacOS Sonoma 14.2.1 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
|
||||||
GAMADV-XTD3 6.72.07 - https://github.com/taers232c/GAMADV-XTD3 - pythonsource
|
GAMADV-XTD3 6.72.08 - https://github.com/taers232c/GAMADV-XTD3 - pythonsource
|
||||||
Ross Scroggs <ross.scroggs@gmail.com>
|
Ross Scroggs <ross.scroggs@gmail.com>
|
||||||
Python 3.12.2 64-bit final
|
Python 3.12.2 64-bit final
|
||||||
MacOS Sonoma 14.2.1 x86_64
|
MacOS Sonoma 14.2.1 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
|
||||||
GAMADV-XTD3 6.72.07 - https://github.com/taers232c/GAMADV-XTD3 - pythonsource
|
GAMADV-XTD3 6.72.08 - https://github.com/taers232c/GAMADV-XTD3 - pythonsource
|
||||||
Ross Scroggs <ross.scroggs@gmail.com>
|
Ross Scroggs <ross.scroggs@gmail.com>
|
||||||
Python 3.12.2 64-bit final
|
Python 3.12.2 64-bit final
|
||||||
MacOS Sonoma 14.2.1 x86_64
|
MacOS Sonoma 14.2.1 x86_64
|
||||||
@ -64,7 +64,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.72.07
|
Latest: 6.72.08
|
||||||
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
|
||||||
6.72.07
|
6.72.08
|
||||||
```
|
```
|
||||||
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 6.72.07 - https://github.com/taers232c/GAMADV-XTD3
|
GAM 6.72.08 - https://github.com/taers232c/GAMADV-XTD3
|
||||||
Ross Scroggs <ross.scroggs@gmail.com>
|
Ross Scroggs <ross.scroggs@gmail.com>
|
||||||
Python 3.12.2 64-bit final
|
Python 3.12.2 64-bit final
|
||||||
MacOS Sonoma 14.2.1 x86_64
|
MacOS Sonoma 14.2.1 x86_64
|
||||||
|
@ -7391,10 +7391,12 @@ gam <UserTypeEntity> info note <NotesNameEntity>
|
|||||||
gam <UserTypeEntity> show notes
|
gam <UserTypeEntity> show notes
|
||||||
[fields <NotesFieldList>] [filter <String>]
|
[fields <NotesFieldList>] [filter <String>]
|
||||||
[role owner|writer]
|
[role owner|writer]
|
||||||
|
[countsonly]
|
||||||
[compact|formatjson]
|
[compact|formatjson]
|
||||||
gam <UserTypeEntity> print notes [todrive <ToDriveAttribute>*]
|
gam <UserTypeEntity> print notes [todrive <ToDriveAttribute>*]
|
||||||
[fields <NotesFieldList>] [filter <String>]
|
[fields <NotesFieldList>] [filter <String>]
|
||||||
[role owner|writer]
|
[role owner|writer]
|
||||||
|
[countsonly]
|
||||||
[formatjson [quotechar <Character>]]
|
[formatjson [quotechar <Character>]]
|
||||||
|
|
||||||
gam <UserTypeEntity> get noteattachments <NotesNameEntity>
|
gam <UserTypeEntity> get noteattachments <NotesNameEntity>
|
||||||
|
@ -2,6 +2,11 @@
|
|||||||
|
|
||||||
Merged GAM-Team version
|
Merged GAM-Team version
|
||||||
|
|
||||||
|
6.72.08
|
||||||
|
|
||||||
|
Added option `countsonly` to `gam <UserTypeEntity> print|show notes` that displays
|
||||||
|
the number of notes a user owns and the number of notes of user can edit.
|
||||||
|
|
||||||
6.72.07
|
6.72.07
|
||||||
|
|
||||||
Updated commands that send emails to not downshift `'First Last<firstlast@domain.com>'` to `'first last<firstlast@domain.com>'`.
|
Updated commands that send emails to not downshift `'First Last<firstlast@domain.com>'` to `'first last<firstlast@domain.com>'`.
|
||||||
|
@ -70998,7 +70998,7 @@ def _assignNoteOwner(note, user):
|
|||||||
note['ownedByMe'] = noteOwner == user
|
note['ownedByMe'] = noteOwner == user
|
||||||
break
|
break
|
||||||
|
|
||||||
def _checkNoteUserkRole(note, user, role):
|
def _checkNoteUserRole(note, user, role):
|
||||||
for permission in note['permissions']:
|
for permission in note['permissions']:
|
||||||
if permission['role'] == role and permission.get('user', {}).get('email', '').lower() == user:
|
if permission['role'] == role and permission.get('user', {}).get('email', '').lower() == user:
|
||||||
return True
|
return True
|
||||||
@ -71295,20 +71295,27 @@ NOTES_ROLE_CHOICE_MAP = {
|
|||||||
'writer': 'WRITER',
|
'writer': 'WRITER',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NOTES_COUNTS_MAP = {
|
||||||
|
'OWNER': 'noteOwner',
|
||||||
|
'WRITER': 'noteWriter',
|
||||||
|
}
|
||||||
|
|
||||||
# gam <UserTypeEntity> show notes
|
# gam <UserTypeEntity> show notes
|
||||||
# [fields <NotesFieldList>] [filter <String>]
|
# [fields <NotesFieldList>] [filter <String>]
|
||||||
# [role owner|writer]
|
# [role owner|writer]
|
||||||
|
# [countsonly]
|
||||||
# [compact] [formatjson]
|
# [compact] [formatjson]
|
||||||
# gam <UserTypeEntity> print notes [todrive <ToDriveAttribute>*]
|
# gam <UserTypeEntity> print notes [todrive <ToDriveAttribute>*]
|
||||||
# [fields <NotesFieldList>] [filter <String>]
|
# [fields <NotesFieldList>] [filter <String>]
|
||||||
# [role owner|writer]
|
# [role owner|writer]
|
||||||
|
# [countsonly]
|
||||||
# [formatjson [quotechar <Character>]]
|
# [formatjson [quotechar <Character>]]
|
||||||
def printShowNotes(users):
|
def printShowNotes(users):
|
||||||
csvPF = CSVPrintFile(['User', 'name', 'title', 'owner', 'ownedByMe']) if Act.csvFormat() else None
|
csvPF = CSVPrintFile(['User', 'name', 'title', 'owner', 'ownedByMe']) if Act.csvFormat() else None
|
||||||
if csvPF:
|
if csvPF:
|
||||||
csvPF.SetNoEscapeChar(True)
|
csvPF.SetNoEscapeChar(True)
|
||||||
FJQC = FormatJSONQuoteChar(csvPF)
|
FJQC = FormatJSONQuoteChar(csvPF)
|
||||||
compact = False
|
compact = countsOnly = False
|
||||||
fieldsList = []
|
fieldsList = []
|
||||||
noteFilter = None
|
noteFilter = None
|
||||||
role = None
|
role = None
|
||||||
@ -71325,6 +71332,8 @@ def printShowNotes(users):
|
|||||||
role = getChoice(NOTES_ROLE_CHOICE_MAP, mapChoice=True)
|
role = getChoice(NOTES_ROLE_CHOICE_MAP, mapChoice=True)
|
||||||
elif not csvPF and myarg == 'compact':
|
elif not csvPF and myarg == 'compact':
|
||||||
compact = True
|
compact = True
|
||||||
|
elif myarg == 'countsonly':
|
||||||
|
countsOnly = True
|
||||||
else:
|
else:
|
||||||
FJQC.GetFormatJSONQuoteChar(myarg, True)
|
FJQC.GetFormatJSONQuoteChar(myarg, True)
|
||||||
if FJQC.formatJSON:
|
if FJQC.formatJSON:
|
||||||
@ -71333,10 +71342,16 @@ def printShowNotes(users):
|
|||||||
showPermissions = False
|
showPermissions = False
|
||||||
fieldsList.append('permissions')
|
fieldsList.append('permissions')
|
||||||
if csvPF:
|
if csvPF:
|
||||||
|
if not countsOnly:
|
||||||
if not FJQC.formatJSON:
|
if not FJQC.formatJSON:
|
||||||
csvPF.RemoveTitles(['owner', 'ownedByMe'])
|
csvPF.RemoveTitles(['owner', 'ownedByMe'])
|
||||||
else:
|
else:
|
||||||
csvPF.RemoveJSONTitles(['owner', 'ownedByMe'])
|
csvPF.RemoveJSONTitles(['owner', 'ownedByMe'])
|
||||||
|
if countsOnly and csvPF:
|
||||||
|
if not FJQC.formatJSON:
|
||||||
|
csvPF.SetTitles(['User', 'noteOwner', 'noteWriter'])
|
||||||
|
else:
|
||||||
|
csvPF.SetJSONTitles(['User', 'JSON'])
|
||||||
fields = getItemFieldsFromFieldsList('notes', fieldsList, returnItemIfNoneList=False)
|
fields = getItemFieldsFromFieldsList('notes', fieldsList, returnItemIfNoneList=False)
|
||||||
i, count, users = getEntityArgument(users)
|
i, count, users = getEntityArgument(users)
|
||||||
for user in users:
|
for user in users:
|
||||||
@ -71354,6 +71369,27 @@ def printShowNotes(users):
|
|||||||
pageMessage=pageMessage,
|
pageMessage=pageMessage,
|
||||||
throwReasons=GAPI.KEEP_THROW_REASONS,
|
throwReasons=GAPI.KEEP_THROW_REASONS,
|
||||||
filter=noteFilter, fields=fields)
|
filter=noteFilter, fields=fields)
|
||||||
|
if countsOnly:
|
||||||
|
noteCounts = {'User': user, 'noteOwner': 0, 'noteWriter': 0}
|
||||||
|
for note in notes:
|
||||||
|
for permission in note['permissions']:
|
||||||
|
if permission.get('user', {}).get('email', '').lower() == user:
|
||||||
|
noteCounts[NOTES_COUNTS_MAP[permission['role']]] += 1
|
||||||
|
break
|
||||||
|
if not csvPF:
|
||||||
|
if not FJQC.formatJSON:
|
||||||
|
printEntityKVList([Ent.USER, user], ['noteOwner', noteCounts['noteOwner'], 'noteWriter', noteCounts['noteWriter']], i, count)
|
||||||
|
else:
|
||||||
|
printLine(json.dumps(cleanJSON(noteCounts), ensure_ascii=False, sort_keys=True))
|
||||||
|
else:
|
||||||
|
row = {'User': user, 'noteOwner': noteCounts['noteOwner'], 'noteWriter': noteCounts['noteWriter']}
|
||||||
|
if not FJQC.formatJSON:
|
||||||
|
csvPF.WriteRowTitles(row)
|
||||||
|
elif csvPF.CheckRowTitles(row):
|
||||||
|
row = {'User': noteCounts.pop('User')}
|
||||||
|
row['JSON'] = json.dumps(cleanJSON(noteCounts), ensure_ascii=False, sort_keys=True)
|
||||||
|
csvPF.WriteRowNoFilter(row)
|
||||||
|
continue
|
||||||
if not csvPF:
|
if not csvPF:
|
||||||
jcount = len(notes)
|
jcount = len(notes)
|
||||||
if not FJQC.formatJSON:
|
if not FJQC.formatJSON:
|
||||||
@ -71364,7 +71400,7 @@ def printShowNotes(users):
|
|||||||
j += 1
|
j += 1
|
||||||
if showPermissions:
|
if showPermissions:
|
||||||
_assignNoteOwner(note, user)
|
_assignNoteOwner(note, user)
|
||||||
if role is None or _checkNoteUserkRole(note, user, role):
|
if role is None or _checkNoteUserRole(note, user, role):
|
||||||
if not showPermissions:
|
if not showPermissions:
|
||||||
note.pop('permissions', None)
|
note.pop('permissions', None)
|
||||||
_showNote(note, j, jcount, FJQC, compact)
|
_showNote(note, j, jcount, FJQC, compact)
|
||||||
@ -71373,7 +71409,7 @@ def printShowNotes(users):
|
|||||||
for note in notes:
|
for note in notes:
|
||||||
if showPermissions:
|
if showPermissions:
|
||||||
_assignNoteOwner(note, user)
|
_assignNoteOwner(note, user)
|
||||||
if role is None or _checkNoteUserkRole(note, user, role):
|
if role is None or _checkNoteUserRole(note, user, role):
|
||||||
if not showPermissions:
|
if not showPermissions:
|
||||||
note.pop('permissions', None)
|
note.pop('permissions', None)
|
||||||
row = flattenJSON(note, flattened={'User': user}, timeObjects=NOTES_TIME_OBJECTS)
|
row = flattenJSON(note, flattened={'User': user}, timeObjects=NOTES_TIME_OBJECTS)
|
||||||
|
Reference in New Issue
Block a user