Исходный код soniks_client.jobs.file_manager.read_files

"""Чтение файлов наблюдения в структуру для выгрузки на портал."""

import base64
import json
from pathlib import Path

from core.configs import settings
from core.types import DataToSend


[документация] def add_payload_to_sending_data(file_path: Path) -> DataToSend: """Прочитать аудиозапись прохода для выгрузки.""" with open(file_path, "rb") as data: return {settings.observation.sending_key.PAYLOAD: data.read()}
[документация] def add_waterfall_to_sending_data(file_path: Path) -> DataToSend: """Прочитать изображение водопада для выгрузки.""" with open(file_path, "rb") as data: return {settings.observation.sending_key.WATERFALL: data.read()}
[документация] def add_metadata_to_sending_data(file_path: Path) -> DataToSend: """Прочитать метаданные наблюдения для выгрузки. Читается байтами, а не текстом: обрезанный файл (кончилось место) уедет на портал как есть, а не упадёт с ``UnicodeDecodeError`` мимо очереди. """ with open(file_path, "rb") as data: return {settings.observation.sending_key.CLIENT_METADATA: data.read()}
[документация] def add_demoddata_to_sending_data(file_path: Path) -> DataToSend: """Прочитать декодированный кадр для выгрузки. Из JSON берётся поле ``pdu`` в base64; если разобрать не удалось, файл отправляется как есть. """ try: with open(file_path, encoding="utf-8") as json_file: data = json.load(json_file) decoded_pdu = base64.b64decode(data["pdu"]) return {settings.observation.sending_key.DEMODDATA: decoded_pdu} # KeyError — в JSON нет поля ``pdu``; TypeError — оно есть, но равно null. except (json.JSONDecodeError, ValueError, KeyError, TypeError): with open(file_path, "rb") as binary_file: return {settings.observation.sending_key.DEMODDATA: binary_file.read()}