in pyignite/datatypes/internal.py [0:0]
def map_python_type(cls, value):
if cls._python_map is None or cls._python_array_map is None:
cls._init_python_mapping()
value_type = type(value)
if value_type in cls._python_map:
return cls._python_map[value_type]
if is_iterable(value) and value_type not in (str, bytearray, bytes):
value_subtype = cls.get_subtype(value)
if value_subtype in cls._python_array_map:
return cls._python_array_map[value_subtype]
# a little heuristics (order is important)
if all([
value_subtype is None,
len(value) == 2,
isinstance(value[0], int),
isinstance(value[1], dict),
]):
return cls._map_obj_type
if all([
value_subtype is None,
len(value) == 2,
isinstance(value[0], int),
is_iterable(value[1]),
]):
return cls._collection_obj_type
# no default for ObjectArrayObject, sorry
raise TypeError(
'Type `array of {}` is invalid'.format(value_subtype)
)
if is_binary(value):
return cls._binary_obj_type
raise TypeError(
'Type `{}` is invalid.'.format(value_type)
)