in sdap/processors/processorchain.py [0:0]
def __init__(self, processor_list, *args, **kwargs):
super().__init__(*args, **kwargs)
self.processors = []
# Attempt to construct the needed processors
for processor in processor_list:
try:
processor_constructor = sdap.processors.INSTALLED_PROCESSORS[processor['name']]
except KeyError as e:
raise ProcessorNotFound(processor['name']) from e
processor_config = dict(**processor['config'])
missing_args = []
for arg in inspect.signature(processor_constructor).parameters.keys():
if arg in ['args', 'kwargs']:
continue
if arg not in processor_config:
missing_args.append(arg)
# Need to check for list type args
list_pattern = re.compile('\.\d+$')
list_args = [k for k in processor_config if list_pattern.search(k)]
if list_args:
import itertools
grouped = itertools.groupby(list_args, key=lambda k: k.split('.')[0])
for group, grouped_args in grouped:
for list_arg in grouped_args:
key, idx = list_arg.split('.')
if group not in processor_config:
processor_config[group] = []
processor_config[group].insert(int(idx), processor_config[list_arg])
del(processor_config[list_arg])
# Check if the list args satisfied the
missing_args = list(filter(lambda a: a not in processor_config.keys(), missing_args))
if missing_args:
raise MissingProcessorArguments(processor['name'], missing_args)
if 'config' in processor.keys():
processor_instance = processor_constructor(**processor_config)
else:
processor_instance = processor_constructor()
self.processors.append(processor_instance)