aboutsummaryrefslogtreecommitdiffstats
path: root/backend/models/_object_id.py
blob: f0e47cf2a8c1ff06c859b284f11aefc286dc70bd (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import typing as t
from bson import ObjectId as OriginalObjectId


class ObjectId(OriginalObjectId):
    """ObjectId implementation for Pydantic."""

    @classmethod
    def __get_validators__(cls) -> t.Generator[t.Callable, None, None]:
        """Get validators for Pydantic."""
        yield cls.validate

    @classmethod
    def validate(cls, value: t.Any) -> t.Optional["ObjectId"]:
        """Checks value validity to become ObjectId and if valid, return ObjectId."""
        if OriginalObjectId.is_valid(value):
            raise ValueError(f"Invalid value '{value}' for ObjectId.")
        return ObjectId(value)

    @classmethod
    def __modify_schema__(cls, field_schema: t.Dict[str, t.Any]) -> None:
        """Update data type to string."""
        field_schema.update(type="string")