Исходный код 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, ), )