Исходный код soniks_client.observation_files
"""Имена и раскладка файлов одного наблюдения.
Все имена строятся по ``OBSERVATION__FILENAME_TEMPLATE`` из префикса,
идентификатора наблюдения, отметки времени и расширения."""
from dataclasses import dataclass
from pathlib import Path
from core.configs import settings
[документация]
@dataclass(frozen=True)
class ObservationFiles:
"""Пути файлов одного прохода."""
directory: Path
payload_ogg: str
waterfall_raw: str
waterfall_png: str
decoded_data_prefix: str
metadata_json: str
[документация]
def create_observation_files(
observation_id: str,
timestamp: str,
mode: str,
) -> ObservationFiles:
"""Создать директорию наблюдения и собрать пути его файлов."""
directory = settings.paths.output_path / observation_id
directory.mkdir(parents=True, exist_ok=True)
def name(prefix: str, extension: str) -> str:
return settings.observation.FILENAME_TEMPLATE.format(
observation_dir=directory,
prefix=prefix,
observation_id=observation_id,
timestamp=timestamp,
extension=extension,
)
# Обычные режимы пишут пачку кадров, поэтому графу передаётся префикс
# без отметки времени и расширения — имена файлов он достраивает сам.
decoded_data_prefix = (
f"{directory}/{settings.observation.prefix.DATA}_{observation_id}"
)
# APT — исключение: декодер отдаёт одно изображение, и здесь нужен уже
# готовый путь файла, а не префикс.
if mode == "APT":
decoded_data_prefix = name(
settings.observation.prefix.DATA,
settings.observation.extension.DATA_APT,
)
return ObservationFiles(
directory=directory,
payload_ogg=name(
settings.observation.prefix.PAYLOAD,
settings.observation.extension.PAYLOAD,
),
waterfall_raw=name(
settings.observation.prefix.RAW_WATERFALL,
settings.observation.extension.RAW_WATERFALL,
),
waterfall_png=name(
settings.observation.prefix.WATERFALL,
settings.observation.extension.WATERFALL,
),
decoded_data_prefix=decoded_data_prefix,
metadata_json=name(
settings.observation.prefix.METADATA,
settings.observation.extension.METADATA,
),
)