Использование 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
👁🗨 Настольная игра «Zero» обязательно понравится:
– Новичкам, потому что у неё лёгкие правила, которые можно объяснить за пару минут, и быстрые партии!
– Любителям компактных карточных игр, ведь в неё можно сыграть практически в любом месте, а ещё она занимает совсем мало места на полочке!
– Фанатам необычных игр на сбор сетов, ведь ваша задача не только собрать особую комбинацию, но и не дать соперникам нужную карточку для их комбинации!
✅ «Zero» ждёт вас на нашем сайте: https://vk.cc/clanyE.
На Ozon: https://vk.cc/claHEq.
На Wildberries: https://vk.cc/claHGY.
#ЗвездаНастольныеИгры#Zero#ЗвездаУжеВПродаже
🅾 Доброе утро, друзья! Понедельник — наше любимое время анонсов. И мы рады сообщить, что игра «Zero» Райнера Книции сегодня поступила в продажу!
🍩 «Zero» — это быстрая карточная игра для небольшой компании до 5 человек, которая является переизданием игры «Zero Down» 2011 года. В ней задача каждого игрока — набрать как можно меньше очков. Каждый раунд игроки получают по 9 карточек на руку, а на стол выкладывается ещё 5. В свой ход можно обменять одну карточку с руки на одну карточку со стола или спасовать. При этом каждый игрок стремится собрать раньше соперников особую комбинацию «Зеро», которая принесёт 0 очков. Если комбинация «Зеро» собрана, раунд немедленно заканчивается, и все игроки, кроме счастливчика с «Зеро», подсчитывают полученные очки. Раунд также заканчивается после второго паса, и тогда подсчёта очков не избежать никому. Партия продлится столько раундов, сколько участников за столом. Победителем станет тот, кто наберёт наименьшее количество очков!
#ЗвездаНастольныеИгры#Zero#ЗвездаУжеВПродаже
🧮📝 Друзья, началась последняя рабочая неделя этого года — время подводить итоги и строить планы на будущее. В самое ближайшее время мы поделимся ими с вами. А пока ловите небольшой анонс уходящего года! Мы издадим на русском языке новую крутую игру от Райнера Книции — «Zero»!
🅾 Это несложная карточная игра, в которую могут сыграть от 2 до 5 человек. Игровой процесс строится на обмене карточек со своей руки с карточками, лежащими на столе. Ваша задача — набрать как можно меньше очков. Игра длится столько раундов, сколько участников в партии. Каждый раунд игроки считают полученные очки, а победитель определяется по итоговой сумме. У кого очков меньше, тот и чемпион!
🌱 «Зеро» уже очень скоро отправится в печать, так что выход игры не за горами! Все подробности обязательно расскажем в следующих публикациях. Следите за нашими новостями! 😉
#ЗвездаНастольныеИгры#Zero#ЗвездаАнонс
ТВЕРЬ 30.05
Семинар ZERO ALCO
SPIRITS AND COCKTAILS при поддержке первых и пока единственный б/а спиритов DRINKSOME
Время: 13:00-15:00
Место: бар FunDuck ( адрес итак все знаете)
Продолжаем встречаться и обсуждать безалкогольную тему и другие закономерные тренды.
Давно не встречались в Твери в таком формате, так что нам есть много о чем поговорить и обсудить!
Попробуем 4 безалкогольных спирита DRINKSOME и коктейли на его основе( если ещё не пробовали), обсудим б/а тему, поделюсь своим и международным опытом и поговорим в формате вопрос-ответ!
Жду вас во вторник (30.05) в баре FunDuck.
Просьба записаться в комментарии к посту - достаточно цифрой указать кол-во человек, кто прийдет на семинар с вами ( если один, то 1) , чтобы мы смогли подготовить бар и всем было видно, слышно и вкусно 🤗.
До скорой встречи!
#безалкогольныеспириты#безалкогольныекоктейли #0%vol #zero