Spaces:
Sleeping
Sleeping
| from functools import wraps | |
| import inspect | |
| class FilterRegistry: | |
| """Registry để quản lý các bộ lọc và tham số của chúng""" | |
| def __init__(self): | |
| self.filters = {} | |
| self.params_map = {} | |
| def register(self, name, defaults=None, min_vals=None, max_vals=None, step_vals=None): | |
| """ | |
| Decorator để đăng ký một bộ lọc | |
| Args: | |
| name: Tên bộ lọc | |
| defaults: Giá trị mặc định cho các tham số | |
| min_vals: Giá trị tối thiểu cho các tham số | |
| max_vals: Giá trị tối đa cho các tham số | |
| step_vals: Bước nhảy cho các tham số | |
| """ | |
| 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() |