MCPcopy Create free account
hub / github.com/apache/fory / __init__

Method __init__

python/pyfory/struct.py:389–498  ·  view source on GitHub ↗
(
        self,
        type_resolver,
        clz: type,
        field_names: List[str] = None,
        serializers: List[Serializer] = None,
        nullable_fields: Dict[str, bool] = None,
        dynamic_fields: Dict[str, bool] = None,
        ref_fields: Dict[str, bool] = None,
        field_infos: List[FieldInfo] = None,
        fields_from_typedef: bool = False,
    )

Source from the content-addressed store, hash-verified

387 )
388
389 def __init__(
390 self,
391 type_resolver,
392 clz: type,
393 field_names: List[str] = None,
394 serializers: List[Serializer] = None,
395 nullable_fields: Dict[str, bool] = None,
396 dynamic_fields: Dict[str, bool] = None,
397 ref_fields: Dict[str, bool] = None,
398 field_infos: List[FieldInfo] = None,
399 fields_from_typedef: bool = False,
400 ):
401 super().__init__(type_resolver, clz)
402
403 self._type_hints = get_type_hints(clz)
404 self._has_slots = hasattr(clz, "__slots__")
405
406 self._fields_from_typedef = fields_from_typedef or (field_names is not None and serializers is not None)
407 if field_infos is not None:
408 self._field_infos = list(field_infos)
409 self._field_names = [fi.name for fi in self._field_infos]
410 self._serializers = [fi.serializer for fi in self._field_infos]
411 self._nullable_fields = {fi.name: fi.nullable for fi in self._field_infos}
412 self._ref_fields = {fi.name: fi.runtime_ref_tracking for fi in self._field_infos}
413 self._dynamic_fields = {fi.name: fi.dynamic for fi in self._field_infos}
414 self._field_metas = {}
415 elif self._fields_from_typedef:
416 self._field_names = list(field_names)
417 self._serializers = list(serializers)
418 self._nullable_fields = nullable_fields or {}
419 self._ref_fields = ref_fields or {}
420 self._dynamic_fields = dynamic_fields or {}
421 self._field_infos = []
422 self._field_metas = {}
423 else:
424 self._field_infos, self._field_metas = _extract_field_infos(type_resolver, clz, self._type_hints)
425 if self._field_infos:
426 self._field_names = [fi.name for fi in self._field_infos]
427 self._serializers = [fi.serializer for fi in self._field_infos]
428 self._nullable_fields = {fi.name: fi.nullable for fi in self._field_infos}
429 self._ref_fields = {fi.name: fi.runtime_ref_tracking for fi in self._field_infos}
430 self._dynamic_fields = {fi.name: fi.dynamic for fi in self._field_infos}
431 else:
432 self._field_names = field_names or self._get_field_names(clz)
433 self._nullable_fields = nullable_fields or {}
434 self._ref_fields = {}
435 self._dynamic_fields = {}
436 if self._field_names and not self._nullable_fields:
437 for field_name in self._field_names:
438 if field_name in self._type_hints:
439 unwrapped_type, is_optional = unwrap_optional(self._type_hints[field_name])
440 self._nullable_fields[field_name] = is_optional or not is_primitive_type(unwrapped_type)
441 self._serializers = serializers or [None] * len(self._field_names)
442 if serializers is None:
443 visitor = StructFieldSerializerVisitor(type_resolver)
444 for index, key in enumerate(self._field_names):
445 unwrapped_type, _ = unwrap_optional(self._type_hints.get(key, typing.Any))
446 self._serializers[index] = infer_field(key, unwrapped_type, visitor, types_path=[])

Callers

nothing calls this directly

Calls 15

_get_field_namesMethod · 0.95
get_type_hintsFunction · 0.90
unwrap_optionalFunction · 0.90
is_primitive_typeFunction · 0.90
infer_fieldFunction · 0.90
_extract_field_infosFunction · 0.85
compute_struct_metaFunction · 0.85
boolFunction · 0.85
anyFunction · 0.85

Tested by

no test coverage detected