deserialize.py 文件源码

python
阅读 27 收藏 0 点赞 0 评论 0

项目:nirum-python 作者: spoqa 项目源码 文件源码
def deserialize_meta(cls, data):
    t = getattr(cls, '__nirum_type__', None)
    if t == 'union' or hasattr(cls, '__nirum_tag__') or hasattr(cls, 'Tag'):
        d = deserialize_union_type(cls, data)
    elif t == 'record' or hasattr(cls, '__nirum_record_behind_name__'):
        d = deserialize_record_type(cls, data)
    elif (t == 'unboxed' or hasattr(cls, '__nirum_get_inner_type__') or
          hasattr(cls, '__nirum_inner_type__')):
        d = deserialize_unboxed_type(cls, data)
    elif type(cls) is typing.TupleMeta:
        # typing.Tuple dosen't have either `__origin__` and `__args__`
        # so it have to be handled special case.
        d = deserialize_tuple_type(cls, data)
    elif is_support_abstract_type(cls):
        d = deserialize_abstract_type(cls, data)
    elif is_union_type(cls):
        d = deserialize_optional(cls, data)
    elif callable(cls) and cls in _NIRUM_PRIMITIVE_TYPE:
        d = deserialize_primitive(cls, data)
    elif isinstance(cls, enum.EnumMeta):
        d = cls(data)
    else:
        raise TypeError('data is not deserializable: {!r} as {!r}'.format(
            data, cls
        ))
    return d
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号