import json from datetime import datetime from typing import Any class DateTimeEncoder(json.JSONEncoder): """Custom JSON encoder that converts datetime objects to ISO format strings.""" def default(self, obj: Any) -> Any: if isinstance(obj, datetime): return obj.isoformat() return super().default(obj) def get_json_line( json_dict: dict[str, Any], encoder: type[json.JSONEncoder] = DateTimeEncoder ) -> str: """ Convert a dictionary to a JSON string with datetime handling, and add a newline. Args: json_dict: The dictionary to be converted to JSON. encoder: JSON encoder class to use, defaults to DateTimeEncoder. Returns: A JSON string representation of the input dictionary with a newline character. """ return json.dumps(json_dict, cls=encoder) + "\n" def mask_string(sensitive_str: str) -> str: return "****...**" + sensitive_str[-4:] def mask_credential_dict(credential_dict: dict[str, Any]) -> dict[str, str]: masked_creds = {} for key, val in credential_dict.items(): if not isinstance(val, str): raise ValueError( f"Unable to mask credentials of type other than string, cannot process request." f"Recieved type: {type(val)}" ) masked_creds[key] = mask_string(val) return masked_creds