Загрузка данных


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