Добавлено описание проекта PVideoDl, включая функциональность, стек технологий, архитектуру, инструкции по запуску и API. Обновлён README.md для лучшего понимания проекта.

This commit is contained in:
Leonid Pershin
2026-06-19 12:07:55 +03:00
parent e15d0af056
commit 3281fa2a5d
43 changed files with 4699 additions and 0 deletions
+56
View File
@@ -0,0 +1,56 @@
"""Pydantic-модели и перечисления доменного слоя."""
from __future__ import annotations
import uuid
from datetime import datetime, timezone
from enum import Enum
from pydantic import BaseModel, Field
class DownloadStatus(str, Enum):
PENDING = "pending"
DOWNLOADING = "downloading"
DONE = "done"
FAILED = "failed"
PAUSED = "paused" # задел на будущее
def _now() -> datetime:
return datetime.now(timezone.utc)
def _new_id() -> str:
return uuid.uuid4().hex
class Download(BaseModel):
id: str = Field(default_factory=_new_id)
url: str
filename: str | None = None
status: DownloadStatus = DownloadStatus.PENDING
progress: float = 0.0 # 0.0100.0
size_bytes: int | None = None
downloaded_bytes: int = 0
speed: float | None = None # байт/сек
eta: float | None = None # секунд до конца, оценка
error: str | None = None
created_at: datetime = Field(default_factory=_now)
class CreateDownloads(BaseModel):
"""Тело запроса POST /api/downloads — список ссылок (по одной на строку или массивом)."""
urls: list[str] = Field(default_factory=list, min_length=1)
# --- События шины (то, что улетает в SSE) ---
class DownloadEvent(BaseModel):
"""Обёртка над снимком загрузки, транслируемая в браузер через SSE."""
type: str # "created" | "progress" | "done" | "failed" | "deleted"
download: Download | None = None
id: str | None = None # для type="deleted" хватает id