File size: 784 Bytes
4bb69b3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
from functools import wraps
import inspect

class FilterRegistry:
    def __init__(self):
        self.filters = {}
        self.params_map = {}

    def register(self, name, **defaults):
        def decorator(func):
            self.filters[name] = func
            sig = inspect.signature(func)
            params = {}
            for param in sig.parameters.values():
                if param.name == 'image':
                    continue
                params[param.name] = {
                    'type': param.annotation,
                    'default': param.default if param.default != inspect.Parameter.empty else defaults.get(param.name)
                }
            self.params_map[name] = params
            return func
        return decorator

registry = FilterRegistry()