from py_image_manipulation.effect import ImageEffect import functools import numpy as np from typing import Type @functools.lru_cache(maxsize=None) def get_filters() -> dict: return {x.__name__: x for x in ImageEffect.__subclasses__()} def get_filter(name: str) -> Type[ImageEffect]: return get_filters()[name] def apply_filter(name: str, image: np.ndarray) -> np.ndarray: filter = get_filter(name) return filter.apply(image)