Source code for jina.executors.crafters

__copyright__ = "Copyright (c) 2020 Jina AI Limited. All rights reserved."
__license__ = "Apache-2.0"

import inspect
from typing import Dict, Union, List

from .. import BaseExecutor
from ...helper import typename


[docs]class BaseCrafter(BaseExecutor): """ A :class:`BaseCrafter` transforms the content of `Document`. It can be used for preprocessing, segmenting etc. It is an interface for Crafters which is a family of executors intended to apply transformations to single documents. The apply function is :func:`craft`, where the name of the arguments will be used as keys of the content. :param args: Additional positional arguments which are just used for the parent initialization :param kwargs: Additional keyword arguments which are just used for the parent initialization """ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.required_keys = [ k for k in inspect.getfullargspec(self.craft).args if k != 'self' ] if not self.required_keys: self.required_keys = [ k for k in inspect.getfullargspec(inspect.unwrap(self.craft)).args if k != 'self' ] if not self.required_keys: self.logger.warning( f'{typename(self)} works on keys, but no keys are specified' )
[docs] def craft(self, *args, **kwargs) -> Union[List[Dict], Dict]: """ Apply function of this executor. The name of the arguments are used as keys, which are then used to tell :class:`Driver` what information to extract from the protobuf request accordingly. The name of the arguments should be always valid keys defined in the protobuf. :param args: Extra variable length arguments :param kwargs: Extra variable keyword arguments """ raise NotImplementedError