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

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

from collections import defaultdict
from pathlib import Path

from core.configs import logger, settings
from core.types import FilePathsToSend


[документация] def get_paths_observation_files(observation_id: str) -> tuple[Path, FilePathsToSend]: """Собрать пути непустых файлов наблюдения, сгруппировав их по префиксу. Returns: Директория наблюдения и словарь «префикс — список путей». """ output_path = settings.paths.output_path observation_dir_path = output_path / observation_id prefixes_of_files = ( settings.observation.get_prefixes_of_files_available_for_upload() ) file_paths = _collect_file_paths_by_prefix( observation_dir_path, prefixes_of_files, ) return observation_dir_path, file_paths
def _collect_file_paths_by_prefix( observation_dir_path: Path, prefixes: list[str], ) -> FilePathsToSend: prefix_files = defaultdict(list) for prefix in prefixes: pattern = f"{prefix}*" for file_path in observation_dir_path.glob(pattern): if not file_path.is_file(): logger.info("Путь: %s не является файлом", file_path) continue try: if file_path.stat().st_size == 0: continue except OSError as e: logger.info("Не удалось получить размер файла %s: %s", file_path, e) continue prefix_files[prefix].append(file_path) return prefix_files