Source code for poly_lithic.src.transformers.CompoundTransformer
# defines a compound transformer that can be used add multiple transformers together
import time
from poly_lithic.src.logging_utils.make_logger import get_logger
from poly_lithic.src.transformers import registered_transformers
from poly_lithic.src.transformers.BaseTransformer import BaseTransformer
logger = get_logger()
# config4 = {
# "transformers": {
# "transformer_1": {"type": "SimpleTransformer", "config": config2},
# "transformer_2": {"type": "CAImageTransfomer", "config": config3},
# }
# }
[docs]
class CompoundTransformer(BaseTransformer):
def __init__(self, config):
logger.debug('Initializing CompoundTransformer')
self.transformers = []
self.latest_input = {}
self.latest_transformed = {}
self.input_list = []
for transformer in config['transformers']:
# print(transformer, config["transformers"][transformer])
transformer_type = config['transformers'][transformer]['type']
transformer_config = config['transformers'][transformer]['config']
self.transformers.append(
registered_transformers[transformer_type](transformer_config)
)
self.input_list += self.transformers[-1].input_list
# merge dicts
self.latest_transformed = {
**self.latest_transformed,
**self.transformers[-1].latest_transformed,
}
self.latest_input = {
**self.latest_input,
**self.transformers[-1].latest_input,
}
self.updated = False
self.handler_time = 0
[docs]
def transform(self, data):
for transformer in self.transformers:
data = transformer.transform(data)
return data
[docs]
def handler(self, name, data):
time_start = time.time()
logger.debug(f'CompoundTransformer handler for {name}')
for transformer in self.transformers:
if name in transformer.input_list:
transformer.handler(name, data)
if transformer.updated:
self.updated = True
self.latest_transformed = {
**self.latest_transformed,
**transformer.latest_transformed,
}
self.latest_input = {
**self.latest_input,
**transformer.latest_input,
}
time_end = time.time()
self.handler_time = time_end - time_start