2026-05-07 17:15:56 +03:00
|
|
|
from dataclasses import dataclass, field
|
|
|
|
|
from datetime import datetime
|
|
|
|
|
from pathlib import Path
|
|
|
|
|
from typing import List, Optional
|
|
|
|
|
from models.astro_object import AstroObject
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@dataclass
|
|
|
|
|
class Session:
|
|
|
|
|
"""Модель сессии наблюдения"""
|
|
|
|
|
camera: str
|
|
|
|
|
optics: str
|
|
|
|
|
start_time: datetime
|
|
|
|
|
end_time: Optional[datetime] = None
|
|
|
|
|
objects: List[AstroObject] = field(default_factory=list)
|
|
|
|
|
session_folder: Optional[Path] = None
|
|
|
|
|
|
|
|
|
|
def add_object(self, astro_object: AstroObject):
|
|
|
|
|
self.objects.append(astro_object)
|
|
|
|
|
|
|
|
|
|
def get_current_object(self) -> Optional[AstroObject]:
|
|
|
|
|
return self.objects[-1] if self.objects else None
|
|
|
|
|
|
|
|
|
|
def get_session_name(self) -> str:
|
|
|
|
|
return f"AstroSession_{self.start_time.strftime('%Y-%m-%d')}"
|
|
|
|
|
|
|
|
|
|
def finish(self):
|
|
|
|
|
self.end_time = datetime.now()
|
|
|
|
|
|
|
|
|
|
def is_active(self) -> bool:
|
|
|
|
|
return self.end_time is None
|