GitXplorerGitXplorer
m

glom

public
1928 stars
65 forks
113 issues

Commits

List of commits on branch master.
Unverified
b23c4bcd391cbef58da32a19c8336283394e2878

bump version for v24.11.0 release

mmahmoud committed 3 months ago
Verified
bc653da9afec59bbb9c57230ffa2a12374f0346c

Add Python 3.12 (#285)

mmahmoud committed 3 months ago
Verified
24c21dcc44cc81abc193aa3bfa2f66304470d205

Add --scalar flag to CLI (#280)

mmahmoud committed 3 months ago
Unverified
5cef40707d8b4765c621d7a09ad5f35f96bf7d1a

fix packaging tox job

mmahmoud committed 3 months ago
Verified
3cd57b6a6e04d522ddbab6869a040c408bff8b7a

Format BSD license to be recognizable by GitHub license detector (#281)

eelliotwutingfeng committed a year ago
Verified
2e0c552078665bd705044e8abd23b212296f276e

Upgrade requirements (#279)

mmahmoud committed a year ago

README

The README file for this repository.

glom

Restructuring data, the Python way

Real applications have real data, and real data nests. Objects inside of objects inside of lists of objects.

glom is a new and powerful way to handle real-world data, featuring:

  • Path-based access for nested data structures
  • Readable, meaningful error messages
  • Declarative data transformation, using lightweight, Pythonic specifications
  • Built-in data exploration and debugging features

All of that and more, available as a fully-documented, pure-Python package, tested on Python 3.7+, as well as PyPy3. Installation is as easy as:

  pip install glom

And when you install glom, you also get the glom command-line interface, letting you experiment at the console, but never limiting you to shell scripts:

Usage: 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

Anything you can do at the command line readily translates to Python code, so you've always got a path forward when complexity starts to ramp up.

Examples

Without glom

>>> data = {'a': {'b': {'c': 'd'}}}
>>> data['a']['b']['c']
'd'
>>> data2 = {'a': {'b': None}}
>>> data2['a']['b']['c']
Traceback (most recent call last):
...
TypeError: 'NoneType' object is not subscriptable

With glom

>>> glom(data, 'a.b.c')
'd'
>>> glom(data2, 'a.b.c')
Traceback (most recent call last):
...
PathAccessError: could not access 'c', index 2 in path Path('a', 'b', 'c'), got error: ...

Learn more

If all this seems interesting, continue exploring glom below:

All of the links above are overflowing with examples, but should you find anything about the docs, or glom itself, lacking, please submit an issue!

In the meantime, just remember: When you've got nested data, glom it! ☄️