Skip to content

Commit 32fd489

Browse files
fix: Resolve issue with formatting on nested fields in JSON mode (#522)
1 parent 21380ce commit 32fd489

File tree

2 files changed

+43
-0
lines changed

2 files changed

+43
-0
lines changed

linodecli/output.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -363,6 +363,9 @@ def _select_json_elements(keys, json_res):
363363
elif isinstance(v, list):
364364
results = []
365365
for elem in v:
366+
if not isinstance(elem, dict):
367+
continue
368+
366369
selected = OutputHandler._select_json_elements(keys, elem)
367370
if not selected:
368371
continue

tests/integration/firewalls/test_firewalls_rules.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -284,3 +284,43 @@ def test_list_rules_json(create_firewall):
284284
assert result[0]["inbound"][0]["action"] == "ACCEPT"
285285
assert result[0]["inbound"][0]["label"] == "rules-list-test"
286286
assert result[0]["inbound"][0]["addresses"]["ipv4"] == ["198.0.0.1/32"]
287+
288+
289+
def test_list_rules_json_format(create_firewall):
290+
firewall_id = create_firewall
291+
new_label = '"rules-list-test"'
292+
inbound_rule = (
293+
'[{"ports": "22", "protocol": "TCP", "addresses": {"ipv4": ["198.0.0.1/32"]}, "action": "ACCEPT", "label": '
294+
+ new_label
295+
+ "}]"
296+
)
297+
# adding a rule
298+
exec_test_command(
299+
BASE_CMD
300+
+ [
301+
firewall_id,
302+
"--inbound",
303+
inbound_rule,
304+
"--text",
305+
"--no-headers",
306+
"--delimiter",
307+
",",
308+
]
309+
).stdout.decode().rstrip()
310+
result = json.loads(
311+
exec_test_command(
312+
[
313+
"linode-cli",
314+
"firewalls",
315+
"rules-list",
316+
firewall_id,
317+
"--json",
318+
"--format",
319+
"label",
320+
]
321+
)
322+
.stdout.decode()
323+
.rstrip()
324+
)
325+
326+
assert result[0]["inbound"][0] == {"label": "rules-list-test"}

0 commit comments

Comments
 (0)