def _invoke_processors(self, tag_name, raw, data, many): for attr_name in self.__processors__[(tag_name, raw)]: # This will be a bound method. processor = getattr(self, attr_name) # It's probably not worth the extra LoC to hoist this branch out of # the loop. if raw: data = utils.if_none(processor(data, many), data) elif many: data = [utils.if_none(processor(item), item) for item in data] else: data = utils.if_none(processor(data), data) return data
def _invoke_processors(self, tag_name, pass_many, data, many, original_data=None): for attr_name in self.__processors__[(tag_name, pass_many)]: # This will be a bound method. processor = getattr(self, attr_name) processor_kwargs = processor.__marshmallow_kwargs__[(tag_name, pass_many)] pass_original = processor_kwargs.get('pass_original', False) if pass_many: if pass_original: data = utils.if_none(processor(data, many, original_data), data) else: data = utils.if_none(processor(data, many), data) elif many: if pass_original: data = [utils.if_none(processor(item, original_data), item) for item in data] else: data = [utils.if_none(processor(item), item) for item in data] else: if pass_original: data = utils.if_none(processor(data, original_data), data) else: data = utils.if_none(processor(data), data) return data
async def _async_invoke_processors(self, tag_name, pass_many, data, many, original_data=None): """make processors async the processors: `async_pre_load`, `async_post_load` `async_pre_dump`, `async_post_dump` (to do) """ for attr_name in self.__processors__[(tag_name, pass_many)]: # This will be a bound method. processor = getattr(self, attr_name) processor_kwargs = processor.__marshmallow_kwargs__[(tag_name, pass_many)] pass_original = processor_kwargs.get('pass_original', False) if pass_many: if pass_original: data = utils.if_none( await processor(data, many, original_data), data) else: data = utils.if_none(await processor(data, many), data) elif many: if pass_original: data = [ utils.if_none(await processor(item, original_data), item) for item in data ] else: data = [ utils.if_none(await processor(item), item) for item in data ] else: if pass_original: data = utils.if_none(await processor(data, original_data), data) else: data = utils.if_none(await processor(data), data) return data