gam7 7.5.15__tar.gz → 7.5.16__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of gam7 might be problematic. Click here for more details.
- {gam7-7.5.15 → gam7-7.5.16}/PKG-INFO +1 -1
- {gam7-7.5.15 → gam7-7.5.16}/src/GamCommands.txt +3 -3
- {gam7-7.5.15 → gam7-7.5.16}/src/GamUpdate.txt +7 -1
- {gam7-7.5.15 → gam7-7.5.16}/src/gam/__init__.py +22 -3
- {gam7-7.5.15 → gam7-7.5.16}/src/gam/gamlib/glglobals.py +3 -0
- {gam7-7.5.15 → gam7-7.5.16}/.github/ISSUE_TEMPLATE/aa-question.md +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/.github/ISSUE_TEMPLATE/za-bug-report.md +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/.github/ISSUE_TEMPLATE/zz-feature-request.md +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/.github/ISSUE_TEMPLATE.txt +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/.github/actions/creds.tar.xz.gpg +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/.github/actions/decrypt.sh +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/.github/actions/entitlements.plist +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/.github/actions/package_exclusions.txt +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/.github/stale.yml +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/.github/workflows/build.yml +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/.github/workflows/codeql-analysis.yml +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/.github/workflows/get-cacerts.yml +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/.github/workflows/pypi.yml +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/.pre-commit-config.yaml +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/LICENSE +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/README.md +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/pyproject.toml +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/.gitignore +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/LICENSE +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/cacerts.pem +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/callgam.py +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/gam/__main__.py +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/gam/atom/__init__.py +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/gam/atom/auth.py +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/gam/atom/client.py +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/gam/atom/core.py +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/gam/atom/data.py +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/gam/atom/http.py +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/gam/atom/http_core.py +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/gam/atom/http_interface.py +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/gam/atom/mock_http.py +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/gam/atom/mock_http_core.py +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/gam/atom/mock_service.py +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/gam/atom/service.py +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/gam/atom/token_store.py +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/gam/atom/url.py +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/gam/cacerts.pem +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/gam/cbcm-v1.1beta1.json +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/gam/contactdelegation-v1.json +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/gam/datastudio-v1.json +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/gam/gamlib/__init__.py +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/gam/gamlib/glaction.py +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/gam/gamlib/glapi.py +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/gam/gamlib/glcfg.py +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/gam/gamlib/glclargs.py +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/gam/gamlib/glentity.py +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/gam/gamlib/glgapi.py +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/gam/gamlib/glgdata.py +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/gam/gamlib/glindent.py +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/gam/gamlib/glmsgs.py +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/gam/gamlib/glskus.py +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/gam/gamlib/gluprop.py +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/gam/gamlib/glverlibs.py +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/gam/gamlib/yubikey.py +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/gam/gdata/__init__.py +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/gam/gdata/alt/__init__.py +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/gam/gdata/alt/app_engine.py +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/gam/gdata/alt/appengine.py +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/gam/gdata/apps/__init__.py +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/gam/gdata/apps/audit/__init__.py +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/gam/gdata/apps/audit/service.py +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/gam/gdata/apps/contacts/__init__.py +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/gam/gdata/apps/contacts/service.py +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/gam/gdata/apps/service.py +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/gam/gdata/service.py +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/gam/gdata/urlfetch.py +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/gam/googleapiclient/__init__.py +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/gam/googleapiclient/_auth.py +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/gam/googleapiclient/_helpers.py +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/gam/googleapiclient/channel.py +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/gam/googleapiclient/discovery.py +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/gam/googleapiclient/discovery_cache/__init__.py +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/gam/googleapiclient/discovery_cache/appengine_memcache.py +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/gam/googleapiclient/discovery_cache/base.py +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/gam/googleapiclient/discovery_cache/file_cache.py +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/gam/googleapiclient/errors.py +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/gam/googleapiclient/http.py +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/gam/googleapiclient/mimeparse.py +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/gam/googleapiclient/model.py +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/gam/googleapiclient/schema.py +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/gam/googleapiclient/version.py +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/gam/iso8601/__init__.py +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/gam/iso8601/iso8601.py +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/gam/meet-v2beta.json +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/gam/serviceaccountlookup-v1.json +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/gam/six.py +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/gam-install.sh +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/gam-setup.bat +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/gam.exe.manifest +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/gam.py +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/gam.spec +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/gam.wxs +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/license.rtf +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/requirements-dev.txt +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/requirements.txt +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/setup.cfg +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/setup.py +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/tools/a_atleast_b.py +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/tools/gen-wix-xml-filelist.py +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/tools/mkGamRef.py +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/tools/openssl.props +0 -0
- {gam7-7.5.15 → gam7-7.5.16}/src/version_info.txt.in +0 -0
|
@@ -102,7 +102,7 @@ If an item contains spaces, it should be surrounded by ".
|
|
|
102
102
|
banana|basil|blueberry|flamingo|graphite|grape|
|
|
103
103
|
lavender|peacock|sage|tangerine|tomato
|
|
104
104
|
<FileFormat> ::=
|
|
105
|
-
csv|doc|dot|docx|dotx|epub|html|jpeg|jpg|mht|odp|ods|odt|
|
|
105
|
+
csv|doc|dot|docx|dotx|epub|html|jpeg|jpg|json|mht|odp|ods|odt|
|
|
106
106
|
pdf|png|ppt|pot|potx|pptx|rtf|svg|tsv|txt|xls|xlt|xlsx|xltx|zip|
|
|
107
107
|
ms|microsoft|openoffice|
|
|
108
108
|
<LabelColorHex> ::=
|
|
@@ -1276,8 +1276,8 @@ If the pattern {{Section}} appears in <FileName>, it will be replaced with the n
|
|
|
1276
1276
|
For redirect csv, the optional arguments must appear in the order shown.
|
|
1277
1277
|
<Redirect> ::=
|
|
1278
1278
|
redirect csv <FileName> [multiprocess] [append] [noheader] [charset <Charset>]
|
|
1279
|
-
[columndelimiter <Character>] [noescapechar <Boolean>] [quotechar <Character>]
|
|
1280
|
-
[sortheaders <StringList>] [timestampcolumn <String>]
|
|
1279
|
+
[columndelimiter <Character>] [noescapechar [<Boolean>]] [quotechar <Character>]
|
|
1280
|
+
[sortheaders <StringList>] [timestampcolumn <String>] [transpose [<Bopolean>]]
|
|
1281
1281
|
[todrive <ToDriveAttribute>*] |
|
|
1282
1282
|
redirect stdout <FileName> [multiprocess] [append] |
|
|
1283
1283
|
redirect stdout null [multiprocess] |
|
|
@@ -1,7 +1,13 @@
|
|
|
1
|
+
7.05.16
|
|
2
|
+
|
|
3
|
+
Added option `transpose [<Boolean>]` to `redirect csv` that causes
|
|
4
|
+
GAM to transpose CSV output rows and columns. This will most useful
|
|
5
|
+
when a `countsonly` option is used in a `print` or `report` command.
|
|
6
|
+
|
|
1
7
|
7.05.15
|
|
2
8
|
|
|
3
9
|
Updated `gam <UserTypeEntity> get drivefile` and `gam <UserTypeEntity> create drivefile`
|
|
4
|
-
to allow downloading and uploading of Google
|
|
10
|
+
to allow downloading and uploading of Google Apps Scripts.
|
|
5
11
|
```
|
|
6
12
|
$ gam user user1@domain.com get drivefile 1ZY-YkS3E0OKipALra_XzfIh9cvxoILSbb8TRdHBFCpyB_mXI_J8FmjHv format json
|
|
7
13
|
User: user1@domain.com, Download 1 Drive File
|
|
@@ -25,7 +25,7 @@ https://github.com/GAM-team/GAM/wiki
|
|
|
25
25
|
"""
|
|
26
26
|
|
|
27
27
|
__author__ = 'GAM Team <google-apps-manager@googlegroups.com>'
|
|
28
|
-
__version__ = '7.05.
|
|
28
|
+
__version__ = '7.05.16'
|
|
29
29
|
__license__ = 'Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)'
|
|
30
30
|
|
|
31
31
|
#pylint: disable=wrong-import-position
|
|
@@ -4113,8 +4113,8 @@ def SetGlobalVariables():
|
|
|
4113
4113
|
if checkArgumentPresent(Cmd.MULTIPROCESSEXIT_CMD):
|
|
4114
4114
|
_setMultiprocessExit()
|
|
4115
4115
|
# redirect csv <FileName> [multiprocess] [append] [noheader] [charset <CharSet>]
|
|
4116
|
-
# [columndelimiter <Character>] [noescapechar <Boolean>] [quotechar <Character>]]
|
|
4117
|
-
# [sortheaders <StringList>] [timestampcolumn <String>]
|
|
4116
|
+
# [columndelimiter <Character>] [noescapechar [<Boolean>]] [quotechar <Character>]]
|
|
4117
|
+
# [sortheaders <StringList>] [timestampcolumn <String>] [transpose [<Boolean>]]
|
|
4118
4118
|
# [todrive <ToDriveAttribute>*]
|
|
4119
4119
|
# redirect stdout <FileName> [multiprocess] [append]
|
|
4120
4120
|
# redirect stdout null
|
|
@@ -4139,6 +4139,8 @@ def SetGlobalVariables():
|
|
|
4139
4139
|
GM.Globals[GM.CSV_OUTPUT_SORT_HEADERS] = GC.Values[GC.CSV_OUTPUT_SORT_HEADERS] = getString(Cmd.OB_STRING_LIST, minLen=0).replace(',', ' ').split()
|
|
4140
4140
|
if checkArgumentPresent('timestampcolumn'):
|
|
4141
4141
|
GM.Globals[GM.CSV_OUTPUT_TIMESTAMP_COLUMN] = GC.Values[GC.CSV_OUTPUT_TIMESTAMP_COLUMN] = getString(Cmd.OB_STRING, minLen=0)
|
|
4142
|
+
if checkArgumentPresent('transpose'):
|
|
4143
|
+
GM.Globals[GM.CSV_OUTPUT_TRANSPOSE] = getBoolean()
|
|
4142
4144
|
_setCSVFile(filename, mode, encoding, writeHeader, multi)
|
|
4143
4145
|
GM.Globals[GM.CSVFILE][GM.REDIRECT_QUEUE_CSVPF] = CSVPrintFile()
|
|
4144
4146
|
if checkArgumentPresent('todrive'):
|
|
@@ -7794,6 +7796,7 @@ class CSVPrintFile():
|
|
|
7794
7796
|
def __init__(self, titles=None, sortTitles=None, indexedTitles=None):
|
|
7795
7797
|
self.rows = []
|
|
7796
7798
|
self.rowCount = 0
|
|
7799
|
+
self.outputTranspose = GM.Globals[GM.CSV_OUTPUT_TRANSPOSE]
|
|
7797
7800
|
self.todrive = GM.Globals[GM.CSV_TODRIVE]
|
|
7798
7801
|
self.titlesSet = set()
|
|
7799
7802
|
self.titlesList = []
|
|
@@ -8993,6 +8996,22 @@ class CSVPrintFile():
|
|
|
8993
8996
|
self.JSONtitlesList = self.orderHeaders(self.JSONtitlesList)
|
|
8994
8997
|
titlesList = self.JSONtitlesList
|
|
8995
8998
|
normalizeSortHeaders()
|
|
8999
|
+
if self.outputTranspose:
|
|
9000
|
+
newRows = []
|
|
9001
|
+
pivotKey = titlesList[0]
|
|
9002
|
+
newTitlesList = [pivotKey]
|
|
9003
|
+
newTitlesSet = set(newTitlesList)
|
|
9004
|
+
for title in titlesList[1:]:
|
|
9005
|
+
newRow = {pivotKey: title}
|
|
9006
|
+
for row in self.rows:
|
|
9007
|
+
pivotValue = row[pivotKey]
|
|
9008
|
+
if pivotValue not in newTitlesSet:
|
|
9009
|
+
newTitlesSet.add(pivotValue)
|
|
9010
|
+
newTitlesList.append(pivotValue)
|
|
9011
|
+
newRow[pivotValue] = row.get(title)
|
|
9012
|
+
newRows.append(newRow)
|
|
9013
|
+
titlesList = newTitlesList
|
|
9014
|
+
self.rows = newRows
|
|
8996
9015
|
if (not self.todrive) or self.todrive['localcopy']:
|
|
8997
9016
|
if GM.Globals[GM.CSVFILE][GM.REDIRECT_NAME] == '-':
|
|
8998
9017
|
if GM.Globals[GM.STDOUT][GM.REDIRECT_MULTI_FD]:
|
|
@@ -85,6 +85,8 @@ CSV_OUTPUT_ROW_FILTER_MODE = 'corm'
|
|
|
85
85
|
CSV_OUTPUT_ROW_LIMIT = 'corl'
|
|
86
86
|
# Add timestamp column to CSV output file
|
|
87
87
|
CSV_OUTPUT_TIMESTAMP_COLUMN = 'cotc'
|
|
88
|
+
# Transpose output rows/columns
|
|
89
|
+
CSV_OUTPUT_TRANSPOSE = 'cotr'
|
|
88
90
|
# Output sort headers
|
|
89
91
|
CSV_OUTPUT_SORT_HEADERS = 'cosh'
|
|
90
92
|
# CSV todrive options
|
|
@@ -250,6 +252,7 @@ Globals = {
|
|
|
250
252
|
CSV_OUTPUT_ROW_LIMIT: 0,
|
|
251
253
|
CSV_OUTPUT_SORT_HEADERS: [],
|
|
252
254
|
CSV_OUTPUT_TIMESTAMP_COLUMN: None,
|
|
255
|
+
CSV_OUTPUT_TRANSPOSE: False,
|
|
253
256
|
CSV_TODRIVE: {},
|
|
254
257
|
CURRENT_API_SERVICES: {},
|
|
255
258
|
CURRENT_CLIENT_API: None,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|