Files
pdf/gateway/app/schemas/convert.py
T

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)