Skip to content

Instantly share code, notes, and snippets.

@cadd
Created July 13, 2021 07:29
Show Gist options
  • Select an option

  • Save cadd/10e800b3f94931490736142068e2893e to your computer and use it in GitHub Desktop.

Select an option

Save cadd/10e800b3f94931490736142068e2893e to your computer and use it in GitHub Desktop.
from pydantic import BaseModel, Field
from pymongo import MongoClient
from bson import ObjectId
from typing import Optional
client = MongoClient()
db = client.test
class PyObjectId(ObjectId):
@classmethod
def __get_validators__(cls):
yield cls.validate
@classmethod
def validate(cls, v):
if not ObjectId.is_valid(v):
raise ValueError('Invalid objectid')
return ObjectId(v)
@classmethod
def __modify_schema__(cls, field_schema):
field_schema.update(type='string')
class User(BaseModel):
id: Optional[PyObjectId] = Field(alias='_id')
name: str
username: str
email: str
class Config:
arbitrary_types_allowed = True
json_encoders = {
ObjectId: str
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment