lookuper 0.5.1

Creator: bradpython12

Last updated:

Add to Cart

Description:

lookuper 0.5.1

lookuper makes it easy to lookup a target in nested data structures. A
lookup yields the values matching a target passed as an arguments list:
>>> from lookuper import lookup
>>> list(lookup({'a': [{'b': 1}]}, 'a', 0, 'b'))
[1]
A target can contain stars (*) to match anything and globstars
(**) to match anything recursively:
>>> list(lookup({'a': {'b': 1, 'B': 2}}, 'a', '*'))
[1, 2]
>>> list(lookup([{'b': 1}, {'a': {'b': 2}}], '**', 'b'))
[1, 2]
Note that these special characters can be escaped:
>>> list(lookup({'*': 1}, r'\*'))
[1]
A target can also contain functions and regular expressions:
>>> list(lookup({'a': {'b', 'B'}}, 'a', str.islower))
['b']
>>> import re
>>> list(lookup({'a': {'b', 'B'}}, 'a', re.compile(r'[a-z]')))
['b']

Recipes
lookuper can be combined with other libraries like
more-itertools
to return only one value:
>>> from more_itertools import only
>>> def lookup1(data, *targets, **kw):
... return only(lookup(data, *targets), **kw)
>>> lookup1({}, 'a')
>>> lookup1({'a': 1}, 'a')
1
>>> lookup1({'a': 1, 'b': 2}, '*')
Traceback (most recent call last):
...
ValueError: Expected exactly one item in iterable, but got 1, 2, and perhaps more.


Extensions
By default, lookuper only supports nested data structures like
mappings, sequences and sets. It can extended to support other types:
>>> from lookuper import lookup_data
>>> _ = lookup_data.register(object, lambda data: (
... (name, getattr(data, name, None)) for name in dir(data)
... ))
>>> list(lookup(object(), '__class__', '__class__', '__name__'))
['type']

Project information
lookuper is released under the MIT license,
the code on GitHub,
and the latest release on PyPI.

License

For personal and professional use. You cannot resell or redistribute these repositories in their original state.

Customer Reviews

There are no reviews.