models\export_reports_model.py
"""
Модели websocket-сообщений формирования отчётов (фактический протокол с бэка).
ExportReportsCommandRequest — запрос на формирование
ReportDataExportedNotification — пуш о готовности (заменяет readyForUploadingFiles из старых контрактов)
"""
from __future__ import annotations
from dataclasses import dataclass
from typing import Any, Dict, List, Optional
from uuid import UUID
from constants.enums import ExportStatus, ExportedDataType
EXPORT_REPORTS_COMMAND_REQUEST = "ExportReportsCommandRequest"
REPORT_DATA_EXPORTED_NOTIFICATION = "ReportDataExportedNotification"
@dataclass
class ReplyErrors:
reason: str
errorType: Optional[str] = None
location: Optional[str] = None
@dataclass
class ExportReportsCommandRequest:
"""Запрос на формирование отчёта."""
tuId: int
exportedDataTypes: List[ExportedDataType]
timeOffset: int
period: Dict[str, Any]
@dataclass
class ReportDataExportedContent:
id: UUID
exportStatus: ExportStatus
errorMessage: Optional[str] = None
@dataclass
class ReportDataExportedNotification:
replyStatus: int
replyContent: Optional[ReportDataExportedContent] = None
replyErrors: Optional[ReplyErrors] = None
models\get_exported_files_list_model.py
from __future__ import annotations
from dataclasses import dataclass
from datetime import datetime
from typing import Any, Dict, List, Optional
from constants.enums import ExportedDataType
GET_EXPORTED_FILES_LIST_REQUEST = "getExportedFilesListRequest"
@dataclass
class ReplyErrors:
reason: str
errorType: Optional[str] = None
location: Optional[str] = None
@dataclass
class ExportedDataItem:
id: int
name: str
exportedDataType: ExportedDataType
start: Optional[datetime] = None
end: Optional[datetime] = None
@dataclass
class ExportedFilesListContent:
"""Контент ответа со списком сформированных файлов"""
exportedData: List[ExportedDataItem]
@dataclass
class GetExportedFilesListRequest:
tuId: int
additionalProperties: Optional[Dict[str, Any]] = None
@dataclass
class GetExportedFilesListReply:
"""Ответ со списком сформированных файлов"""
replyStatus: int
replyContent: Optional[ExportedFilesListContent] = None
replyErrors: Optional[ReplyErrors] = None
models\upload_exported_file_model.py
from __future__ import annotations
from dataclasses import dataclass
from typing import Any, Dict, Optional
DOWNLOAD_EXPORTED_DATA_REQUEST = "DownloadExportedDataRequest"
@dataclass
class ReplyErrors:
reason: str
errorType: Optional[str] = None
location: Optional[str] = None
@dataclass
class DownloadExportedDataRequest:
"""Запрос на скачивание сформированного файла"""
exportedDataId: int
exportedDataType: str
timeOffset: int
additionalProperties: Optional[Dict[str, Any]] = None
@dataclass
class DownloadExportedDataContent:
"""Контент ответа на запрос скачивания"""
fileChunk: bytes
@dataclass
class DownloadExportedDataReply:
"""Ответ со скачанным контентом сформированного файла"""
replyStatus: int
replyContent: Optional[DownloadExportedDataContent] = None
replyErrors: Optional[ReplyErrors] = None