From de3630f0f30fdec04388f25cca1aa15a4b31f4fd Mon Sep 17 00:00:00 2001 From: Ramesh RV Date: Sun, 14 Oct 2018 11:17:29 +0530 Subject: [PATCH] Fix for issue #7 (Enable key lookup after the key is found) --- README.rst | 2 +- nested_lookup/nested_lookup.py | 2 +- test_nested_loopkup.py | 74 +++++++++++++++++++++++++++++++--- 3 files changed, 70 insertions(+), 8 deletions(-) diff --git a/README.rst b/README.rst index 0b09dcb..4a0b839 100644 --- a/README.rst +++ b/README.rst @@ -1,7 +1,7 @@ nested_lookup ############# -.. image:: https://img.shields.io/badge/pypi-0.1.5-green.svg +.. image:: https://img.shields.io/badge/pypi-0.1.7-green.svg :target: https://pypi.python.org/pypi/nested-lookup A small Python library which enables: diff --git a/nested_lookup/nested_lookup.py b/nested_lookup/nested_lookup.py index da8e4c1..7aa129a 100644 --- a/nested_lookup/nested_lookup.py +++ b/nested_lookup/nested_lookup.py @@ -27,7 +27,7 @@ def _nested_lookup(key, document, wild=False, with_keys=False): yield k, v else: yield v - elif isinstance(v, dict): + if isinstance(v, dict): for result in _nested_lookup(key, v, wild=wild, with_keys=with_keys): yield result elif isinstance(v, list): diff --git a/test_nested_loopkup.py b/test_nested_loopkup.py index f3e1f4c..45a2dca 100644 --- a/test_nested_loopkup.py +++ b/test_nested_loopkup.py @@ -17,6 +17,27 @@ class TestNestedLookup(TestCase): "email_address": "test4@example.com", }, } + self.subject_dict3 = { + "build_version": { + "model_name": "MacBook Pro", + "build_version": { + "processor_name": "Intel Core i7", + "processor_speed": "2.7 GHz", + "core_details": { + "build_version": "4", + "l2_cache(per_core)": "256 KB" + } + }, + "number_of_cores": "4", + "memory": "256 KB", + }, + "os_details": { + "product_version": "10.13.6", + "build_version": "17G65" + }, + "name": "Test", + "date": "YYYY-MM-DD HH:MM:SS" + } def test_nested_lookup(self): results = nested_lookup("d", self.subject_dict) @@ -47,7 +68,8 @@ class TestNestedLookup(TestCase): self.assertSetEqual({100, 200}, set(results)) def test_wild_nested_lookup(self): - results = nested_lookup(key="mail", document=self.subject_dict2, wild=True) + results = nested_lookup( + key="mail", document=self.subject_dict2, wild=True) self.assertEqual(4, len(results)) self.assertIn("test1@example.com", results) self.assertIn("test2@example.com", results) @@ -61,8 +83,9 @@ class TestNestedLookup(TestCase): self.assertIn("email_address", matches) self.assertIn("secondary_email", matches) self.assertIn("EMAIL_RECOVERY", matches) - self.assertSetEqual( - {"test1@example.com", "test4@example.com"}, set(matches["email_address"]) + self.assertSetEqual({ + "test1@example.com", "test4@example.com"}, + set(matches["email_address"]) ) self.assertIn("test2@example.com", matches["secondary_email"]) @@ -72,6 +95,37 @@ class TestNestedLookup(TestCase): self.assertEqual(2, len(matches["d"])) self.assertSetEqual({100, 200}, set(matches["d"])) + def test_after_key_is_found(self): + result = nested_lookup( + key='build_version', document=self.subject_dict3 + ) + self.assertEqual(4, len(result)) + self.assertIn('4', result) + self.assertIn('17G65', result) + match1 = { + 'processor_name': 'Intel Core i7', + 'processor_speed': '2.7 GHz', + 'core_details': { + 'build_version': '4', + 'l2_cache(per_core)': '256 KB' + } + } + self.assertIn(match1, result) + match2 = { + 'build_version': { + 'processor_name': 'Intel Core i7', + 'processor_speed': '2.7 GHz', + 'core_details': { + 'build_version': '4', + 'l2_cache(per_core)': '256 KB' + } + }, + 'memory': '256 KB', + 'model_name': 'MacBook Pro', + 'number_of_cores': '4' + } + self.assertIn(match2, result) + class TestGetAllKeys(TestCase): @@ -90,7 +144,9 @@ class TestGetAllKeys(TestCase): "total_number_of_cores": "4", "memory": "16 GB", }, - "os_details": {"product_version": "10.13.6", "build_version": "17G65"}, + "os_details": { + "product_version": "10.13.6", "build_version": "17G65" + }, "name": "Test", "date": "YYYY-MM-DD HH:MM:SS", } @@ -115,8 +171,14 @@ class TestGetAllKeys(TestCase): "hardware_details": { "model_name": "MacBook Pro", "processor_details": [ - {"processor_name": "Intel Core i7", "processor_speed": "2.7 GHz"}, - {"total_numberof_cores": "4", "l2_cache(per_core)": "256 KB"}, + { + "processor_name": "Intel Core i7", + "processor_speed": "2.7 GHz" + }, + { + "total_numberof_cores": "4", + "l2_cache(per_core)": "256 KB" + }, ], "total_number_of_cores": "4", "memory": "16 GB",