2424import os
2525from datetime import timedelta
2626from enum import Enum , unique
27- from typing import TextIO , Tuple , cast
27+ from typing import Any , TextIO , Tuple , cast
2828from urllib .parse import urlunsplit
2929
3030import 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+
99107class 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