MCPcopy
hub / github.com/agent-infra/sandbox / jsonable_encoder

Function jsonable_encoder

sdk/python/agent_sandbox/core/jsonable_encoder.py:31–100  ·  view source on GitHub ↗
(obj: Any, custom_encoder: Optional[Dict[Any, Callable[[Any], Any]]] = None)

Source from the content-addressed store, hash-verified

29
30
31def jsonable_encoder(obj: Any, custom_encoder: Optional[Dict[Any, Callable[[Any], Any]]] = None) -> Any:
32 custom_encoder = custom_encoder or {}
33 if custom_encoder:
34 if type(obj) in custom_encoder:
35 return custom_encoder[type(obj)](obj)
36 else:
37 for encoder_type, encoder_instance in custom_encoder.items():
38 if isinstance(obj, encoder_type):
39 return encoder_instance(obj)
40 if isinstance(obj, pydantic.BaseModel):
41 if IS_PYDANTIC_V2:
42 encoder = getattr(obj.model_config, "json_encoders", {}) # type: ignore # Pydantic v2
43 else:
44 encoder = getattr(obj.__config__, "json_encoders", {}) # type: ignore # Pydantic v1
45 if custom_encoder:
46 encoder.update(custom_encoder)
47 obj_dict = obj.dict(by_alias=True)
48 if "__root__" in obj_dict:
49 obj_dict = obj_dict["__root__"]
50 if "root" in obj_dict:
51 obj_dict = obj_dict["root"]
52 return jsonable_encoder(obj_dict, custom_encoder=encoder)
53 if dataclasses.is_dataclass(obj):
54 obj_dict = dataclasses.asdict(obj) # type: ignore
55 return jsonable_encoder(obj_dict, custom_encoder=custom_encoder)
56 if isinstance(obj, bytes):
57 return base64.b64encode(obj).decode("utf-8")
58 if isinstance(obj, Enum):
59 return obj.value
60 if isinstance(obj, PurePath):
61 return str(obj)
62 if isinstance(obj, (str, int, float, type(None))):
63 return obj
64 if isinstance(obj, dt.datetime):
65 return serialize_datetime(obj)
66 if isinstance(obj, dt.date):
67 return str(obj)
68 if isinstance(obj, dict):
69 encoded_dict = {}
70 allowed_keys = set(obj.keys())
71 for key, value in obj.items():
72 if key in allowed_keys:
73 encoded_key = jsonable_encoder(key, custom_encoder=custom_encoder)
74 encoded_value = jsonable_encoder(value, custom_encoder=custom_encoder)
75 encoded_dict[encoded_key] = encoded_value
76 return encoded_dict
77 if isinstance(obj, (list, set, frozenset, GeneratorType, tuple)):
78 encoded_list = []
79 for item in obj:
80 encoded_list.append(jsonable_encoder(item, custom_encoder=custom_encoder))
81 return encoded_list
82
83 def fallback_serializer(o: Any) -> Any:
84 attempt_encode = encode_by_type(o)
85 if attempt_encode is not None:
86 return attempt_encode
87
88 try:

Callers 15

delete_sessionMethod · 0.90
delete_sessionMethod · 0.90
remove_hookMethod · 0.90
observe_report_deleteMethod · 0.90
remove_hookMethod · 0.90
observe_report_deleteMethod · 0.90
cleanup_sessionMethod · 0.90
cleanup_sessionMethod · 0.90
closeMethod · 0.90
activateMethod · 0.90

Calls 5

serialize_datetimeFunction · 0.85
dictMethod · 0.80
keysMethod · 0.80
appendMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…