diff --git a/nested_lookup/nested_lookup.py b/nested_lookup/nested_lookup.py index 7aa129a..d38dd47 100644 --- a/nested_lookup/nested_lookup.py +++ b/nested_lookup/nested_lookup.py @@ -49,16 +49,17 @@ def get_all_keys(dictionary): result_list = [] def recrusion(dictionary): - for key, value in iteritems(dictionary): - if isinstance(value, dict): - result_list.append(key) - recrusion(dictionary=value) - elif isinstance(value, list): - result_list.append(key) - for list_items in value: - recrusion(dictionary=list_items) - else: - result_list.append(key) + if hasattr(dictionary, 'items'): + for key, value in iteritems(dictionary): + if isinstance(value, dict): + result_list.append(key) + recrusion(dictionary=value) + elif isinstance(value, list): + result_list.append(key) + for list_items in value: + recrusion(dictionary=list_items) + else: + result_list.append(key) recrusion(dictionary=dictionary) return result_list @@ -104,16 +105,17 @@ def _get_occurrence(dictionary, item, keyword): occurrence = [0] def recrusion(dictionary): - if item == 'key': - occurrence[0] += 1 if dictionary.get(keyword) else 0 - elif keyword in dictionary.values(): - occurrence[0] += dictionary.values().count(keyword) - for key, value in iteritems(dictionary): - if isinstance(value, dict): - recrusion(dictionary=value) - elif isinstance(value, list): - for list_items in value: - recrusion(dictionary=list_items) + if hasattr(dictionary, 'items'): + if item == 'key': + occurrence[0] += 1 if dictionary.get(keyword) else 0 + elif keyword in dictionary.values(): + occurrence[0] += dictionary.values().count(keyword) + for key, value in iteritems(dictionary): + if isinstance(value, dict): + recrusion(dictionary=value) + elif isinstance(value, list): + for list_items in value: + recrusion(dictionary=list_items) recrusion(dictionary=dictionary) return occurrence[0] diff --git a/test_nested_loopkup.py b/test_nested_loopkup.py index 45a2dca..3d617bc 100644 --- a/test_nested_loopkup.py +++ b/test_nested_loopkup.py @@ -184,6 +184,25 @@ class TestGetAllKeys(TestCase): "memory": "16 GB", } } + self.sample4 = { + "values": [ + { + "checks": [ + { + "monitoring_zones": [ + "mzdfw", + "mzfra", + "mzhkg", + "mziad", + "mzlon", + "mzord", + "mzsyd" + ] + } + ] + } + ] + } def test_sample_data1(self): result = get_all_keys(self.sample1) @@ -222,6 +241,16 @@ class TestGetAllKeys(TestCase): for key in keys_to_verify: self.assertIn(key, result) + def test_sample_data4(self): + result = get_all_keys(self.sample4) + self.assertEqual(3, len(result)) + keys_to_verify = [ + "values", + "checks", + "monitoring_zones" + ] + for key in keys_to_verify: + class TestGetOccurrence(TestCase): def setUp(self):