"""Protocol клиента Nova Poshta — позволяет подменять реализацию в тестах. См. `StubNovaPoshtaClient`. """ from __future__ import annotations from typing import Protocol from app.schemas.tracking import TrackingStatusOut class NovaPoshtaError(Exception): """NP API ответил `success: false` (см. поле `errors` в ответе).""" class NovaPoshtaClient(Protocol): """Ключ API передаётся в каждый вызов: у каждой кассы свой кабинет отправителя.""" async def get_statuses( self, *, api_key: str, waybill_numbers: list[str] ) -> list[TrackingStatusOut]: ...