fixes global
This commit is contained in:
1 parent
13dc4f39c8
commit
cad0f6aebe
64 files changed
+10379
-254
No files matched your search
@@ -0,0 +1,104 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import enum
|
||||
import time
|
||||
from dataclasses import dataclass, field, asdict
|
||||
from typing import Dict, Any, List, Optional, Literal, Union
|
||||
|
||||
|
||||
class ConversionPriority(enum.IntEnum):
|
||||
LOW = 10
|
||||
NORMAL = 50
|
||||
HIGH = 90
|
||||
CRITICAL = 100
|
||||
|
||||
|
||||
class ConversionStatus(str, enum.Enum):
|
||||
QUEUED = "queued"
|
||||
RUNNING = "running"
|
||||
SUCCESS = "success"
|
||||
FAILED = "failed"
|
||||
CANCELED = "canceled"
|
||||
|
||||
|
||||
@dataclass
|
||||
class ContentMetadata:
|
||||
"""
|
||||
Метаданные контента для NFT и каталогизации.
|
||||
"""
|
||||
title: str
|
||||
description: Optional[str] = None
|
||||
author: Optional[str] = None
|
||||
collection: Optional[str] = None
|
||||
tags: List[str] = field(default_factory=list)
|
||||
cover_image_b64: Optional[str] = None
|
||||
# Доп. поля для Web2/Web3 совместимости
|
||||
language: Optional[str] = None
|
||||
explicit: Optional[bool] = None
|
||||
attributes: Dict[str, Any] = field(default_factory=dict)
|
||||
|
||||
def to_dict(self) -> Dict[str, Any]:
|
||||
return asdict(self)
|
||||
|
||||
|
||||
@dataclass
|
||||
class ConversionTask:
|
||||
"""
|
||||
Описывает задачу на конвертацию для converter-module.
|
||||
"""
|
||||
task_id: str
|
||||
input_path: str
|
||||
input_ext: str
|
||||
quality: Literal["high", "low"]
|
||||
# Доп опции конвертера
|
||||
trim: Optional[str] = None # формат "start-end" в секундах, пример "0.5-35"
|
||||
custom: List[str] = field(default_factory=list)
|
||||
|
||||
# Интеграция с децентрализованной платформой
|
||||
priority: ConversionPriority = ConversionPriority.NORMAL
|
||||
attempts: int = 0
|
||||
max_retries: int = 3
|
||||
|
||||
# NFT/контент метаданные
|
||||
metadata: ContentMetadata = field(default_factory=lambda: ContentMetadata(title="Untitled"))
|
||||
|
||||
# Трассировка/время
|
||||
created_at: int = field(default_factory=lambda: int(time.time()))
|
||||
updated_at: int = field(default_factory=lambda: int(time.time()))
|
||||
|
||||
def to_dict(self) -> Dict[str, Any]:
|
||||
d = asdict(self)
|
||||
d["priority"] = int(self.priority)
|
||||
return d
|
||||
|
||||
|
||||
@dataclass
|
||||
class ConversionResult:
|
||||
"""
|
||||
Результат конвертации.
|
||||
"""
|
||||
task_id: str
|
||||
status: ConversionStatus
|
||||
# Путь к выходному файлу конвертера внутри converter-module контейнера/процесса
|
||||
converter_output_path: Optional[str] = None
|
||||
# Снимок stdout/stderr или лог-файла конвертера (если доступно)
|
||||
logs_path: Optional[str] = None
|
||||
|
||||
# Интеграция после конвертации
|
||||
# content_id после шифрования, ключ для расшифровки хранится отдельно безопасно
|
||||
content_id: Optional[str] = None
|
||||
# Итоговые чанки (их хеши и base64-данные)
|
||||
chunks: Optional[List[Dict[str, Any]]] = None
|
||||
|
||||
# Метаданные для NFT
|
||||
nft_metadata: Optional[Dict[str, Any]] = None
|
||||
|
||||
# Ошибка (если FAILED)
|
||||
error: Optional[str] = None
|
||||
|
||||
finished_at: Optional[int] = None
|
||||
|
||||
def to_dict(self) -> Dict[str, Any]:
|
||||
d = asdict(self)
|
||||
d["status"] = str(self.status.value)
|
||||
return d
|
||||
Reference in new issue
Block a user