Skip to content

Commit 2645a27

Browse files
committed
register dynamic serializer only not require registration
1 parent 14b4824 commit 2645a27

1 file changed

Lines changed: 11 additions & 15 deletions

File tree

python/pyfory/_registry.py

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -198,14 +198,16 @@ def _initialize_py(self):
198198
register(slice, serializer=SliceSerializer)
199199
register(np.ndarray, serializer=NDArraySerializer)
200200
register(array.array, serializer=DynamicPyArraySerializer)
201-
self._internal_py_serializer_map = {
202-
ReduceSerializer: (self._stub_cls("__Reduce__"), self._next_type_id()),
203-
TypeSerializer: (self._stub_cls("__Type__"), self._next_type_id()),
204-
MethodSerializer: (self._stub_cls("__Method__"), self._next_type_id()),
205-
NativeFuncMethodSerializer: (self._stub_cls("__NativeFunction__"), self._next_type_id()),
206-
}
207-
for serializer, (stub_cls, type_id) in self._internal_py_serializer_map.items():
208-
register(stub_cls, serializer=serializer, type_id=type_id)
201+
if not self.require_registration:
202+
self._internal_py_serializer_map = {
203+
ReduceSerializer: (self._stub_cls("__Reduce__"), self._next_type_id()),
204+
TypeSerializer: (self._stub_cls("__Type__"), self._next_type_id()),
205+
MethodSerializer: (self._stub_cls("__Method__"), self._next_type_id()),
206+
FunctionSerializer: (self._stub_cls("__Function__"), self._next_type_id()),
207+
NativeFuncMethodSerializer: (self._stub_cls("__NativeFunction__"), self._next_type_id()),
208+
}
209+
for serializer, (stub_cls, type_id) in self._internal_py_serializer_map.items():
210+
register(stub_cls, serializer=serializer, type_id=type_id)
209211

210212
@staticmethod
211213
def _stub_cls(name: str):
@@ -353,10 +355,6 @@ def _register_xtype(
353355
if issubclass(cls, enum.Enum):
354356
serializer = EnumSerializer(self.fory, cls)
355357
type_id = TypeId.NAMED_ENUM if type_id is None else ((type_id << 8) + TypeId.ENUM)
356-
elif cls is types.FunctionType:
357-
# Use FunctionSerializer for function types (including lambdas)
358-
serializer = FunctionSerializer(self.fory, cls)
359-
type_id = TypeId.NAMED_EXT if type_id is None else ((type_id << 8) + TypeId.EXT)
360358
else:
361359
serializer = DataClassSerializer(self.fory, cls, xlang=True)
362360
type_id = TypeId.NAMED_STRUCT if type_id is None else ((type_id << 8) + TypeId.STRUCT)
@@ -466,16 +464,14 @@ def get_typeinfo(self, cls, create=True):
466464
return type_info
467465
elif not create:
468466
return None
469-
if self.language != Language.PYTHON or (self.require_registration and not issubclass(cls, Enum)):
467+
if self.require_registration and not issubclass(cls, Enum):
470468
raise TypeUnregisteredError(f"{cls} not registered")
471469
logger.info("Type %s not registered", cls)
472470
serializer = self._create_serializer(cls)
473471
type_id = None
474472
if self.language == Language.PYTHON:
475473
if isinstance(serializer, EnumSerializer):
476474
type_id = TypeId.NAMED_ENUM
477-
elif isinstance(serializer, FunctionSerializer):
478-
type_id = TypeId.NAMED_EXT
479475
elif isinstance(serializer, (ObjectSerializer, StatefulSerializer)):
480476
type_id = TypeId.NAMED_EXT
481477
elif self._internal_py_serializer_map.get(type(serializer)) is not None:

0 commit comments

Comments
 (0)