jayparmr's picture
Upload folder using huggingface_hub
a3d6c18
raw
history blame
2.6 kB
import re
from typing import Optional
from pydantic import BaseModel, validator
from typing_extensions import Literal
class Parameters(BaseModel):
image_file_b64: Optional[str] = ""
image_url: Optional[str] = ""
size: Optional[Literal["preview", "full", "auto"]] = "preview"
type: Optional[
Literal["auto", "product", "person", "car"]
] = "auto" # Not supported at the moment
format: Optional[Literal["auto", "jpg", "png", "zip"]] = "auto"
roi: str = "0% 0% 100% 100%"
crop: bool = False
crop_margin: Optional[str] = "0px"
scale: Optional[str] = "original"
position: Optional[str] = "original"
channels: Optional[Literal["rgba", "alpha"]] = "rgba"
add_shadow: str = "false" # Not supported at the moment
semitransparency: str = "false" # Not supported at the moment
bg_color: Optional[str] = ""
bg_image_url: Optional[str] = ""
@validator("crop_margin")
def crop_margin_validator(cls, value):
if not re.match(r"[0-9]+(px|%)$", value):
raise ValueError(
"crop_margin paramter is not valid"
) # TODO: Add support of several values
if "%" in value and (int(value[:-1]) < 0 or int(value[:-1]) > 100):
raise ValueError("crop_margin mast be in range between 0% and 100%")
return value
@validator("scale")
def scale_validator(cls, value):
if value != "original" and (
not re.match(r"[0-9]+%$", value)
or not int(value[:-1]) <= 100
or not int(value[:-1]) >= 10
):
raise ValueError("scale must be original or in between of 10% and 100%")
if value == "original":
return 100
return int(value[:-1])
@validator("position")
def position_validator(cls, value, values):
if len(value.split(" ")) > 2:
raise ValueError(
"Position must be a value from 0 to 100 "
"for both vertical and horizontal axises or for both axises respectively"
)
if value == "original":
return "original"
elif len(value.split(" ")) == 1:
return [int(value[:-1]), int(value[:-1])]
else:
return [int(value.split(" ")[0][:-1]), int(value.split(" ")[1][:-1])]
@validator("bg_color")
def bg_color_validator(cls, value):
if not re.match(r"(#{0,1}[0-9a-f]{3}){0,2}$", value):
raise ValueError("bg_color is not in hex")
if len(value) and value[0] != "#":
value = "#" + value
return value