Source code for luna_handlers.classes.schemas.sdk

"""
Module contains schemas for sdk handler
"""
from typing import Optional, List
from uuid import UUID

from pydantic import Field, validator, root_validator, conlist

from classes.schemas import types
from classes.schemas.base_schema import BaseSchema
from classes.schemas.simple_schemas import UrlSchema, BoundingBoxSchema
from classes.schemas.types import OptionalNotNullable
from classes.schemas.validators import validateBase64ImageMimetype


[docs]class SDKInputEstimationsModel(BaseSchema): """SDK model for incoming estimations: urls, samples or image with/without face/body bounding boxes""" # url list urls: Optional[List[UrlSchema]] = Field(min_items=1, max_items=types.MAX_URLS_LIST_LENGTH) # sample ids samples: conlist(UUID, min_items=1, max_items=types.MAX_SAMPLES_LIST_LENGTH) = OptionalNotNullable() # image (base64) image: Optional[str] # image mimetype (additional validator - '_mimetype') mimetype: Optional[str] # face bounding box list faceBoundingBoxes: conlist(BoundingBoxSchema, min_items=1) = OptionalNotNullable() # body bounding box list bodyBoundingBoxes: conlist(BoundingBoxSchema, min_items=1) = OptionalNotNullable() # image mimetype validator _mimetype = validator("mimetype", allow_reuse=True)(validateBase64ImageMimetype)
[docs] @root_validator(pre=False, skip_on_failure=True) def validateOneOf(cls, values): """Validate one of""" isRequestWithUrls = values["urls"] is not None isRequestWithSamples = values["samples"] is not None isRequestWithImage = values["image"] is not None if [isRequestWithImage, isRequestWithSamples, isRequestWithUrls].count(True) != 1: raise ValueError("Required one of 'urls', 'samples' or 'image' in request") if isRequestWithImage: if "mimetype" not in values: raise ValueError("Error path: '('mimetype',)'. Error msg: 'field required''") return values