88 lines
1.8 KiB
Python
88 lines
1.8 KiB
Python
"""Conversion API schemas."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from enum import Enum
|
|
from typing import Any
|
|
|
|
from pydantic import BaseModel, Field
|
|
|
|
|
|
class Fidelity(str, Enum):
|
|
high = "high"
|
|
medium = "medium"
|
|
lossy = "lossy"
|
|
|
|
|
|
class JobStatus(str, Enum):
|
|
queued = "queued"
|
|
running = "running"
|
|
completed = "completed"
|
|
failed = "failed"
|
|
|
|
|
|
class ConvertFormat(str, Enum):
|
|
pdf = "pdf"
|
|
docx = "docx"
|
|
xlsx = "xlsx"
|
|
pptx = "pptx"
|
|
html = "html"
|
|
md = "md"
|
|
txt = "txt"
|
|
json = "json"
|
|
png = "png"
|
|
jpeg = "jpeg"
|
|
jpg = "jpg"
|
|
tiff = "tiff"
|
|
csv = "csv"
|
|
xml = "xml"
|
|
|
|
|
|
class ConverterInfo(BaseModel):
|
|
source: str
|
|
target: str
|
|
fidelity: Fidelity
|
|
sync_ok: bool = True
|
|
max_bytes: int = 50 * 1024 * 1024
|
|
description: str = ""
|
|
gaps: list[str] = Field(default_factory=list)
|
|
|
|
|
|
class ConvertInfoResponse(BaseModel):
|
|
converters: list[ConverterInfo]
|
|
|
|
|
|
class CanConvertResponse(BaseModel):
|
|
can_convert: bool
|
|
source: str
|
|
target: str
|
|
fidelity: Fidelity | None = None
|
|
engine: str | None = None
|
|
gaps: list[str] = Field(default_factory=list)
|
|
|
|
|
|
class ConvertResultMeta(BaseModel):
|
|
fidelity: Fidelity
|
|
warnings: list[str] = Field(default_factory=list)
|
|
source: str
|
|
target: str
|
|
filename: str
|
|
size_bytes: int
|
|
page_count: int | None = None
|
|
engine: str = "oss"
|
|
convert_options: dict[str, Any] | None = None
|
|
|
|
|
|
class ConvertJobResponse(BaseModel):
|
|
job_id: str
|
|
status: JobStatus
|
|
source: str | None = None
|
|
target: str | None = None
|
|
fidelity: Fidelity | None = None
|
|
warnings: list[str] = Field(default_factory=list)
|
|
filename: str | None = None
|
|
size_bytes: int | None = None
|
|
error: str | None = None
|
|
download_path: str | None = None
|
|
meta: dict[str, Any] = Field(default_factory=dict)
|