wild mode: case insesitive key substring nested_lookups

This commit is contained in:
Russell Ballestrini 2017-09-25 11:19:18 -07:00
parent 8ba271daf3
commit d46f683e76
5 changed files with 58 additions and 9 deletions

View file

@ -1,25 +1,25 @@
from six import iteritems
def nested_lookup(key, document):
def nested_lookup(key, document, wild=False):
"""Lookup a key in a nested document, return a list of values"""
return list(_nested_lookup(key, document))
return list(_nested_lookup(key, document, wild=wild))
def _nested_lookup(key, document):
def _nested_lookup(key, document, wild=False):
"""Lookup a key in a nested document, yield a value"""
if isinstance(document, list):
for d in document:
for result in _nested_lookup(key, d):
for result in _nested_lookup(key, d, wild=wild):
yield result
if isinstance(document, dict):
for k, v in iteritems(document):
if k == key:
if key == k or (wild and key.lower() in k.lower()):
yield v
elif isinstance(v, dict):
for result in _nested_lookup(key, v):
for result in _nested_lookup(key, v, wild=wild):
yield result
elif isinstance(v, list):
for d in v:
for result in _nested_lookup(key, d):
for result in _nested_lookup(key, d, wild=wild):
yield result