Source code for meilisearch.models.key

from datetime import datetime
from typing import List, Optional, Union

import pydantic
from camel_converter.pydantic_base import CamelBase

from meilisearch._utils import is_pydantic_2, iso_to_date_time


class _KeyBase(CamelBase):
    uid: str
    name: Optional[str] = None
    description: str
    actions: List[str]
    indexes: List[str]
    expires_at: Optional[datetime] = None

    if is_pydantic_2():
        model_config = pydantic.ConfigDict(ser_json_timedelta="iso8601")  # type: ignore[typeddict-unknown-key]

        @pydantic.field_validator("expires_at", mode="before")  # type: ignore[attr-defined]
        @classmethod
        def validate_expires_at(  # pylint: disable=invalid-name
            cls, v: str
        ) -> Union[datetime, None]:
            return iso_to_date_time(v)

    else:  # pragma: no cover

        @pydantic.validator("expires_at", pre=True)
        @classmethod
        def validate_expires_at(  # pylint: disable=invalid-name
            cls, v: str
        ) -> Union[datetime, None]:
            return iso_to_date_time(v)

        class Config:
            json_encoders = {
                datetime: lambda v: (
                    None
                    if not v
                    else (
                        f"{str(v).split('+', maxsplit=1)[0].replace(' ', 'T')}Z"
                        if "+" in str(v)
                        else f"{str(v).replace(' ', 'T')}Z"
                    )
                )
            }


[docs] class Key(_KeyBase): key: str created_at: datetime updated_at: Optional[datetime] = None if is_pydantic_2(): @pydantic.field_validator("created_at", mode="before") # type: ignore[attr-defined] @classmethod def validate_created_at(cls, v: str) -> datetime: # pylint: disable=invalid-name converted = iso_to_date_time(v) if not converted: raise ValueError("created_at is required") # pragma: no cover return converted @pydantic.field_validator("updated_at", mode="before") # type: ignore[attr-defined] @classmethod def validate_updated_at( # pylint: disable=invalid-name cls, v: str ) -> Union[datetime, None]: return iso_to_date_time(v) else: # pragma: no cover
[docs] @pydantic.validator("created_at", pre=True) @classmethod def validate_created_at(cls, v: str) -> datetime: # pylint: disable=invalid-name converted = iso_to_date_time(v) if not converted: raise ValueError("created_at is required") return converted
[docs] @pydantic.validator("updated_at", pre=True) @classmethod def validate_updated_at( # pylint: disable=invalid-name cls, v: str ) -> Union[datetime, None]: return iso_to_date_time(v)
[docs] class KeyUpdate(CamelBase): key: str name: Optional[str] = None description: Optional[str] = None actions: Optional[List[str]] = None indexes: Optional[List[str]] = None expires_at: Optional[datetime] = None if is_pydantic_2(): model_config = pydantic.ConfigDict(ser_json_timedelta="iso8601") # type: ignore[typeddict-unknown-key] else: # pragma: no cover class Config: json_encoders = { datetime: lambda v: ( None if not v else ( f"{str(v).split('+', maxsplit=1)[0].replace(' ', 'T')}Z" if "+" in str(v) else f"{str(v).replace(' ', 'T')}Z" ) ) }
[docs] class KeysResults(CamelBase): results: List[Key] offset: int limit: int total: int