Использование Pydantic сегодня стало нормой, и это правильно. Но иногда на ревью вижу, что используют его не всегда корректно.
Например, метод BaseModel.model_dump() по умолчанию не преобразует стандартные типы, такие как datetime, UUID или Decimal, в простой сериализуемый для JSON вид. Тогда пишут кастмоный сериализатор для этих типов чтобы функция json.dump() не падала с ошибкой.
import uuid
from datetime import datetime
from decimal import Decimal
from uuid import UUID
from pydantic import BaseModel
class MyModel(BaseModel):
id: UUID
date: datetime
value: Decimal
obj = MyModel(
id=uuid.uuid4(),
date=datetime.now(),
value='1.23'
)
print(obj.model_dump())
# не подходит для json.dump
# {
# 'id': UUID('4f8c1bc4-25fd-40cd-9dbe-2c73639b0dc1'),
# 'date': datetime.datetime(2025, 12, 12, 12, 12, 12, 111111),
# 'value': Decimal('1.23')
# }
# добавляем свой кастомный сериализатор
json.dumps(obj.model_dump(), cls=MySerializer)
# {
# 'id': '4f8c1bc4-25fd-40cd-9dbe-2c73639b0dc1',
# 'date': '2025-12-12T12:12:12.111111',
# 'value': '1.23'
# }
В данном случае класс MySerializer обрабатывает datetime, UUID и Decimal. Например так:
class MySerializer(json.JSONEncoder):
def default(self, o):
if isinstance(o, Decimal):
return str(o)
elif isinstance(o, datetime):
return o.isoformat()
elif isinstance(o, UUID):
return str(o)
return super().default(o)
Специально для тех, кто всё еще так делает - в этом нет необходимости!
Pydantic может это сделать сам, просто нужно добавить параметр mode="json".
json.dumps(obj.model_dump(mode="json"))
# {
# 'id': '4f8c1bc4-25fd-40cd-9dbe-2c73639b0dc1',
# 'date': '2012-12-12T12:12:12.111111',
# 'value': '1.23'
# }
#pydantic#libs
🇺🇸 Une éruption du volcan Kilauea a commencé à Hawaï. Les fontaines de lave atteignent 350 m de hauteur, a indiqué l’Institut d’études géologiques des États-Unis (USGS).
#étatsunis#volcan#éruption
🇮🇩 Six éruptions du volcan Semeru ont été enregistrées en Indonésie, les cendres ont atteint 4,7 km d'altitude, a rapporté l'agence Antara, citant les données du poste d'observation de l'activité volcanique.
#indonésie#volcan#éruption
🇮🇩 Le volcan Dukono, situé dans l'est de l'Indonésie, est entré en éruption, projetant une colonne de cendres à 1.000 mètres au‑dessus du cratère, a rapporté l’agence de presse Antara, citant les données du poste d’observation.
#indonésie#volcan#éruption
🇮🇩 En Indonésie, le volcan Semeru est entré en éruption, projetant un panache de cendres s'élevant à 6,7 kilomètres au-dessus du niveau de la mer, a rapporté l'agence Antara, citant un poste d'observation local.
#indonésie#volcan#éruption
🇮🇩🌋 Une éruption du volcan Dukono s’est produite en Indonésie. Un panache de cendres s’est élevé à une hauteur de 11,1 kilomètres, ont indiqué les autorités du Centre de volcanologie du pays.
Deux personnes ont trouvé la mort, rapporte le journal Kompas en citant les services de secours. 20 touristes sont recherchés, précise Reuters.
#éruption#volcan#cendres
🇮🇩🌋 En Indonésie, le volcan Marapi a projeté des cendres jusqu’à une hauteur de 4,5 kilomètres lors de son éruption, a indiqué le Centre de volcanologie du pays.
#volcan#cendres#éruption
🇮🇩🌋 Une éruption du volcan Semeru s’est produite en Indonésie. Un panache de cendres s’est élevé à une hauteur de 5,7 km, a rapporté le portail Tempo.
#éruption#volcan#cendres
🇮🇩Une éruption du volcan Semeru a été enregistrée dans la province de Java oriental, dans la partie centrale de l'Indonésie. Les cendres ont été projetées à 4,5 kilomètres au-dessus du niveau de la mer. C'est ce qu'indique un communiqué du Centre de volcanologie et de réduction des catastrophes géologiques (PVMBG) du pays.
#indonésie#semeru#volcan
🇺🇸🌋 Le volcan Kilauea dans l'archipel américain d'Hawaï est à nouveau entré en éruption, a annoncé samedi l'Institut d'études géologiques des États-Unis (USGS).
L'éruption a duré 8,5 heures. Des jets de lave ont atteint une hauteur de 220 mètres.
#hawaï#volcan#éruption
🇵🇭 Aux Philippines, des retombées de cendres volcaniques ont touché 32 localités, a rapporté la chaîne ABS-CBN News, citant l’Institut de volcanologie et de sismologie du pays.
#philippines#volcan#cendres
🇮🇩🌋 Au moins deux éruptions du volcan Dukono se sont produites sur l'île indonésienne de Halmahera (province des Moluques du Nord), rapporte le Centre de volcanologie et de réduction des catastrophes géologiques du pays.
Selon ses informations, une colonne de cendres s'est élevée à 1.300 mètres au-dessus du cratère du volcan et a atteint une hauteur d'environ 2.387 mètres d'altitude.
#éruptions#volcan#cendres