32 lines
866 B
Python
32 lines
866 B
Python
import json
|
|
from datetime import datetime
|
|
from typing import TypedDict, Any, cast
|
|
|
|
|
|
# fixme: discover a better way for json serialization, maybe customize constructor
|
|
class Response(TypedDict):
|
|
statusCode: int
|
|
body: Any
|
|
|
|
|
|
def to_json_serializable(obj: Any) -> Any:
|
|
if obj is None:
|
|
return ''
|
|
elif isinstance(obj, list):
|
|
result = []
|
|
for item in obj:
|
|
result.append(to_json_serializable(item))
|
|
return result
|
|
elif isinstance(obj, datetime):
|
|
return json.dumps(obj, indent=4, sort_keys=True, default=str)
|
|
elif isinstance(obj, (int, float, str, bool)):
|
|
return obj
|
|
elif isinstance(obj, dict):
|
|
to_obj = cast({}, obj)
|
|
result = {}
|
|
for key, val in to_obj.items():
|
|
result[key] = to_json_serializable(val)
|
|
return result
|
|
else:
|
|
return obj
|