Files
SkinbaseNova/services/enhance-worker/app/schemas.py

64 lines
1.7 KiB
Python

from __future__ import annotations
from typing import Any, Literal
from urllib.parse import urlparse
from pydantic import BaseModel, ConfigDict, Field, field_validator
SUPPORTED_MODES = {"standard", "artwork", "photo", "illustration"}
SUPPORTED_FORMATS = {"webp", "png", "jpg"}
SUPPORTED_SCALES = {2, 4}
class UpscaleRequest(BaseModel):
job_id: int = Field(..., gt=0)
source_url: str
scale: Literal[2, 4]
mode: Literal["standard", "artwork", "photo", "illustration"]
output_format: Literal["webp", "png", "jpg"] = "webp"
@field_validator("source_url")
@classmethod
def validate_source_url(cls, value: str) -> str:
candidate = value.strip()
if candidate == "":
raise ValueError("source_url is required")
if candidate.startswith(("/", "./", "../", "file://")):
raise ValueError("source_url must be an http or https URL")
parsed = urlparse(candidate)
if parsed.scheme not in {"http", "https"} or parsed.netloc == "":
raise ValueError("source_url must be an http or https URL")
return candidate
class HealthResponse(BaseModel):
status: str
service: str
engine: str
device: str
models_loaded: bool
max_input_width: int
max_input_height: int
max_output_width: int
max_output_height: int
realesrgan: dict[str, Any] | None = None
class UpscaleResponse(BaseModel):
success: bool
job_id: int
output_url: str | None = None
output_base64: str | None = None
width: int
height: int
filesize: int
mime: str
metadata: dict[str, Any] = Field(default_factory=dict)
model_config = ConfigDict(extra="forbid")