Skip to content

Commit a1a41a3

Browse files
authored
fix #25 (#26)
* fix value parser * fix value parser * integrate comments from PR * fix pycodestyle * integrate comments from PR
1 parent 4ec5bed commit a1a41a3

File tree

2 files changed

+23
-13
lines changed

2 files changed

+23
-13
lines changed

netcompare/utils/jmspath_parsers.py

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,31 @@ def jmspath_value_parser(path: str):
66
"""
77
Get the JMSPath value path from 'path'.
88
9+
Two combinations are possible based on where reference key is defined. See example below.
10+
911
Args:
1012
path: "result[0].vrfs.default.peerList[*].[$peerAddress$,prefixesReceived]"
13+
path: "result[0].$vrfs$.default.peerList[*].[peerAddress, prefixesReceived]"
14+
1115
Return:
1216
"result[0].vrfs.default.peerList[*].[prefixesReceived]"
17+
"result[0].vrfs.default.peerList[*].[peerAddress, prefixesReceived]"
1318
"""
14-
regex_match_value = re.search(r"\$.*\$\.|\$.*\$,|,\$.*\$", path)
15-
16-
if not regex_match_value:
17-
return path
18-
# $peers$. --> peers
19-
regex_normalized_value = re.search(r"\$.*\$", regex_match_value.group())
20-
if regex_normalized_value:
21-
normalized_value = regex_match_value.group().split("$")[1]
22-
return path.replace(regex_normalized_value.group(), normalized_value)
23-
19+
regex_ref_key = re.compile(r"\$.*\$\.|\$.*\$,|,\$.*\$")
20+
regex_match_ref_key = regex_ref_key.search(path)
21+
path_suffix = path.split(".")[-1]
22+
23+
if regex_match_ref_key:
24+
if regex_ref_key.search(path_suffix):
25+
# [$peerAddress$,prefixesReceived] --> [prefixesReceived]
26+
reference_key = regex_match_ref_key.group()
27+
return path.replace(reference_key, "")
28+
29+
# result[0].$vrfs$.default... --> result[0].vrfs.default....
30+
regex_normalized_value = re.search(r"\$.*\$", regex_match_ref_key.group())
31+
if regex_normalized_value:
32+
normalized_value = regex_match_ref_key.group().split("$")[1]
33+
return path.replace(regex_normalized_value.group(), normalized_value)
2434
return path
2535

2636

tests/test_jmspath_parsers.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,15 @@
66

77
value_parser_case_1 = (
88
"result[0].vrfs.default.peerList[*].[$peerAddress$,prefixesReceived]",
9-
"result[0].vrfs.default.peerList[*].[peerAddress,prefixesReceived]",
9+
"result[0].vrfs.default.peerList[*].[prefixesReceived]",
1010
)
1111
value_parser_case_2 = (
1212
"result[0].vrfs.default.peerList[*].[peerAddress,$prefixesReceived$]",
13-
"result[0].vrfs.default.peerList[*].[peerAddress,prefixesReceived]",
13+
"result[0].vrfs.default.peerList[*].[peerAddress]",
1414
)
1515
value_parser_case_3 = (
1616
"result[0].vrfs.default.peerList[*].[interfaceCounters,$peerAddress$,prefixesReceived]",
17-
"result[0].vrfs.default.peerList[*].[interfaceCounters,peerAddress,prefixesReceived]",
17+
"result[0].vrfs.default.peerList[*].[interfaceCounters,prefixesReceived]",
1818
)
1919
value_parser_case_4 = (
2020
"result[0].$vrfs$.default.peerList[*].[peerAddress,prefixesReceived]",

0 commit comments

Comments
 (0)