Использование 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
La #Germania boccia la proposta di bilancio UE: “Finanziariamente sproporzionata”. Il ministro Klingbeil critica la tassa sulle grandi imprese e il prelievo sul tabacco: “Segnale sbagliato, Berlino non può sostenerla”.
@UltimoraPolitics
🇩🇪#Germania EXIT POLL — Alternative für Deutschland domina le elezioni statali in due land della Germania Est: vince col 33% in Turingia ed è testa a testa con la CDU col 31,5 in Sassonia.
@UltimoraPolitics
❗️🇩🇪 #Germania, dal 1° aprile la cannabis diventa ufficialmente legale per uso ricreativo. Ok dal Parlamento: 407 a favore, 226 i contrari, 4 gli astenuti @UltimoraPolitics
❗️🇩🇪#Germania, dal 1° aprile la cannabis diventa ufficialmente legale per uso ricreativo. Ok dal Parlamento: 407 a favore, 226 i contrari, 4 gli astenuti
@UltimoraPolitics
Tensione Roma-Berlino sui migranti, fonti Palazzo Chigi: "Grande stupore per la notizia secondo la quale un portavoce del ministero degli Esteri della repubblica federale di #Germania avrebbe annunciato un imminente finanziamento a delle Ong per un progetto di assistenza di migranti sul territorio italiano e un progetto di "salvataggi" in mare. Si confida che la notizia sia priva di ogni fondamento perché il finanziamento da parte della Germania di attività di Ong sul territorio italiano sarebbe una gravissima anomalia"
@UltimoraPolitics
#Germania
Il Bundestag approva il progetto di legge sull'introduzione del reddito di cittadinanza: sostituirà da gennaio 2023 l'Hartz IV e avrà come obiettivo non più trovare un impiego per i disoccupati il più rapidamente possibile, ma formarli a un lavoro a tempo indeterminato. Il sussidio di disoccupazione verrà aumentato da 449 a 502 euro al mese. Le prestazioni dovrebbero essere ridotte nei primi sei mesi dalla ricezione del reddito di cittadinanza soltanto in casi eccezionali, qualora il disoccupato non collabori con costanza con i centri per l'impiego nella ricerca di un lavoro. Oltre al reddito di cittadinanza, previsti 150 euro al mese per la formazione continua per chi ottiene una qualifica professionale o 75 euro per chi intraprende altre misure in questo campo
@UltimoraPolitics
🇩🇪#Germania – Un alto funzionario del Ministero degli Esteri tedesco, con competenza per il Medio Oriente, parteciperà come osservatore alla riunione del Board of Peace del presidente Donald #Trump, riferiscono fonti del governo
@UltimoraPolitics24
#Germania, #Iran: la Germania non parteciperà attivamente alle azioni militari contro l'Iran ma difenderà i propri soldati presenti in Giordania e in Iraq se verrannoa attaccati. Lo ha fatto sapere il Ministro degli Esteri Johann Wadephul questa mattina.
Alcune basi militari in cui i soldati tedeschi sono presenti sono state prese di mira dall'Iran in questi giorni. Fino a questo momento non si segnalano feriti.