Skip to content

Commit b7da8a8

Browse files
authored
minioadmin: fix http trace properly (#1438)
Signed-off-by: Bala.FA <bala@minio.io>
1 parent f673f09 commit b7da8a8

File tree

1 file changed

+18
-8
lines changed

1 file changed

+18
-8
lines changed

minio/minioadmin.py

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
import os
2525
from datetime import timedelta
2626
from enum import Enum, unique
27-
from typing import TextIO, Tuple, cast
27+
from typing import Any, TextIO, Tuple, cast
2828
from urllib.parse import urlunsplit
2929

3030
import certifi
@@ -96,6 +96,14 @@ class _COMMAND(Enum):
9696
SERVICE_ACCOUNT_DELETE = "delete-service-account"
9797

9898

99+
def _safe_str(value: Any) -> str:
100+
"""Convert to string safely"""
101+
try:
102+
return value.decode() if isinstance(value, bytes) else str(value)
103+
except UnicodeDecodeError:
104+
return value.hex()
105+
106+
99107
class MinioAdmin:
100108
"""Client to perform MinIO administration operations."""
101109

@@ -202,9 +210,7 @@ def _url_open(
202210
self._trace_stream.write("\n")
203211
if body is not None:
204212
self._trace_stream.write("\n")
205-
self._trace_stream.write(
206-
body.decode() if isinstance(body, bytes) else str(body),
207-
)
213+
self._trace_stream.write(_safe_str(body))
208214
self._trace_stream.write("\n")
209215
self._trace_stream.write("\n")
210216

@@ -230,15 +236,19 @@ def _url_open(
230236
headers_to_strings(response.headers),
231237
)
232238
self._trace_stream.write("\n")
233-
self._trace_stream.write("\n")
234-
self._trace_stream.write(response.data.decode())
235-
self._trace_stream.write("\n")
239+
if preload_content:
240+
self._trace_stream.write("\n")
241+
self._trace_stream.write(_safe_str(response.data))
242+
self._trace_stream.write("\n")
236243
self._trace_stream.write("----------END-HTTP----------\n")
237244

238245
if response.status in [200, 204, 206]:
239246
return response
240247

241-
raise MinioAdminException(str(response.status), response.data.decode())
248+
raise MinioAdminException(
249+
str(response.status),
250+
_safe_str(response.data),
251+
)
242252

243253
def set_app_info(self, app_name: str, app_version: str):
244254
"""

0 commit comments

Comments
 (0)