File size: 1,216 Bytes
4bb69b3
 
 
 
 
 
 
 
4c61c0c
 
 
 
 
 
 
 
 
4bb69b3
 
 
 
 
 
 
 
 
4c61c0c
 
 
 
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
26
27
28
29
30
31
32
33
34
35
36
from functools import wraps
import inspect

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

    def register(self, name, defaults=None, min_vals=None, max_vals=None, step_vals=None):
        if defaults is None:
            defaults = {}
        if min_vals is None:
            min_vals = {}
        if max_vals is None:
            max_vals = {}
        if step_vals is None:
            step_vals = {}
        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),
                    'min': min_vals.get(param.name),
                    'max': max_vals.get(param.name),
                    'step': step_vals.get(param.name)
                }
            self.params_map[name] = params
            return func
        return decorator

registry = FilterRegistry()