Fix defect where wild would break if document had non string keys.
modified: README.rst modified: nested_lookup/nested_lookup.py modified: setup.py modified: test_nested_lookup.py
This commit is contained in:
parent
9348af1790
commit
b6acaca980
4 changed files with 14 additions and 6 deletions
|
|
@ -1,7 +1,7 @@
|
||||||
nested_lookup
|
nested_lookup
|
||||||
#############
|
#############
|
||||||
|
|
||||||
.. image:: https://img.shields.io/badge/pypi-0.2.15-green.svg
|
.. image:: https://img.shields.io/badge/pypi-0.2.16-green.svg
|
||||||
:target: https://pypi.python.org/pypi/nested-lookup
|
:target: https://pypi.python.org/pypi/nested-lookup
|
||||||
.. image:: https://travis-ci.org/rameshrvr/nested-lookup.svg?branch=master
|
.. image:: https://travis-ci.org/rameshrvr/nested-lookup.svg?branch=master
|
||||||
:target: https://travis-ci.org/rameshrvr/nested-lookup
|
:target: https://travis-ci.org/rameshrvr/nested-lookup
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,11 @@ def nested_lookup(key, document, wild=False, with_keys=False):
|
||||||
return list(_nested_lookup(key, document, wild=wild, with_keys=with_keys))
|
return list(_nested_lookup(key, document, wild=wild, with_keys=with_keys))
|
||||||
|
|
||||||
|
|
||||||
|
def _is_case_insensitive_substring(a, b):
|
||||||
|
"""return True if `a` is a case insensitive substring of `b`, else False"""
|
||||||
|
return isinstance(a, str) and isinstance(b, str) and a.lower() in b.lower()
|
||||||
|
|
||||||
|
|
||||||
def _nested_lookup(key, document, wild=False, with_keys=False):
|
def _nested_lookup(key, document, wild=False, with_keys=False):
|
||||||
"""Lookup a key in a nested document, yield a value"""
|
"""Lookup a key in a nested document, yield a value"""
|
||||||
if isinstance(document, list):
|
if isinstance(document, list):
|
||||||
|
|
@ -22,7 +27,7 @@ def _nested_lookup(key, document, wild=False, with_keys=False):
|
||||||
|
|
||||||
if isinstance(document, dict):
|
if isinstance(document, dict):
|
||||||
for k, v in iteritems(document):
|
for k, v in iteritems(document):
|
||||||
if key == k or (wild and key.lower() in k.lower()):
|
if key == k or (wild and _is_case_insensitive_substring(key, k)):
|
||||||
if with_keys:
|
if with_keys:
|
||||||
yield k, v
|
yield k, v
|
||||||
else:
|
else:
|
||||||
|
|
|
||||||
6
setup.py
6
setup.py
|
|
@ -17,7 +17,7 @@ with open("requirements.txt", "r") as f:
|
||||||
|
|
||||||
setup(
|
setup(
|
||||||
name="nested-lookup",
|
name="nested-lookup",
|
||||||
version="0.2.15",
|
version="0.2.16",
|
||||||
description="Python functions for working with deeply nested documents (lists and dicts) ",
|
description="Python functions for working with deeply nested documents (lists and dicts) ",
|
||||||
keywords="nested document dictionary dict list lookup schema json xml yaml",
|
keywords="nested document dictionary dict list lookup schema json xml yaml",
|
||||||
long_description=open("README.rst").read(),
|
long_description=open("README.rst").read(),
|
||||||
|
|
@ -45,6 +45,4 @@ setup(
|
||||||
# build package:
|
# build package:
|
||||||
# pip install twine
|
# pip install twine
|
||||||
# python setup.py sdist
|
# python setup.py sdist
|
||||||
|
# twine upload dist/*
|
||||||
# built and uploaded to pypi with this:
|
|
||||||
# python setup.py sdist bdist_egg register upload
|
|
||||||
|
|
|
||||||
|
|
@ -38,6 +38,7 @@ class TestNestedLookup(TestCase):
|
||||||
"name": "Test",
|
"name": "Test",
|
||||||
"date": "YYYY-MM-DD HH:MM:SS",
|
"date": "YYYY-MM-DD HH:MM:SS",
|
||||||
}
|
}
|
||||||
|
self.subject_dict4 = {1: "a", 2: {"b": 44, "C": 55}, 3: "d", 4: "e"}
|
||||||
|
|
||||||
def test_nested_lookup(self):
|
def test_nested_lookup(self):
|
||||||
results = nested_lookup("d", self.subject_dict)
|
results = nested_lookup("d", self.subject_dict)
|
||||||
|
|
@ -74,6 +75,10 @@ class TestNestedLookup(TestCase):
|
||||||
self.assertIn("test2@example.com", results)
|
self.assertIn("test2@example.com", results)
|
||||||
self.assertIn("test3@example.com", results)
|
self.assertIn("test3@example.com", results)
|
||||||
|
|
||||||
|
# test that wild works with a document that has integers as keys.
|
||||||
|
results = nested_lookup(key="c", document=self.subject_dict4, wild=True)
|
||||||
|
self.assertIn(55, results)
|
||||||
|
|
||||||
def test_wild_with_keys_nested_lookup(self):
|
def test_wild_with_keys_nested_lookup(self):
|
||||||
matches = nested_lookup(
|
matches = nested_lookup(
|
||||||
key="mail", document=self.subject_dict2, wild=True, with_keys=True
|
key="mail", document=self.subject_dict2, wild=True, with_keys=True
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue