in pulsar/schema/definition.py [0:0]
def __init__(self, default=None, required_default=False, required=False, *args, **kwargs):
self._required_default = required_default
self._default = default
self._required = required
for k, value in self._fields.items():
if k in kwargs:
if isinstance(value, Record) and isinstance(kwargs[k], dict):
# Use dict init Record object
copied = copy.copy(value)
copied.__init__(**kwargs[k])
self.__setattr__(k, copied)
elif isinstance(value, Array) and isinstance(kwargs[k], list) and len(kwargs[k]) > 0 \
and isinstance(value.array_type, Record) and isinstance(kwargs[k][0], dict):
arr = []
for item in kwargs[k]:
copied = copy.copy(value.array_type)
copied.__init__(**item)
arr.append(copied)
self.__setattr__(k, arr)
elif isinstance(value, Map) and isinstance(kwargs[k], dict) and len(kwargs[k]) > 0 \
and isinstance(value.value_type, Record) and isinstance(list(kwargs[k].values())[0], dict):
dic = {}
for mapKey, mapValue in kwargs[k].items():
copied = copy.copy(value.value_type)
copied.__init__(**mapValue)
dic[mapKey] = copied
self.__setattr__(k, dic)
else:
# Value was overridden at constructor
self.__setattr__(k, kwargs[k])
elif isinstance(value, Record):
# Value is a subrecord
self.__setattr__(k, value)
else:
# Set field to default value, without revalidating the default value type
super(Record, self).__setattr__(k, value.default())