Files
ImageUtils/.CondaPkg/env/lib/python3.11/site-packages/jsons/serializers/default_tuple.py
2023-03-18 20:03:34 +07:00

42 lines
1.4 KiB
Python

from typing import Union, Optional, Tuple
from typish import get_args
from jsons._compatibility_impl import tuple_with_ellipsis
from jsons._dump_impl import dump
from jsons.serializers.default_iterable import default_iterable_serializer
def default_tuple_serializer(obj: tuple,
cls: Optional[type] = None,
**kwargs) -> Union[list, dict]:
"""
Serialize the given ``obj`` to a list of serialized objects.
:param obj: the tuple that is to be serialized.
:param cls: the type of the ``obj``.
:param kwargs: any keyword arguments that may be given to the serialization
process.
:return: a list of which all elements are serialized.
"""
if hasattr(obj, '_fields'):
return default_namedtuple_serializer(obj, **kwargs)
cls_ = cls
if cls and tuple_with_ellipsis(cls):
cls_ = Tuple[(get_args(cls)[0],) * len(obj)]
return default_iterable_serializer(obj, cls_, **kwargs)
def default_namedtuple_serializer(obj: tuple, **kwargs) -> dict:
"""
Serialize the given ``obj`` to a dict of serialized objects.
:param obj: the named tuple that is to be serialized.
:param kwargs: any keyword arguments that may be given to the serialization
process.
:return: a dict of which all elements are serialized.
"""
result = {field_name: dump(getattr(obj, field_name), **kwargs)
for field_name in obj._fields}
return result