Skip to content

Commit bb5117e

Browse files
authored
feat(python): replace "_class" prefix with "_type" in metashare (#2290)
## What does this PR do? replace "_class" prefix with "_type" in metashare ## Related issues #2289 ## Does this PR introduce any user-facing change? - [ ] Does this PR introduce any public API change? - [ ] Does this PR introduce any binary protocol compatibility change?
1 parent 7a1ee4c commit bb5117e

File tree

12 files changed

+459
-463
lines changed

12 files changed

+459
-463
lines changed

python/pyfory/__init__.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,10 @@
2626
except ImportError:
2727
ENABLE_FORY_CYTHON_SERIALIZATION = False
2828

29-
from pyfory._registry import ClassInfo
29+
from pyfory._registry import TypeInfo
3030

3131
if ENABLE_FORY_CYTHON_SERIALIZATION:
32-
from pyfory._serialization import Fory, ClassInfo # noqa: F401,F811
32+
from pyfory._serialization import Fory, TypeInfo # noqa: F401,F811
3333

3434
from pyfory._struct import ( # noqa: F401,F403,F811 # pylint: disable=unused-import
3535
ComplexObjectSerializer,

python/pyfory/_fory.py

Lines changed: 63 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -47,19 +47,19 @@
4747
MAGIC_NUMBER = 0x62D4
4848
DEFAULT_DYNAMIC_WRITE_META_STR_ID = -1
4949
DYNAMIC_TYPE_ID = -1
50-
USE_CLASSNAME = 0
51-
USE_CLASS_ID = 1
52-
# preserve 0 as flag for class id not set in ClassInfo`
53-
NO_CLASS_ID = 0
54-
INT64_CLASS_ID = TypeId.INT64
55-
FLOAT64_CLASS_ID = TypeId.FLOAT64
56-
BOOL_CLASS_ID = TypeId.BOOL
57-
STRING_CLASS_ID = TypeId.STRING
58-
# `NOT_NULL_VALUE_FLAG` + `CLASS_ID << 1` in little-endian order
59-
NOT_NULL_INT64_FLAG = NOT_NULL_VALUE_FLAG & 0b11111111 | (INT64_CLASS_ID << 8)
60-
NOT_NULL_FLOAT64_FLAG = NOT_NULL_VALUE_FLAG & 0b11111111 | (FLOAT64_CLASS_ID << 8)
61-
NOT_NULL_BOOL_FLAG = NOT_NULL_VALUE_FLAG & 0b11111111 | (BOOL_CLASS_ID << 8)
62-
NOT_NULL_STRING_FLAG = NOT_NULL_VALUE_FLAG & 0b11111111 | (STRING_CLASS_ID << 8)
50+
USE_TYPE_NAME = 0
51+
USE_TYPE_ID = 1
52+
# preserve 0 as flag for type id not set in TypeInfo`
53+
NO_TYPE_ID = 0
54+
INT64_TYPE_ID = TypeId.INT64
55+
FLOAT64_TYPE_ID = TypeId.FLOAT64
56+
BOOL_TYPE_ID = TypeId.BOOL
57+
STRING_TYPE_ID = TypeId.STRING
58+
# `NOT_NULL_VALUE_FLAG` + `TYPE_ID << 1` in little-endian order
59+
NOT_NULL_INT64_FLAG = NOT_NULL_VALUE_FLAG & 0b11111111 | (INT64_TYPE_ID << 8)
60+
NOT_NULL_FLOAT64_FLAG = NOT_NULL_VALUE_FLAG & 0b11111111 | (FLOAT64_TYPE_ID << 8)
61+
NOT_NULL_BOOL_FLAG = NOT_NULL_VALUE_FLAG & 0b11111111 | (BOOL_TYPE_ID << 8)
62+
NOT_NULL_STRING_FLAG = NOT_NULL_VALUE_FLAG & 0b11111111 | (STRING_TYPE_ID << 8)
6363
SMALL_STRING_THRESHOLD = 16
6464

6565

@@ -100,9 +100,9 @@ class Fory:
100100
"is_py",
101101
"ref_tracking",
102102
"ref_resolver",
103-
"class_resolver",
103+
"type_resolver",
104104
"serialization_context",
105-
"require_class_registration",
105+
"require_type_registration",
106106
"buffer",
107107
"pickler",
108108
"unpickler",
@@ -119,39 +119,39 @@ def __init__(
119119
self,
120120
language=Language.XLANG,
121121
ref_tracking: bool = False,
122-
require_class_registration: bool = True,
122+
require_type_registration: bool = True,
123123
):
124124
"""
125-
:param require_class_registration:
126-
Whether to require registering classes for serialization, enabled by default.
127-
If disabled, unknown insecure classes can be deserialized, which can be
128-
insecure and cause remote code execution attack if the classes
125+
:param require_type_registration:
126+
Whether to require registering types for serialization, enabled by default.
127+
If disabled, unknown insecure types can be deserialized, which can be
128+
insecure and cause remote code execution attack if the types
129129
`__new__`/`__init__`/`__eq__`/`__hash__` method contain malicious code.
130-
Do not disable class registration if you can't ensure your environment are
130+
Do not disable type registration if you can't ensure your environment are
131131
*indeed secure*. We are not responsible for security risks if
132132
you disable this option.
133133
"""
134134
self.language = language
135135
self.is_py = language == Language.PYTHON
136-
self.require_class_registration = (
137-
_ENABLE_CLASS_REGISTRATION_FORCIBLY or require_class_registration
136+
self.require_type_registration = (
137+
_ENABLE_TYPE_REGISTRATION_FORCIBLY or require_type_registration
138138
)
139139
self.ref_tracking = ref_tracking
140140
if self.ref_tracking:
141141
self.ref_resolver = MapRefResolver()
142142
else:
143143
self.ref_resolver = NoRefResolver()
144144
from pyfory._serialization import MetaStringResolver
145-
from pyfory._registry import ClassResolver
145+
from pyfory._registry import TypeResolver
146146

147147
self.metastring_resolver = MetaStringResolver()
148-
self.class_resolver = ClassResolver(self)
149-
self.class_resolver.initialize()
148+
self.type_resolver = TypeResolver(self)
149+
self.type_resolver.initialize()
150150
self.serialization_context = SerializationContext()
151151
self.buffer = Buffer.allocate(32)
152-
if not require_class_registration:
152+
if not require_type_registration:
153153
warnings.warn(
154-
"Class registration is disabled, unknown classes can be deserialized "
154+
"Type registration is disabled, unknown types can be deserialized "
155155
"which may be insecure.",
156156
RuntimeWarning,
157157
stacklevel=2,
@@ -168,7 +168,7 @@ def __init__(
168168
self._peer_language = None
169169

170170
def register_serializer(self, cls: type, serializer):
171-
self.class_resolver.register_serializer(cls, serializer)
171+
self.type_resolver.register_serializer(cls, serializer)
172172

173173
# `Union[type, TypeVar]` is not supported in py3.6
174174
def register_type(
@@ -180,7 +180,7 @@ def register_type(
180180
typename: str = None,
181181
serializer=None,
182182
):
183-
return self.class_resolver.register_type(
183+
return self.type_resolver.register_type(
184184
cls,
185185
type_id=type_id,
186186
namespace=namespace,
@@ -257,7 +257,7 @@ def _serialize(
257257
else:
258258
return buffer.to_bytes(0, buffer.writer_index)
259259

260-
def serialize_ref(self, buffer, obj, classinfo=None):
260+
def serialize_ref(self, buffer, obj, typeinfo=None):
261261
cls = type(obj)
262262
if cls is str:
263263
buffer.write_int16(NOT_NULL_STRING_FLAG)
@@ -273,29 +273,29 @@ def serialize_ref(self, buffer, obj, classinfo=None):
273273
return
274274
if self.ref_resolver.write_ref_or_null(buffer, obj):
275275
return
276-
if classinfo is None:
277-
classinfo = self.class_resolver.get_classinfo(cls)
278-
self.class_resolver.write_typeinfo(buffer, classinfo)
279-
classinfo.serializer.write(buffer, obj)
276+
if typeinfo is None:
277+
typeinfo = self.type_resolver.get_typeinfo(cls)
278+
self.type_resolver.write_typeinfo(buffer, typeinfo)
279+
typeinfo.serializer.write(buffer, obj)
280280

281281
def serialize_nonref(self, buffer, obj):
282282
cls = type(obj)
283283
if cls is str:
284-
buffer.write_varuint32(STRING_CLASS_ID)
284+
buffer.write_varuint32(STRING_TYPE_ID)
285285
buffer.write_string(obj)
286286
return
287287
elif cls is int:
288-
buffer.write_varuint32(INT64_CLASS_ID)
288+
buffer.write_varuint32(INT64_TYPE_ID)
289289
buffer.write_varint64(obj)
290290
return
291291
elif cls is bool:
292-
buffer.write_varuint32(BOOL_CLASS_ID)
292+
buffer.write_varuint32(BOOL_TYPE_ID)
293293
buffer.write_bool(obj)
294294
return
295295
else:
296-
classinfo = self.class_resolver.get_classinfo(cls)
297-
self.class_resolver.write_typeinfo(buffer, classinfo)
298-
classinfo.serializer.write(buffer, obj)
296+
typeinfo = self.type_resolver.get_typeinfo(cls)
297+
self.type_resolver.write_typeinfo(buffer, typeinfo)
298+
typeinfo.serializer.write(buffer, obj)
299299

300300
def xserialize_ref(self, buffer, obj, serializer=None):
301301
if serializer is None or serializer.need_to_write_ref:
@@ -313,9 +313,9 @@ def xserialize_nonref(self, buffer, obj, serializer=None):
313313
serializer.xwrite(buffer, obj)
314314
return
315315
cls = type(obj)
316-
classinfo = self.class_resolver.get_classinfo(cls)
317-
self.class_resolver.write_typeinfo(buffer, classinfo)
318-
classinfo.serializer.xwrite(buffer, obj)
316+
typeinfo = self.type_resolver.get_typeinfo(cls)
317+
self.type_resolver.write_typeinfo(buffer, typeinfo)
318+
typeinfo.serializer.xwrite(buffer, obj)
319319

320320
def deserialize(
321321
self,
@@ -381,17 +381,17 @@ def deserialize_ref(self, buffer):
381381
ref_id = ref_resolver.try_preserve_ref_id(buffer)
382382
# indicates that the object is first read.
383383
if ref_id >= NOT_NULL_VALUE_FLAG:
384-
classinfo = self.class_resolver.read_typeinfo(buffer)
385-
o = classinfo.serializer.read(buffer)
384+
typeinfo = self.type_resolver.read_typeinfo(buffer)
385+
o = typeinfo.serializer.read(buffer)
386386
ref_resolver.set_read_object(ref_id, o)
387387
return o
388388
else:
389389
return ref_resolver.get_read_object()
390390

391391
def deserialize_nonref(self, buffer):
392392
"""Deserialize not-null and non-reference object from buffer."""
393-
classinfo = self.class_resolver.read_typeinfo(buffer)
394-
return classinfo.serializer.read(buffer)
393+
typeinfo = self.type_resolver.read_typeinfo(buffer)
394+
return typeinfo.serializer.read(buffer)
395395

396396
def xdeserialize_ref(self, buffer, serializer=None):
397397
if serializer is None or serializer.need_to_write_ref:
@@ -411,7 +411,7 @@ def xdeserialize_ref(self, buffer, serializer=None):
411411

412412
def xdeserialize_nonref(self, buffer, serializer=None):
413413
if serializer is None:
414-
serializer = self.class_resolver.read_typeinfo(buffer).serializer
414+
serializer = self.type_resolver.read_typeinfo(buffer).serializer
415415
return serializer.xread(buffer)
416416

417417
def write_buffer_object(self, buffer, buffer_object: BufferObject):
@@ -457,20 +457,20 @@ def handle_unsupported_read(self, buffer):
457457
assert self._unsupported_objects is not None
458458
return next(self._unsupported_objects)
459459

460-
def write_ref_pyobject(self, buffer, value, classinfo=None):
460+
def write_ref_pyobject(self, buffer, value, typeinfo=None):
461461
if self.ref_resolver.write_ref_or_null(buffer, value):
462462
return
463-
if classinfo is None:
464-
classinfo = self.class_resolver.get_classinfo(type(value))
465-
self.class_resolver.write_typeinfo(buffer, classinfo)
466-
classinfo.serializer.write(buffer, value)
463+
if typeinfo is None:
464+
typeinfo = self.type_resolver.get_typeinfo(type(value))
465+
self.type_resolver.write_typeinfo(buffer, typeinfo)
466+
typeinfo.serializer.write(buffer, value)
467467

468468
def read_ref_pyobject(self, buffer):
469469
return self.deserialize_ref(buffer)
470470

471471
def reset_write(self):
472472
self.ref_resolver.reset_write()
473-
self.class_resolver.reset_write()
473+
self.type_resolver.reset_write()
474474
self.serialization_context.reset()
475475
self.metastring_resolver.reset_write()
476476
self.pickler.clear_memo()
@@ -479,7 +479,7 @@ def reset_write(self):
479479

480480
def reset_read(self):
481481
self.ref_resolver.reset_read()
482-
self.class_resolver.reset_read()
482+
self.type_resolver.reset_read()
483483
self.serialization_context.reset()
484484
self.metastring_resolver.reset_write()
485485
self.unpickler = None
@@ -521,8 +521,8 @@ def reset(self):
521521
self.objects.clear()
522522

523523

524-
_ENABLE_CLASS_REGISTRATION_FORCIBLY = os.getenv(
525-
"ENABLE_CLASS_REGISTRATION_FORCIBLY", "0"
524+
_ENABLE_TYPE_REGISTRATION_FORCIBLY = os.getenv(
525+
"ENABLE_TYPE_REGISTRATION_FORCIBLY", "0"
526526
) in {
527527
"1",
528528
"true",
@@ -532,9 +532,9 @@ def reset(self):
532532
class _PicklerStub:
533533
def dump(self, o):
534534
raise ValueError(
535-
f"Class {type(o)} is not registered, "
536-
f"pickle is not allowed when class registration enabled, Please register"
537-
f"the class or pass unsupported_callback"
535+
f"Type {type(o)} is not registered, "
536+
f"pickle is not allowed when type registration enabled, Please register"
537+
f"the type or pass unsupported_callback"
538538
)
539539

540540
def clear_memo(self):
@@ -544,6 +544,6 @@ def clear_memo(self):
544544
class _UnpicklerStub:
545545
def load(self):
546546
raise ValueError(
547-
"pickle is not allowed when class registration enabled, Please register"
548-
"the class or pass unsupported_callback"
547+
"pickle is not allowed when type registration enabled, Please register"
548+
"the type or pass unsupported_callback"
549549
)

0 commit comments

Comments
 (0)