Использование 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
Potato Waffle Burger 🍔🥔
Ingredients:
- 6 potatoes 🥔
- 70g all-purpose flour 🌾
- 100 ml plant drink 🥛
- 1 tsp salt 🧂
Toppings:
- 2 spreads of vegan cream cheese 🧀
- 1 handful of lamb's lettuce 🥬
- 5 mushrooms 🍄
- Fried onions, chili 🌶
- Agave mustard dressing 🍯
Dressing:
- 2 tbsp mustard
- 3 tbsp agave syrup 🍯
- 1 tbsp oil 🫒
- 1 tbsp water 💧
- Pinch of salt, pepper 🧂
Preparation:
1. Grate the potatoes, squeeze out the liquid, and mix with all ingredients for the dough. 👩🍳🥔
2. Fry the mushrooms and season them. Mix the ingredients for the agave mustard dressing. 🍄
3. Pour the batter into the waffle iron. 🧇
4. Enjoy with the toppings! 😋
#PotatoWaffleBurger#VeganBurger#PlantBased#HealthyEats#EasyRecipes
@dishes
Potato Waffle Burger 🍔🥔
Ingredients:
- 6 potatoes 🥔
- 70g all-purpose flour 🌾
- 100 ml plant drink 🥛
- 1 tsp salt 🧂
Toppings:
- 2 spreads of vegan cream cheese 🧀
- 1 handful of lamb's lettuce 🥬
- 5 mushrooms 🍄
- Fried onions, chili 🌶️
- Agave mustard dressing 🍯
Dressing:
- 2 tbsp mustard
- 3 tbsp agave syrup 🍯
- 1 tbsp oil 🫒
- 1 tbsp water 💧
- Pinch of salt, pepper 🧂
Preparation:
1. Grate the potatoes, squeeze out the liquid, and mix with all ingredients for the dough. 👩🍳🥔
2. Fry the mushrooms and season them. Mix the ingredients for the agave mustard dressing. 🍄
3. Pour the batter into the waffle iron. 🧇
4. Enjoy with the toppings! 😋
#PotatoWaffleBurger#VeganBurger#PlantBased#HealthyEats#EasyRecipes
@dishes
Fillo Quiche Cups Recipe🥚🥓🧈
Perfect for brunch or appetizers!
Ingredients:
Fillo Dough Shells:
📜 250g Fillo pastry sheets
🧈 50g butter, melted
Filling:
🥓 200g Pancetta or bacon, diced
🥚 10 Large eggs
🌿 50g Fresh chives, chopped
🧂 Salt/Pepper to taste
🧀 150g Swiss & Gruyere cheese
🧀 150g Fresh Mozzarella cheese, sliced
⚪️ Sesame seeds
Instructions:
1️⃣ Preheat oven to 190°C (375°F).
2️⃣ Cut fillo sheets into squares, brush each layer with melted butter, and stack them in a muffin tin.
3️⃣ In a bowl, whisk eggs 🥚, add pancetta 🥓, chives 🌿, and cheese 🧀. Season with salt and pepper 🧂.
4️⃣ Pour mixture into fillo shells, top with mozzarella slices, and sprinkle sesame seeds ⚪️.
5️⃣ Bake for 15–20 minutes or until golden brown ✨.
#EasyRecipes#BrunchGoals#MiniQuiches#CheeseLovers🥧
@dishes
Roasted Zucchini Pepper Pasta🍝🥒🌶️
Ingredients:
🥒 1 zucchini, grated
🌶️ 1 bell pepper
🧅 3 shallots
🧀 100 g cream cheese
🍁 40 ml maple syrup
🧂 1 tsp salt
🫒 Oil as desired
🌿 1 handful of parsley, chopped
🍝 250 g pasta
Preparation:
1️⃣ Put zucchini, bell pepper, and onions in a casserole dish 🥘.
2️⃣ Add cream cheese 🧀, oil 🫒, maple syrup 🍁, and salt 🧂.
3️⃣ Roast everything in the oven for 35 minutes (top/bottom heat) 🔥.
4️⃣ Cook the pasta 🍝.
5️⃣ Mix the roasted vegetables, pasta, and parsley 🌿. Enjoy! 😋
#EasyRecipes#VegetarianPasta#RoastedVeggies#ZucchiniLovers#QuickMeals#ComfortFood
@dishes
Creamy Tuscan Chicken🍗🍅🌿
Ingredients:
- 2 lb chicken breast 🍗
- Salt and pepper to taste 🧂
- 3 tablespoons flour 🌾
- 1 tbsp smoked paprika 🌶️
- 2 tablespoons butter 🧈
- 2 tablespoons olive oil 🫒
- 3 garlic cloves 🧄
- 2 shallots 🧅
- 1 sprig of cherry tomatoes 🍅
- 1/4 cup sundried tomatoes 🍅
- 1/4 cup parmesan cheese 🧀
- 1 teaspoon Italian oregano 🌿
- 1 cup chicken broth 🍲
- 1/2 cup white wine 🍷
- 2 cups heavy/whipped cream 🥛
- 2 cups fresh baby spinach 🥬
Steps:
1. Season chicken with salt, pepper, and smoked paprika. Coat with flour.
2. Heat butter and olive oil in a pan. Sear chicken until golden. Remove and set aside.
3. Sauté garlic, shallots, and cherry tomatoes in the same pan. Add sundried tomatoes.
4. Pour in white wine and chicken broth. Simmer and reduce.
5. Stir in heavy cream, parmesan, and oregano. Cook until thickened.
6. Add baby spinach. Return chicken to the pan and simmer until cooked through.
Serve hot and enjoy! 🍴✨
#CreamyTuscanChicken#ChickenDinner#ComfortFood#TuscanFlavors#EasyRecipes#FoodLover
@dishes