Note
glom's CLI is usable and useful, but keep in mind glom is a library first.
All the power of glom
, without even opening your text editor!
$ glom --help
Usage: /home/mahmoud/bin/glom [FLAGS] [spec [target]]
Command-line interface to the glom library, providing nested data
access and data restructuring with the power of Python.
Flags:
--help / -h show this help message and exit
--target-file TARGET_FILE path to target data source (optional)
--target-format TARGET_FORMAT
format of the source data (json, python, toml,
or yaml) (defaults to 'json')
--spec-file SPEC_FILE path to glom spec definition (optional)
--spec-format SPEC_FORMAT format of the glom spec definition (json, python,
python-full) (defaults to 'python')
--indent INDENT number of spaces to indent the result, 0 to disable
pretty-printing (defaults to 2)
--debug interactively debug any errors that come up
--inspect interactively explore the data
The glom
command will also read from standard input (stdin) and
process that data as the target.
Here's an example, filtering a GitHub API example to something much more flat and readable:
$ pip install glom
$ curl -s https://api.github.com/repos/mahmoud/glom/events \
| glom '[{"type": "type", "date": "created_at", "user": "actor.login"}]'
This yields:
[
{
"date": "2018-05-09T03:39:44Z",
"type": "WatchEvent",
"user": "asapzacy"
},
{
"date": "2018-05-08T22:51:46Z",
"type": "WatchEvent",
"user": "CameronCairns"
},
{
"date": "2018-05-08T03:27:27Z",
"type": "PushEvent",
"user": "mahmoud"
},
{
"date": "2018-05-08T03:27:27Z",
"type": "PullRequestEvent",
"user": "mahmoud"
}
...
]
By default the CLI target is JSON and the spec is a Python literal.
Note
Because the default CLI spec is a Python literal, there are no
lambdas and other Python/glom constructs available. These features
are gated behind the --spec-format python-full
option to avoid
code injection and other unwanted consequences.
The --debug
and --inspect
flags are useful for exploring
data. Note that they are not available when piping data through
stdin. Save that API response to a file and use --target-file
to
do your interactive experimenting.