/
liquid-g
/
liquid-code
Обзор
Документация
Войти
/
liquid-g
/
liquid-code
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
develop-0.4
src/liquidcode/validation_decorator.py
47 строк
2 KB
User
0.3.0-RC - Добавлена система валидации (Validator, базовые валидаторы, интеграция с ArgumentResolver, генератор `make:validator`)
04 июл 2026, 13:30
04 июл 2026, 13:30
6b33e13
Код
Авторство
О чём код?
""" Декоратор для валидации параметров контроллера. """ from functools import wraps from typing import Dict, List from .validation import validate_or_raise, Constraint, ValidationError def validate_request(constraints: Dict[str, List[Constraint]]): """ Декоратор для валидации данных запроса (тела или query). Пример: @validate_request({ 'email': [Required(), Email()], 'age': [Required(), Min(18)], }) def create_user(self, request: Request, data: dict): # data уже валидирована return {'user': data} """ def decorator(func): @wraps(func) def wrapper(self, *args, **kwargs): # Ищем параметр 'data' или 'request' if 'data' in kwargs: data = kwargs['data'] if isinstance(data, dict): validate_or_raise(data, constraints) elif 'request' in kwargs and hasattr(kwargs['request'], 'get_body'): # Для запросов с JSON-телом try: import json body = kwargs['request'].get_body() data = json.loads(body.decode('utf-8')) validate_or_raise(data, constraints) kwargs['data'] = data except json.JSONDecodeError: raise ValidationError({'body': ['Invalid JSON']}) return func(self, *args, **kwargs) return wrapper return decorator