diff --git a/pkgs/ops-pkg/src/genie/libs/ops/interface/nxos/interface.py b/pkgs/ops-pkg/src/genie/libs/ops/interface/nxos/interface.py index d208b8df9..8afeed808 100644 --- a/pkgs/ops-pkg/src/genie/libs/ops/interface/nxos/interface.py +++ b/pkgs/ops-pkg/src/genie/libs/ops/interface/nxos/interface.py @@ -464,11 +464,11 @@ def _match_keys(self, dic, match): if isinstance(dic, dict): for key, value in match.items(): for dic_key in dic: - if key in dic[dic_key] and dic[dic_key][key] == value: + if not isinstance(dic[dic_key], dict): + pass + elif key in dic[dic_key] and dic[dic_key][key] == value: self.ret_dict.update(dic) break - elif not isinstance(dic[dic_key], dict): - pass else: self._match_keys(dic=dic[dic_key], match=match) return(self.ret_dict) diff --git a/pkgs/ops-pkg/src/genie/libs/ops/interface/nxos/rev1/interface.py b/pkgs/ops-pkg/src/genie/libs/ops/interface/nxos/rev1/interface.py index d226f6612..fe81c32f0 100644 --- a/pkgs/ops-pkg/src/genie/libs/ops/interface/nxos/rev1/interface.py +++ b/pkgs/ops-pkg/src/genie/libs/ops/interface/nxos/rev1/interface.py @@ -485,11 +485,11 @@ def _match_keys(self, dic, match): if isinstance(dic, dict): for key, value in match.items(): for dic_key in dic: - if key in dic[dic_key] and dic[dic_key][key] == value: + if not isinstance(dic[dic_key], dict): + pass + elif key in dic[dic_key] and dic[dic_key][key] == value: self.ret_dict.update(dic) break - elif not isinstance(dic[dic_key], dict): - pass else: self._match_keys(dic=dic[dic_key], match=match) - return(self.ret_dict) \ No newline at end of file + return(self.ret_dict) diff --git a/pkgs/ops-pkg/src/genie/libs/ops/interface/nxos/tests/test_interface.py b/pkgs/ops-pkg/src/genie/libs/ops/interface/nxos/tests/test_interface.py index 0cc116b14..9c839a83d 100644 --- a/pkgs/ops-pkg/src/genie/libs/ops/interface/nxos/tests/test_interface.py +++ b/pkgs/ops-pkg/src/genie/libs/ops/interface/nxos/tests/test_interface.py @@ -133,6 +133,22 @@ def test_incomplete_output(self): # Verify Ops was created successfully self.assertDictEqual(intf.info, expect_dict) + def test_match_keys_ignores_scalar_values(self): + intf = Interface(device=self.device) + intf.ret_dict = {} +g + routing_dict = { + "route1": { + "interface": "Ethernet2/1", + "tag": 10, + }, + "scalar": "not-a-dict", + } + + intf._match_keys(dic=routing_dict, match={"interface": "Ethernet2/1"}) + + self.assertEqual(intf.ret_dict, routing_dict) + def test_brief_output(self): self.maxDiff = None intf = InterfaceRev1(device=self.device)