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