MCPcopy Index your code
hub / github.com/apache/fory / write

Method write

python/pyfory/serializer.py:1152–1200  ·  view source on GitHub ↗
(self, write_context, value)

Source from the content-addressed store, hash-verified

1150 return self._validate_global_object(policy, obj)
1151
1152 def write(self, write_context, value):
1153 # Try __reduce_ex__ first (with protocol 5 for pickle5 out-of-band buffer support), then __reduce__
1154 # Check if the object has a custom __reduce_ex__ method (not just the default from object)
1155 if hasattr(value, "__reduce_ex__") and value.__class__.__reduce_ex__ is not object.__reduce_ex__:
1156 try:
1157 reduce_result = value.__reduce_ex__(5)
1158 except TypeError:
1159 # Some objects don't support protocol argument
1160 reduce_result = value.__reduce_ex__()
1161 elif hasattr(value, "__reduce__"):
1162 reduce_result = value.__reduce__()
1163 else:
1164 raise ValueError(f"Object {value} has no __reduce__ or __reduce_ex__ method")
1165
1166 # Handle different __reduce__ return formats
1167 if isinstance(reduce_result, str):
1168 # Case 1: Just a global name (simple case)
1169 reduce_data = (0, reduce_result)
1170 elif isinstance(reduce_result, tuple):
1171 if len(reduce_result) == 2:
1172 # Case 2: (callable, args)
1173 callable_obj, args = reduce_result
1174 reduce_data = (1, callable_obj, args)
1175 elif len(reduce_result) == 3:
1176 # Case 3: (callable, args, state)
1177 callable_obj, args, state = reduce_result
1178 reduce_data = (1, callable_obj, args, state)
1179 elif len(reduce_result) == 4:
1180 # Case 4: (callable, args, state, listitems)
1181 callable_obj, args, state, listitems = reduce_result
1182 reduce_data = (1, callable_obj, args, state, listitems)
1183 elif len(reduce_result) == 5:
1184 # Case 5: (callable, args, state, listitems, dictitems)
1185 callable_obj, args, state, listitems, dictitems = reduce_result
1186 reduce_data = (
1187 1,
1188 callable_obj,
1189 args,
1190 state,
1191 listitems,
1192 dictitems,
1193 )
1194 else:
1195 raise ValueError(f"Invalid __reduce__ result length: {len(reduce_result)}")
1196 else:
1197 raise ValueError(f"Invalid __reduce__ result type: {type(reduce_result)}")
1198 write_context.write_var_uint32(len(reduce_data))
1199 for item in reduce_data:
1200 write_context.write_ref(item)
1201
1202 def read(self, read_context):
1203 reduce_data_num_items = read_context.read_var_uint32()

Callers

nothing calls this directly

Calls 4

__reduce_ex__Method · 0.80
write_refMethod · 0.80
__reduce__Method · 0.45
write_var_uint32Method · 0.45

Tested by

no test coverage detected