# dispatcher

# demo1

from loguru import logger


class Dispatcher(metaclass=DispatcherMeta):
    def __init__(self, dispatcher_name):
        self.dispatcher_name = dispatcher_name
        self.dispatcher_func = {}

    def register(self, name):
        def wrapper(func):
            logger.debug(f'func: {func.__name__} register to {self.dispatcher_name}')
            self.dispatcher_func[name] = func
            return self
        return wrapper

    def __call__(self, filename):
        logger.debug(f'call {self.dispatcher_name}')
        suffix = filename.split('.')[-1]
        if suffix in self.dispatcher_func:
            self.dispatcher_func[suffix](filename)
        else:
            logger.error(f'not support {suffix} file type')
            raise NotImplementedError(f'not support {suffix} file type')


dis = Dispatcher('dis')


@dis.register('csv')
def csv_handler(*args, **kwargs):
    logger.info('csv_handler')

@dis.register('json')
def json_handler(*args, **kwargs):
    logger.info('json_handler')


dis("1.csv")