51 lines
1.8 KiB
Python
51 lines
1.8 KiB
Python
# app/src/trading/decision/validation.py
|
|
|
|
from __future__ import annotations
|
|
|
|
from src.trading.market_intelligence.common.models import CoordinatorResult
|
|
from src.trading.decision.exceptions import (
|
|
TradingValidationError,
|
|
)
|
|
|
|
|
|
class TradingValidation:
|
|
"""Проверка входного CoordinatorResult для Trading Layer."""
|
|
|
|
def validate(
|
|
self,
|
|
coordinator_result: CoordinatorResult,
|
|
) -> None:
|
|
"""Проверить CoordinatorResult перед принятием торгового решения."""
|
|
self._validate_result_exists(coordinator_result)
|
|
self._validate_result_usable(coordinator_result)
|
|
self._validate_result_has_no_errors(coordinator_result)
|
|
|
|
def _validate_result_exists(
|
|
self,
|
|
coordinator_result: CoordinatorResult,
|
|
) -> None:
|
|
"""Проверить, что CoordinatorResult передан."""
|
|
if coordinator_result is None:
|
|
raise TradingValidationError(
|
|
"CoordinatorResult is required for Trading."
|
|
)
|
|
|
|
def _validate_result_usable(
|
|
self,
|
|
coordinator_result: CoordinatorResult,
|
|
) -> None:
|
|
"""Проверить пригодность CoordinatorResult для принятия решения."""
|
|
if not coordinator_result.is_usable:
|
|
raise TradingValidationError(
|
|
"CoordinatorResult is not usable."
|
|
)
|
|
|
|
def _validate_result_has_no_errors(
|
|
self,
|
|
coordinator_result: CoordinatorResult,
|
|
) -> None:
|
|
"""Проверить отсутствие критических ошибок Coordinator."""
|
|
if coordinator_result.has_errors:
|
|
raise TradingValidationError(
|
|
"CoordinatorResult contains errors."
|
|
) |