/coalesce

Coalescing access to messy nested data

Primary LanguagePythonMIT LicenseMIT

This module is intended to ease access to nested data
structures—in any combination of key or attribue access to each
level of a hierarchy—where many paths in the tree may be missing.
Typically, such data is encountered in semi-structured formats
like JSON, YAML, or some XML, that is deserialized into Python
data structures.

PEP 505 attempts to address this need with the addition of a
number of new syntactic operators for attribute or item access
where a special type of failure mode "coalesces" None values.
Other libraries such as PyMaybe (https://pymaybe.readthedocs.io)
perform a similar operation, and are more mature and robust.

On the other hand, by utilizing `wrapt.ObjectProxy`, this simple
module manages to do some pretty neat stuff that even PyMaybe does
not.

In this library, I simply want to provide simple wrapper classes that
provide both what I think is more useful behavior and behavior that
is semantically equivalent to PEP 505.

Classes:

    GreedyAccess: 
    
        Wrap an object so that nested attribute and item access
        simply does not fail, but propagates a wrapped object 
        across such nested access.

    NullCoalesce:

        Wrap an object so that encountering a None (or other
        indicated sentinel) at any level stops accessing further 
        attributes and unboxes as a None (or other sentinel).

        Aliased as `NoneCoalesce`