Skip to content

Commit f18a9c3

Browse files
authored
Issue 94 & 91 (#100)
* Baseline unittests * Fix issue #94 * Remove test print * Fix issue #91
1 parent 2ef92b1 commit f18a9c3

File tree

2 files changed

+66
-6
lines changed

2 files changed

+66
-6
lines changed

jdiff/utils/jmespath_parsers.py

+12-6
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ def jmespath_refkey_parser(path: str):
6969
if regex_match_anchor and not element.startswith("[") and not element.endswith("]"):
7070
splitted_jmespath = splitted_jmespath[:number]
7171

72-
return ".".join(splitted_jmespath)
72+
return ".".join(splitted_jmespath) or "@"
7373

7474

7575
def associate_key_of_my_value(paths: str, wanted_value: List) -> List:
@@ -87,13 +87,19 @@ def associate_key_of_my_value(paths: str, wanted_value: List) -> List:
8787

8888
final_list = []
8989

90-
for items in wanted_value:
91-
if len(items) != len(my_key_value_list):
92-
raise ValueError("Key's value len != from value len")
90+
if not all(isinstance(item, list) for item in wanted_value) and len(my_key_value_list) == 1:
91+
for item in wanted_value:
92+
temp_dict = {my_key_value_list[0]: item}
93+
final_list.append(temp_dict)
9394

94-
temp_dict = {my_key_value_list[my_index]: my_value for my_index, my_value in enumerate(items)}
95+
else:
96+
for items in wanted_value:
97+
if len(items) != len(my_key_value_list):
98+
raise ValueError("Key's value len != from value len")
99+
100+
temp_dict = {my_key_value_list[my_index]: my_value for my_index, my_value in enumerate(items)}
95101

96-
final_list.append(temp_dict)
102+
final_list.append(temp_dict)
97103

98104
return final_list
99105

tests/test_get_value.py

+54
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,25 @@ def test_jmspath_return_none(jmspath):
7171
"",
7272
marks=pytest.mark.xfail(reason="Jmespath issue - path returns empty list."),
7373
),
74+
("global.peers.*.is_enabled", [True, True, False, True]),
75+
(
76+
"global.peers.$*$.is_enabled",
77+
[
78+
{"10.1.0.0": {"is_enabled": True}},
79+
{"10.2.0.0": {"is_enabled": True}},
80+
{"10.64.207.255": {"is_enabled": False}},
81+
{"7.7.7.7": {"is_enabled": True}},
82+
],
83+
),
84+
(
85+
"global.peers.$*$.[is_enabled]",
86+
[
87+
{"10.1.0.0": {"is_enabled": True}},
88+
{"10.2.0.0": {"is_enabled": True}},
89+
{"10.64.207.255": {"is_enabled": False}},
90+
{"7.7.7.7": {"is_enabled": True}},
91+
],
92+
),
7493
]
7594

7695

@@ -83,3 +102,38 @@ def test_extract_data_from_json(jmspath, expected_value):
83102
value = extract_data_from_json(data=data, path=jmspath)
84103

85104
assert value == expected_value, ASSERT_FAIL_MESSAGE.format(output=value, expected_output=expected_value)
105+
106+
107+
test_cases_top_key_anchor = [
108+
("$*$.is_enabled", [{".local.": {"is_enabled": True}}, {".local..0": {"is_enabled": True}}]),
109+
("$*$.is_up", [{".local.": {"is_up": True}}, {".local..0": {"is_up": True}}]),
110+
]
111+
112+
113+
@pytest.mark.parametrize("jmspath, expected_value", test_cases_top_key_anchor)
114+
def test_top_key_anchor(jmspath, expected_value):
115+
"""Test JMSPath return value for anchoring the top key."""
116+
data = {
117+
".local.": {
118+
"description": "",
119+
"is_enabled": True,
120+
"is_up": True,
121+
"last_flapped": -1,
122+
"mac_address": "Unspecified",
123+
"mtu": 0,
124+
"speed": -1,
125+
},
126+
".local..0": {
127+
"description": "",
128+
"is_enabled": True,
129+
"is_up": True,
130+
"last_flapped": -1,
131+
"mac_address": "Unspecified",
132+
"mtu": 0,
133+
"speed": -1,
134+
},
135+
}
136+
137+
value = extract_data_from_json(data=data, path=jmspath)
138+
139+
assert value == expected_value, ASSERT_FAIL_MESSAGE.format(output=value, expected_output=expected_value)

0 commit comments

Comments
 (0)