Skip to content

Commit b32c429

Browse files
committed
fix: resolve exception when action ID is passed to printer formatter
1 parent 3e72719 commit b32c429

4 files changed

Lines changed: 57 additions & 2 deletions

File tree

src/binarylane/console/printers/formatter.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,9 @@ def object_to_list(row: Dict[str, Any], columns: List[str]) -> List[Any]:
3333
if isinstance(response, str):
3434
data = [[DEFAULT_HEADING]] if show_header else []
3535
data += [[response]]
36-
36+
elif isinstance(response, int):
37+
data = [[DEFAULT_HEADING]] if show_header else []
38+
data += [[str(response)]]
3739
else:
3840
data = [["name", "value"]] if show_header else []
3941
data += [_flatten(item, True) for item in response.to_dict().items()]

src/binarylane/console/printers/json_printer.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,7 @@ class JsonPrinter(Printer):
1010
"""Output an API response as 'raw' JSON"""
1111

1212
def print(self, response: Any, fields: Optional[List[str]] = None) -> None:
13-
print(json.dumps(response.to_dict()))
13+
print(self.format_response(response))
14+
15+
def format_response(self, response: Any) -> str:
16+
return json.dumps(response.to_dict() if hasattr(response, "to_dict") else response)

tests/printers/test_formatter.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,3 +91,9 @@ def test_format_networks_v4_and_v6(servers_response: ServersResponse) -> None:
9191
Network(ip_address="value4", type=NetworkType.PUBLIC),
9292
]
9393
assert formatter.format_response(servers_response, False, ["networks"]) == [["ipv4\nipv6"]]
94+
95+
96+
# ActionLinkRunner when used with --async will print the action ID
97+
def test_format_int() -> None:
98+
assert formatter.format_response(12345, True) == [[formatter.DEFAULT_HEADING], ["12345"]]
99+
assert formatter.format_response(12345, False) == [["12345"]]

tests/printers/test_json.py

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
from __future__ import annotations
2+
3+
from typing import Any, Dict, List
4+
5+
from tests.models.network import Network
6+
from tests.models.network_type import NetworkType
7+
from tests.models.servers_response import ServersResponse
8+
9+
from binarylane.console.printers.json_printer import JsonPrinter
10+
11+
formatter = JsonPrinter()
12+
13+
14+
def test_format_str() -> None:
15+
assert formatter.format_response("test") == '"test"'
16+
17+
18+
def test_format_list() -> None:
19+
ns1 = "ns1.binarylane.com.au"
20+
ns2 = "ns2.binarylane.com.au"
21+
dns = [ns1, ns2]
22+
23+
assert formatter.format_response(dns) == '["ns1.binarylane.com.au", "ns2.binarylane.com.au"]'
24+
25+
26+
def test_format_dict() -> None:
27+
class DnsList:
28+
dns: List[str]
29+
meta: Dict[str, Any]
30+
links: List[str]
31+
32+
def __init__(self) -> None:
33+
self.dns = ["ns1.binarylane.com.au", "ns2.binarylane.com.au"]
34+
35+
def to_dict(self) -> Dict[str, Any]:
36+
return {"dns": self.dns}
37+
38+
response = DnsList()
39+
assert formatter.format_response(response) == '{"dns": ["ns1.binarylane.com.au", "ns2.binarylane.com.au"]}'
40+
41+
42+
# ActionLinkRunner when used with --async will print the action ID
43+
def test_format_int() -> None:
44+
assert formatter.format_response(12345) == "12345"

0 commit comments

Comments
 (0)