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")
|