from abc import ABC, abstractmethod from typing import Optional from models.results import FrameResult, FlightResults, RefinedFrameResult from models.core import GPSPoint class ResultManagerBase(ABC): @abstractmethod async def save_frame_result( self, flight_id: str, result: FrameResult ) -> bool: pass @abstractmethod async def get_frame_result( self, flight_id: str, frame_id: int ) -> Optional[FrameResult]: pass @abstractmethod async def get_flight_results(self, flight_id: str) -> FlightResults: pass @abstractmethod async def update_refined_result( self, flight_id: str, result: RefinedFrameResult ) -> bool: pass @abstractmethod async def get_object_gps( self, flight_id: str, frame_id: int, pixel: tuple[float, float], ) -> GPSPoint: pass @abstractmethod async def export_results( self, flight_id: str, format: str = "json" ) -> bytes: pass @abstractmethod async def get_statistics(self, flight_id: str) -> dict: pass