Posts of Zen of Python

newest first

#5115Photo
Views349−68%vs avg
Forwards2
Reactions—
Comments0
#5114Text
Views623−42%vs avg
Forwards1
Reactions1
Comments0
#5113Photo
Views898−17%vs avg
Forwards5
Reactions2
Comments0
Views growthHide views growth

Views growth

Hours after publication

Show as table
Hours after publicationViews
0 h0
3 h442
15 h823
27 h898
  1. After 24 hours898
  2. Total to date898
#5112Photo
Views932−14%vs avg
Forwards4
Reactions3
Comments0
Views growthHide views growth

Views growth

Hours after publication

Show as table
Hours after publicationViews
0 h0
9 h599
33 h932
  1. Total to date932
#5111Photo
Views851−21%vs avg
Forwards4
Reactions1
Comments0
Views growthHide views growth

Views growth

Hours after publication

Show as table
Hours after publicationViews
0 h0
3 h450
15 h764
27 h851
  1. After 24 hours851
  2. Total to date851
#5110Photo
Views985−9%vs avg
Forwards4
Reactions2
Comments1
Views growthHide views growth

Views growth

Hours after publication

Show as table
Hours after publicationViews
0 h0
8 h538
33 h871
69 h985
  1. Total to date985
#5109Photo
Views972−10%vs avg
Forwards5
Reactions—
Comments0
Views growthHide views growth

Views growth

Hours after publication

Show as table
Hours after publicationViews
0 h0
14 h679
27 h802
75 h972
  1. After 24 hours802
  2. Total to date972
#5108Photo
Views996−8%vs avg
Forwards8
Reactions2
Comments0
Views growthHide views growth

Views growth

Hours after publication

Show as table
Hours after publicationViews
0 h0
33 h844
69 h996
  1. Total to date996
#5107Photo
Views1,034−4%vs avg
Forwards4
Reactions—
Comments0
Views growthHide views growth

Views growth

Hours after publication

Show as table
Hours after publicationViews
0 h0
39 h903
75 h1,034
  1. Total to date1,034
#5106Photo
Views1,048−3%vs avg
Forwards3
Reactions1
Comments2
Views growthHide views growth

Views growth

Hours after publication

Show as table
Hours after publicationViews
0 h0
57 h1,016
69 h1,048
  1. Total to date1,048
#5105Photo
Views1,044−3%vs avg
Forwards8
Reactions—
Comments0
Views growthHide views growth

Views growth

Hours after publication

Show as table
Hours after publicationViews
0 h0
62 h1,022
75 h1,044
  1. Total to date1,044
#5104Photo
Views1,031−4%vs avg
Forwards3
Reactions—
Comments0
#5103Photo
Views1,043−3%vs avg
Forwards4
Reactions—
Comments0
#5102Photo
Views1,050−3%vs avg
Forwards2
Reactions—
Comments0
#5101Photo
Views1,053−2%vs avg
Forwards5
Reactions2
Comments0
#5100Photo
Views1,101+2%vs avg
Forwards7
Reactions—
Comments0
#5099Photo
Views1,107+3%vs avg
Forwards8
Reactions2
Comments0
#5098Text
Views1,273+18%vs avg
Forwards4
Reactions5
Comments0
#5097Text
Views1,333+24%vs avg
Forwards5
Reactions0
Comments0
#5096Text
Views1,354+25%vs avg
Forwards2
Reactions3
Comments0
#5095Text
Views1,391+29%vs avg
Forwards3
Reactions—
Comments0
#5094Text

Подмена в pytest может закончиться раньше теста Тест сначала проверяет код с подменённой зависимостью, а затем хочет вызвать настоящий объект. Если все изменения сделаны через обычную фикстуру monkeypatch, автоматический откат произойдёт лишь после завершения теста или использующей её фикстуры. Сузить срок жизни можно через with monkeypatch.context() as m. Подмены, зарегистрированные через m.setattr и другие методы этого контекста, откатятся при выходе из блока. После него можно проверять поведение с восстановленной зависимостью, не завершая тест. В примере pytest так ограничивают подмену functools.partial. Это важно: стандартной библиотекой пользуется и сам pytest, поэтому глобальная подмена может сломать тестовый раннер. Короткий контекст уменьшает время воздействия, но не делает любую подмену безопасной. Для своего кода документация рекомендует явную передачу зависимостей, если это возможно.

Open in Telegram
Views1,338+24%vs avg
Forwards3
Reactions—
Comments0
#5093Text
Views1,364+26%vs avg
Forwards3
Reactions—
Comments0
#5092Text

Pydantic может создать модель с неверными данными Наличие объекта BaseModel ещё не доказывает, что данные прошли проверку. В Pydantic V2 model_construct() создаёт модель без валидации. Если поле объявлено вложенной моделью, переданный туда словарь сам в неё не превратится. Метод не отключает вообще всё: значения полей по умолчанию по-прежнему подставляются. Зато extra="forbid" при таком создании не даст привычной ошибки за лишнее поле. Оно будет проигнорировано. Поэтому контракт обычного конструктора нельзя механически переносить на model_construct. В документации метода его предлагают для уже проверенных или заведомо доверенных данных. Выбирать этот путь только ради скорости тоже рано: в V2 разрыв сократился, а на простых моделях обычная валидация может оказаться быстрее. Прежде чем убрать проверку, измерьте свой сценарий и определите, кто теперь отвечает за корректность вложенных объектов.

Open in Telegram
Views1,393+29%vs avg
Forwards3
Reactions—
Comments0
#5091Text
Views1,415+31%vs avg
Forwards2
Reactions2
Comments0