in aliyun/log/etl_core/trans_comp/trans_lookup.py [0:0]
def __call__(self, event, inpt):
inpt = self._u(inpt)
if isinstance(self.data, DefaultDict):
# simple dict mode
if isinstance(inpt, (six.binary_type, six.text_type)):
inpt = [inpt]
if isinstance(inpt, Iterable):
for i in inpt:
if not isinstance(i, (six.binary_type, six.text_type)):
logger.error(u'trans_comp_lookup: type of input field "{0}" is unknown'.format(i))
continue
if i not in event:
logger.info(u'trans_comp_lookup: event "{0}" doesn not contain field "{1}"'.format(event, i))
continue
# get input value
f_v = event[i]
# set output value
for f_n in self.output_fields:
if f_v in self.data:
self.set(event, f_n, self.data[f_v])
else:
logger.info(u'trans_comp_lookup: value {0} not exit in lookup {1}'.format(f_v, self.data))
else:
logger.error(u"trans_comp_lookup: unknown type of input field {0}".format(inpt))
else:
# lookup type
if isinstance(inpt, (six.binary_type, six.text_type)):
inpt = [inpt]
if isinstance(inpt, Iterable):
inpt_map = {}
for i in inpt:
if not isinstance(i, (six.binary_type, six.text_type, list, tuple)):
logger.error(u'trans_comp_lookup: type of input field "{0}" is unknown'.format(i))
# must exit, or else skip it for lookup type
return event
if isinstance(i, (tuple, list)) and len(i) != 2:
logger.error(u'trans_comp_lookup: type of input field "{0}" is unsupported'.format(i))
# must exit, or else skip it for lookup type
return event
if isinstance(i, (six.binary_type, six.text_type)):
i = (i, i)
if i[0] not in event:
logger.info(u'trans_comp_lookup: event "{0}" doesn not contain field "{1}"'.format(event, i[0]))
# must exit, or else skip it for lookup type
return event
inpt_map[i[1]] = event[i[0]]
row = self.data.get_row(inpt_map)
if row is None:
logger.info(
u'trans_comp_lookup: cannot find proper value for inpt "{0}" in event "{0}" doesn not contain field "{1}"'.format(
inpt_map, event))
return event
for f, f_new in six.iteritems(self.output_fields):
if f in row:
self.set(event, f_new, row[f])
else:
logger.info(u"trans_comp_lookup: field {0} doesn't exit in lookup row {1}".format(f, row))
else:
logger.error(u"trans_comp_lookup: unknown type of input field {0}".format(inpt))
return event