@@ -211,18 +211,32 @@ def _mask_sensitive_data(obj: Any) -> Union[str, Dict, None]:
211211
212212 def get_mask_function (style ):
213213 def complete_mask (value ):
214- return "...FULL_MASKED..."
214+ if isinstance (value , dict ):
215+ return {k : complete_mask (v ) for k , v in value .items ()}
216+ elif isinstance (value , (list , tuple )):
217+ masked_items = [complete_mask (item ) for item in value ]
218+ return type (value )(masked_items )
219+ else :
220+ return "...FULL_MASKED..."
215221
216222 def partial_mask (value ):
217223 if not value :
218224 return value
219- length = len (value )
220- if length <= 4 :
221- return complete_mask (value )
222- slice_value = min (4 , length // 4 )
223- return "{prefix_value}...MASKED...{suffix_value}" .format (
224- prefix_value = value [:slice_value ], suffix_value = value [- slice_value :]
225- )
225+ if isinstance (value , dict ):
226+ return {k : partial_mask (v ) for k , v in value .items ()}
227+ elif isinstance (value , (list , tuple )):
228+ masked_items = [partial_mask (item ) for item in value ]
229+ return type (value )(masked_items )
230+ else :
231+ # Convert all other types to string and mask
232+ str_value = str (value )
233+ length = len (str_value )
234+ if length <= 4 :
235+ return complete_mask (str_value )
236+ slice_value = min (4 , length // 4 )
237+ return "{prefix_value}...MASKED...{suffix_value}" .format (
238+ prefix_value = str_value [:slice_value ], suffix_value = str_value [- slice_value :]
239+ )
226240
227241 mask_styles = {
228242 "complete" : complete_mask ,
0 commit comments