hv0905/NekoImageGallery

View on GitHub
app/Models/api_models/admin_api_model.py

Summary

Maintainability
A
0 mins
Test Coverage
from typing import Optional, Annotated

from pydantic import BaseModel, Field, StringConstraints


class ImageOptUpdateModel(BaseModel):
    starred: Optional[bool] = Field(None,
                                    description="Whether the image is starred or not. Leave empty to keep the value "
                                                "unchanged.")
    categories: Optional[list[str]] = Field(None,
                                            description="The categories of the image. Leave empty to keep the value "
                                                        "unchanged.")
    url: Optional[str] = Field(None,
                               description="The url of the image. Leave empty to keep the value unchanged. Changing "
                                           "the url of a local image is not allowed.")

    thumbnail_url: Optional[str] = Field(None,
                                         description="The url of the thumbnail. Leave empty to keep the value "
                                                     "unchanged. Changing the thumbnail_url of an image with a local "
                                                     "thumbnail is not allowed.")
    comments: Optional[str] = Field(None,
                                    description="The comments of the image. Leave empty to keep the value unchanged.")

    def empty(self) -> bool:
        return all([item is None for item in self.model_dump().values()])


Sha1HashString = Annotated[
    str, StringConstraints(min_length=40, max_length=40, pattern=r"[0-9a-f]+", to_lower=True, strip_whitespace=True)]


class DuplicateValidationModel(BaseModel):
    hashes: list[Sha1HashString] = Field(description="The SHA1 hash of the image.", min_length=1)