robokudo.utils.serialization ============================ .. py:module:: robokudo.utils.serialization .. autoapi-nested-parse:: @author: Max Gandyra Based on: "https://github.com/jsonpickle/jsonpickle" Can encode/decode any object as JSON-object and also store and load them from files/strings. Attributes ---------- .. autoapisummary:: robokudo.utils.serialization.type_swap_obj robokudo.utils.serialization.type_set_func robokudo.utils.serialization.type_placeholders robokudo.utils.serialization.BYTES robokudo.utils.serialization.ID robokudo.utils.serialization.JSON_KEY robokudo.utils.serialization.MODULE robokudo.utils.serialization.MODULE_FUNCTION robokudo.utils.serialization.NEWARGS robokudo.utils.serialization.NEWARGS_EX robokudo.utils.serialization.OBJECT robokudo.utils.serialization.REDUCE robokudo.utils.serialization.SET robokudo.utils.serialization.STATE robokudo.utils.serialization.TUPLE robokudo.utils.serialization.TYPE robokudo.utils.serialization.FlattenKeys robokudo.utils.serialization.JSON_BACKEND_LIST robokudo.utils.serialization.handler_registry Classes ------- .. autoapisummary:: robokudo.utils.serialization._PlaceholderObject robokudo.utils.serialization.HandlerRegistry robokudo.utils.serialization.Flatten robokudo.utils.serialization.Unflatten robokudo.utils.serialization.IteratorHandler robokudo.utils.serialization.DictSubClassHandler robokudo.utils.serialization.ListSubClassHandler robokudo.utils.serialization.NumpyHandler robokudo.utils.serialization.Open3DPointCloudHandler Functions --------- .. autoapisummary:: robokudo.utils.serialization.get_json_backend robokudo.utils.serialization.is_builtin_function robokudo.utils.serialization.is_builtin_method robokudo.utils.serialization.is_bool robokudo.utils.serialization.is_bytes robokudo.utils.serialization.is_dictionary robokudo.utils.serialization.is_enum robokudo.utils.serialization.is_function robokudo.utils.serialization.is_lambda_function robokudo.utils.serialization.is_list robokudo.utils.serialization.is_method robokudo.utils.serialization.is_module robokudo.utils.serialization.is_number robokudo.utils.serialization.is_none robokudo.utils.serialization.is_set robokudo.utils.serialization.is_string robokudo.utils.serialization.is_tuple robokudo.utils.serialization.is_type robokudo.utils.serialization.is_generic_function robokudo.utils.serialization.is_object robokudo.utils.serialization.is_module_function robokudo.utils.serialization.is_primitive robokudo.utils.serialization.attr_in_dict robokudo.utils.serialization.attr_in_slots robokudo.utils.serialization.has_attr_with_class_filter robokudo.utils.serialization.combine_module_class_name robokudo.utils.serialization.split_module_class_name robokudo.utils.serialization.class_to_module_class_name robokudo.utils.serialization.locate_and_load_module robokudo.utils.serialization.module_class_name_to_class robokudo.utils.serialization.make_object_reference robokudo.utils.serialization.swap_object_reference robokudo.utils.serialization._object_set_attr_with_placeholder robokudo.utils.serialization._object_set_value_with_placeholder robokudo.utils.serialization.make_new_placeholder_reference robokudo.utils.serialization.try_add_value_placeholder_swap robokudo.utils.serialization.set_and_swap_placeholder_with_object robokudo.utils.serialization.flatten robokudo.utils.serialization.encode robokudo.utils.serialization.unflatten robokudo.utils.serialization.decode robokudo.utils.serialization.deepcopy Module Contents --------------- .. py:data:: type_swap_obj .. py:data:: type_set_func .. py:data:: type_placeholders .. py:data:: BYTES :type: str :value: '' .. py:data:: ID :type: str :value: '' .. py:data:: JSON_KEY :type: str :value: ':' .. py:data:: MODULE :type: str :value: '' .. py:data:: MODULE_FUNCTION :type: str :value: '' .. py:data:: NEWARGS :type: str :value: '' .. py:data:: NEWARGS_EX :type: str :value: '' .. py:data:: OBJECT :type: str :value: '' .. py:data:: REDUCE :type: str :value: '' .. py:data:: SET :type: str :value: '' .. py:data:: STATE :type: str :value: '' .. py:data:: TUPLE :type: str :value: '' .. py:data:: TYPE :type: str :value: '' .. py:data:: FlattenKeys :type: typing_extensions.Set[str] .. py:data:: JSON_BACKEND_LIST :type: typing_extensions.List[str] :value: ['ujson', 'json'] .. py:function:: get_json_backend() -> types.ModuleType .. py:function:: is_builtin_function(obj: typing_extensions.Any) -> bool .. py:function:: is_builtin_method(obj: typing_extensions.Any) -> bool .. py:function:: is_bool(obj: typing_extensions.Any) -> bool .. py:function:: is_bytes(obj: typing_extensions.Any) -> bool .. py:function:: is_dictionary(obj: typing_extensions.Any) -> bool .. py:function:: is_enum(obj: typing_extensions.Any) -> bool .. py:function:: is_function(obj: typing_extensions.Any) -> bool .. py:function:: is_lambda_function(obj: typing_extensions.Any) -> bool .. py:function:: is_list(obj: typing_extensions.Any) -> bool .. py:function:: is_method(obj: typing_extensions.Any) -> bool .. py:function:: is_module(obj: typing_extensions.Any) -> bool .. py:function:: is_number(obj: typing_extensions.Any) -> bool .. py:function:: is_none(obj: typing_extensions.Any) -> bool .. py:function:: is_set(obj: typing_extensions.Any) -> bool .. py:function:: is_string(obj: typing_extensions.Any) -> bool .. py:function:: is_tuple(obj: typing_extensions.Any) -> bool .. py:function:: is_type(obj: typing_extensions.Any) -> bool .. py:function:: is_generic_function(obj: typing_extensions.Any) -> bool .. py:function:: is_object(obj: typing_extensions.Any) -> bool .. py:function:: is_module_function(obj: typing_extensions.Any) -> bool .. py:function:: is_primitive(obj: typing_extensions.Any) -> bool .. py:function:: attr_in_dict(obj: object, attr: typing_extensions.Any, default: typing_extensions.Any = None) .. py:function:: attr_in_slots(obj: object, attr: typing_extensions.Any, default: typing_extensions.Any = None) .. py:function:: has_attr_with_class_filter(obj: object, attr: str, class_only: bool = False, exclude_list: typing_extensions.List[type] = None) -> bool .. py:function:: combine_module_class_name(module_name: str, class_name: str) -> str .. py:function:: split_module_class_name(module_class_name: str) -> typing_extensions.List[str] .. py:function:: class_to_module_class_name(cls: type, replacement_names: typing_extensions.Optional[typing_extensions.Dict[str, str]] = None) -> str Returns the combination of the module and fully qualified name of the class. .. py:function:: locate_and_load_module(module_class_name: str, seperator: typing_extensions.Optional[str] = '.') -> type .. py:function:: module_class_name_to_class(module_class_name: str, replacement_names: typing_extensions.Optional[typing_extensions.Dict[str, str]] = None, cache: typing_extensions.Optional[typing_extensions.Dict[str, type]] = None, seperator: typing_extensions.Optional[str] = '.', module_class_seperator: typing_extensions.Optional[str] = '><') -> type Returns the class described via the combined module and fully qualified class name. .. py:function:: make_object_reference(obj: typing_extensions.Any, obj_to_id: typing_extensions.Dict[typing_extensions.Any, int], id_to_obj: typing_extensions.List[typing_extensions.Any]) -> typing_extensions.Tuple[bool, int] .. py:function:: swap_object_reference(old_obj: typing_extensions.Any, new_obj: typing_extensions.Any, obj_to_id: typing_extensions.Dict[typing_extensions.Any, int], id_to_obj: typing_extensions.List[typing_extensions.Any]) -> None .. py:class:: _PlaceholderObject Bases: :py:obj:`object` .. py:attribute:: obj :type: typing_extensions.Any :value: None .. py:function:: _object_set_attr_with_placeholder(obj: object, attr: typing_extensions.Any, placeholder: _PlaceholderObject) -> None .. py:function:: _object_set_value_with_placeholder(obj: typing_extensions.Union[typing_extensions.MutableSequence, typing_extensions.MutableMapping], index: typing_extensions.Any, placeholder: _PlaceholderObject) -> None .. py:function:: make_new_placeholder_reference(obj_to_id: typing_extensions.Dict[typing_extensions.Any, int], id_to_obj: typing_extensions.List[typing_extensions.Any]) -> typing_extensions.Tuple[_PlaceholderObject, bool, int] .. py:function:: try_add_value_placeholder_swap(obj: type_swap_obj, attr: typing_extensions.Any, value: typing_extensions.Any, set_func: type_set_func, placeholders: type_placeholders) -> None .. py:function:: set_and_swap_placeholder_with_object(placeholder: _PlaceholderObject, obj: typing_extensions.Any, obj_to_id: typing_extensions.Dict[typing_extensions.Any, int], id_to_obj: typing_extensions.List[typing_extensions.Any], placeholders: type_placeholders) -> None .. py:class:: HandlerRegistry Bases: :py:obj:`object` .. py:class:: HandlerBase(context) Bases: :py:obj:`abc.ABC` Helper class that provides a standard way to create an ABC using inheritance. .. py:attribute:: context :type: typing_extensions.Union[Flatten, Unflatten] .. py:method:: can_handle(obj_cls: type) -> bool :classmethod: .. py:method:: flatten(obj: object, data: typing_extensions.Dict) -> typing_extensions.Dict :abstractmethod: .. py:method:: unflatten(data: typing_extensions.Dict, obj: typing_extensions.Optional[object]) -> object :abstractmethod: .. py:attribute:: _primary_handlers :type: typing_extensions.Dict[type, HandlerRegistry] .. py:attribute:: _secondary_handlers :type: typing_extensions.Dict[type, HandlerRegistry] .. py:attribute:: _primary_base_handlers :type: typing_extensions.Dict[type, HandlerRegistry] .. py:attribute:: _secondary_base_handlers :type: typing_extensions.Dict[type, HandlerRegistry] .. py:method:: _get_handler_dicts(primary_handler: bool = True) -> typing_extensions.Tuple[typing_extensions.Dict[type, HandlerBase], typing_extensions.Dict[type, HandlerBase]] .. py:method:: get(cls_or_name: typing_extensions.Union[str, type], primary_handler: bool = True, default: typing_extensions.Optional[HandlerBase] = None) -> typing_extensions.Optional[HandlerBase] .. py:method:: register(cls_or_name: typing_extensions.Union[str, type], handler: typing_extensions.Optional[HandlerBase] = None, primary_handler: bool = True, as_normal: bool = True, as_base: bool = False) -> typing_extensions.Optional[typing_extensions.Callable[[HandlerBase], HandlerBase]] .. py:method:: unregister(cls_or_name: typing_extensions.Union[str, type], primary_handler: bool = True) .. py:data:: handler_registry :type: HandlerRegistry .. py:class:: Flatten(max_depth: typing_extensions.Optional[int] = None, json_backend: typing_extensions.Optional[types.ModuleType] = None, bytes_to_base64: bool = True, use_bytes_references: bool = True, use_module_references: bool = True, use_module_function_references: bool = True, use_set_references: bool = True, use_string_references: bool = True, use_tuple_references: bool = True, use_type_references: bool = True, replacement_names: typing_extensions.Optional[typing_extensions.Dict[str, str]] = None) Bases: :py:obj:`object` .. py:attribute:: _depth :type: int :value: 0 .. py:attribute:: max_depth :type: typing_extensions.Optional[int] :value: None .. py:attribute:: json_backend :type: typing_extensions.Optional[types.ModuleType] :value: None .. py:attribute:: bytes_to_base64 :type: bool :value: True .. py:attribute:: use_bytes_references :type: bool :value: True .. py:attribute:: use_module_references :type: bool :value: True .. py:attribute:: use_module_function_references :type: bool :value: True .. py:attribute:: use_set_references :type: bool :value: True .. py:attribute:: use_string_references :type: bool :value: True .. py:attribute:: use_tuple_references :type: bool :value: True .. py:attribute:: use_type_references :type: bool :value: True .. py:attribute:: replacement_names :type: typing_extensions.Optional[typing_extensions.Dict[str, str]] :value: None .. py:attribute:: _obj_to_id :type: typing_extensions.Dict[typing_extensions.Any, int] .. py:attribute:: _id_to_obj :type: typing_extensions.List[typing_extensions.Any] :value: [] .. py:attribute:: _id_stack :type: typing_extensions.List[int] :value: [] .. py:method:: _reset() .. py:method:: _class_to_module_class_name(cls: typing_extensions.Type) -> str .. py:method:: _flatten_bytes(obj: bytes) -> typing_extensions.Dict .. py:method:: _flatten_dict_object(obj: typing_extensions.Dict, data: typing_extensions.Dict) -> typing_extensions.Dict .. py:method:: _flatten_dict(obj: typing_extensions.Dict) -> typing_extensions.Dict .. py:method:: _flatten_id(ref_id) -> typing_extensions.Dict .. py:method:: _flatten_list_object(obj: typing_extensions.Iterable) -> typing_extensions.List .. py:method:: _flatten_list(obj: typing_extensions.List) -> typing_extensions.List .. py:method:: _flatten_module(obj: types.ModuleType) -> typing_extensions.Dict .. py:method:: _flatten_module_function(obj: type) -> typing_extensions.Dict .. py:method:: _flatten_slots_obj(obj: object, data: typing_extensions.Dict) -> typing_extensions.Dict .. py:method:: _flatten_object(obj: object) -> typing_extensions.Dict .. py:method:: _flatten_primitive(obj: typing_extensions.Any) -> typing_extensions.Any .. py:method:: _flatten_set(obj: typing_extensions.Set) -> typing_extensions.Dict .. py:method:: _flatten_tuple(obj: typing_extensions.Tuple) -> typing_extensions.Dict .. py:method:: _flatten_type(obj: type) -> typing_extensions.Dict .. py:method:: _get_flattener(obj: typing_extensions.Any) -> typing_extensions.Tuple[typing_extensions.Callable, bool, bool] .. py:method:: _flatten(obj: typing_extensions.Any) -> typing_extensions.Any .. py:method:: flatten(obj: typing_extensions.Any, pre_reset: bool = True, post_reset: bool = True, post_restore: bool = False) -> typing_extensions.Any .. py:function:: flatten(obj: typing_extensions.Any, max_depth: typing_extensions.Optional[int] = None, json_backend: typing_extensions.Optional[types.ModuleType] = None, bytes_to_base64: bool = True, use_bytes_references: bool = True, use_module_references: bool = True, use_module_function_references: bool = True, use_set_references: bool = True, use_string_references: bool = True, use_tuple_references: bool = True, use_type_references: bool = True, replacement_names: typing_extensions.Optional[typing_extensions.Dict[str, str]] = None) -> typing_extensions.Any .. py:function:: encode(obj: typing_extensions.Any, max_depth: typing_extensions.Optional[int] = None, json_backend: typing_extensions.Optional[types.ModuleType] = None, bytes_to_base64: bool = True, use_bytes_references: bool = True, use_module_references: bool = True, use_module_function_references: bool = True, use_set_references: bool = True, use_string_references: bool = True, use_tuple_references: bool = True, use_type_references: bool = True, replacement_names: typing_extensions.Optional[typing_extensions.Dict[str, str]] = None, *args, **kwargs) -> str .. py:class:: Unflatten(json_backend: typing_extensions.Optional[types.ModuleType] = None, bytes_to_base64: bool = True, use_bytes_references: bool = True, use_module_references: bool = True, use_module_function_references: bool = True, use_set_references: bool = True, use_string_references: bool = True, use_tuple_references: bool = True, use_type_references: bool = True, replacement_names: typing_extensions.Optional[typing_extensions.Dict[str, str]] = None, use_name_to_class_cache: bool = True) Bases: :py:obj:`object` .. py:attribute:: json_backend :type: typing_extensions.Optional[types.ModuleType] :value: None .. py:attribute:: bytes_to_base64 :type: bool :value: True .. py:attribute:: use_bytes_references :type: bool :value: True .. py:attribute:: use_module_references :type: bool :value: True .. py:attribute:: use_module_function_references :type: bool :value: True .. py:attribute:: use_set_references :type: bool :value: True .. py:attribute:: use_string_references :type: bool :value: True .. py:attribute:: use_tuple_references :type: bool :value: True .. py:attribute:: use_type_references :type: bool :value: True .. py:attribute:: replacement_names :type: typing_extensions.Optional[typing_extensions.Dict[str, str]] :value: None .. py:attribute:: _name_to_class :type: typing_extensions.Optional[typing_extensions.Dict[str, str]] .. py:attribute:: _obj_to_id :type: typing_extensions.Dict[typing_extensions.Any, int] .. py:attribute:: _id_to_obj :type: typing_extensions.List[typing_extensions.Any] :value: [] .. py:attribute:: _placeholders :type: type_placeholders .. py:method:: _reset() .. py:method:: _module_class_name_to_class(module_class_name: str, is_module_only: bool = False) -> type .. py:method:: _make_object_reference(obj: typing_extensions.Any) -> typing_extensions.Tuple[bool, int] .. py:method:: _make_new_placeholder_reference() -> typing_extensions.Tuple[_PlaceholderObject, bool, int] .. py:method:: _set_and_swap_placeholder_with_object(placeholder: _PlaceholderObject, obj: typing_extensions.Any) -> None .. py:method:: _try_add_value_placeholder_swap(obj: type_swap_obj, attr: typing_extensions.Any, value: typing_extensions.Any, set_func: type_set_func) -> None .. py:method:: _unflatten_bytes(data: typing_extensions.Dict) -> bytes .. py:method:: _unflatten_dict_object(data: typing_extensions.Dict, obj: object, use_setattr: bool) -> object .. py:method:: _unflatten_dict(data: typing_extensions.Dict) -> typing_extensions.Dict .. py:method:: _unflatten_id(data: typing_extensions.Dict) -> typing_extensions.Any .. py:method:: _unflatten_list_object(data, obj) .. py:method:: _unflatten_list(data: typing_extensions.List) -> typing_extensions.List .. py:method:: _unflatten_module(data: typing_extensions.Dict) -> types.ModuleType .. py:method:: _unflatten_module_function(data: typing_extensions.Dict) -> type .. py:method:: _unflatten_object(data: typing_extensions.Dict) -> object .. py:method:: _unflatten_reduce(data: typing_extensions.Dict) -> object .. py:method:: _unflatten_set(data: typing_extensions.Dict) -> typing_extensions.Set .. py:method:: _unflatten_tuple(data: typing_extensions.Dict) -> typing_extensions.Tuple .. py:method:: _unflatten_type(data: typing_extensions.Dict) -> type .. py:method:: _unflatten(data: typing_extensions.Any) -> typing_extensions.Any .. py:method:: unflatten(data: typing_extensions.Any, pre_reset: bool = True, post_reset: bool = True, post_restore: bool = False) -> typing_extensions.Any .. py:function:: unflatten(data: typing_extensions.Any, json_backend: typing_extensions.Optional[types.ModuleType] = None, bytes_to_base64: bool = True, use_bytes_references: bool = True, use_module_references: bool = True, use_module_function_references: bool = True, use_set_references: bool = True, use_string_references: bool = True, use_tuple_references: bool = True, use_type_references: bool = True, replacement_names: typing_extensions.Optional[typing_extensions.Dict[str, str]] = None, use_name_to_class_cache: bool = True) -> typing_extensions.Any .. py:function:: decode(data: str, json_backend: typing_extensions.Optional[types.ModuleType] = None, bytes_to_base64: bool = True, use_bytes_references: bool = True, use_module_references: bool = True, use_module_function_references: bool = True, use_set_references: bool = True, use_string_references: bool = True, use_tuple_references: bool = True, use_type_references: bool = True, replacement_names: typing_extensions.Optional[typing_extensions.Dict[str, str]] = None, use_name_to_class_cache: bool = True, *args, **kwargs) -> typing_extensions.Any .. py:function:: deepcopy(obj: typing_extensions.Any, max_depth: typing_extensions.Optional[int] = None, json_backend: typing_extensions.Optional[types.ModuleType] = None, bytes_to_base64: bool = True, use_bytes_references: bool = True, use_module_references: bool = True, use_module_function_references: bool = True, use_set_references: bool = True, use_string_references: bool = True, use_tuple_references: bool = True, use_type_references: bool = True, use_name_to_class_cache: bool = True, *args, **kwargs) -> typing_extensions.Any .. py:class:: IteratorHandler(context) Bases: :py:obj:`HandlerRegistry` Helper class that provides a standard way to create an ABC using inheritance. .. py:class:: DummyIterator Bases: :py:obj:`object` .. py:attribute:: max_num_iter :type: typing_extensions.Optional[int] :value: None .. py:method:: flatten(obj: typing_extensions.Iterator, data: typing_extensions.Dict) -> typing_extensions.Dict .. py:method:: unflatten(data: typing_extensions.Dict, obj: typing_extensions.Optional) -> collections.abc.Iterator .. py:class:: DictSubClassHandler(context) Bases: :py:obj:`HandlerRegistry` Helper class that provides a standard way to create an ABC using inheritance. .. py:method:: flatten(obj: typing_extensions.Dict, data: typing_extensions.Dict) -> typing_extensions.Dict .. py:method:: unflatten(data: typing_extensions.Dict, obj: typing_extensions.Optional[object]) -> typing_extensions.Dict .. py:class:: ListSubClassHandler(context) Bases: :py:obj:`HandlerRegistry` Helper class that provides a standard way to create an ABC using inheritance. .. py:method:: flatten(obj: typing_extensions.List, data: typing_extensions.Dict) -> typing_extensions.Dict .. py:method:: unflatten(data: typing_extensions.Dict, obj: typing_extensions.Optional[typing_extensions.List]) -> typing_extensions.List .. py:class:: NumpyHandler(context) Bases: :py:obj:`HandlerRegistry` Helper class that provides a standard way to create an ABC using inheritance. .. py:method:: flatten(obj: typing_extensions.Union[numpy.ndarray, numpy.generic], data: typing_extensions.Dict) -> typing_extensions.Dict .. py:method:: unflatten(data: typing_extensions.Dict, obj: typing_extensions.Optional) -> typing_extensions.Union[numpy.ndarray, numpy.generic] .. py:class:: Open3DPointCloudHandler(context) Bases: :py:obj:`HandlerRegistry` Helper class that provides a standard way to create an ABC using inheritance. .. py:method:: flatten(obj: open3d.geometry.PointCloud, data: typing_extensions.Dict) -> typing_extensions.Dict .. py:method:: unflatten(data: typing_extensions.Dict, obj: typing_extensions.Optional) -> open3d.geometry.PointCloud