Size: a a a

2021 May 19

A🌚

Al 🌚l in rannts
А относительный импорт делать внутри клиентов?
источник

БС

Байт Словович... in rannts
так работает, но я не управляю кодом клиентов. Только если как предложил кирилл с заменой кода...
Хотя вру... покопакался в кишках генератора, оказалось есть не документированая функциональность и можно поменять имя пакета. В общем проблема решилась очень малой кровью.
источник

KK

Kirill (Cykooz) Kuzm... in rannts
Что-то в документации pydantic враньё насчёт того что он самый быстрый (https://pydantic-docs.helpmanual.io/benchmarks/). Ну или он самый быстрый только на MacOS Bug Sur.
У меня на Ubuntu 20.04 вот такие результаты (добавил в бенчмарк ещё colander):
                 pydantic best=70.256μs/iter avg=71.486μs/iter stdev=1.242μs/iter version=1.8.2
          attrs + cattrs best=64.297μs/iter avg=64.604μs/iter stdev=0.255μs/iter version=21.2.0
                valideer best=64.050μs/iter avg=64.454μs/iter stdev=0.377μs/iter version=0.4.2
             marshmallow best=123.788μs/iter avg=125.308μs/iter stdev=1.009μs/iter version=3.12.1
              voluptuous best=120.506μs/iter avg=122.050μs/iter stdev=1.655μs/iter version=0.12.1
                trafaret best=141.735μs/iter avg=146.341μs/iter stdev=9.464μs/iter version=2.1.0
              schematics best=511.139μs/iter avg=515.799μs/iter stdev=4.681μs/iter version=2.1.0
   django-rest-framework best=636.263μs/iter avg=637.982μs/iter stdev=1.265μs/iter version=3.12.4
                cerberus best=1021.211μs/iter avg=1023.225μs/iter stdev=1.327μs/iter version=1.3.4
                colander best=65.091μs/iter avg=65.591μs/iter stdev=0.473μs/iter version=1.8
источник

KK

Kirill (Cykooz) Kuzm... in rannts
По факту самые быстрые валидаторы это "valideer" и "attrs + cattrs"
источник

RB

Roman Bolkhovitin in rannts
"У нас в клубе джентльменам принято верить на слово" (с) 😊
источник

KK

Kirill (Cykooz) Kuzm... in rannts
Хотя заметил что у них Makefile кривой - собирает pydantic без компиляции его через Cython. Сейчас попробую с Cython прогнать бенчи
источник

KK

Kirill (Cykooz) Kuzm... in rannts
Ок, стало лучше.
                pydantic best=52.439μs/iter avg=52.556μs/iter stdev=0.121μs/iter version=1.8.2

Но это какое-то читерство. Если тот же colander прогнать через Cython то он наверное тоже станет быстрее.
источник

SZ

Sergey Z in rannts
А теперь к действительно важному:
https://m.habr.com/ru/company/itsoft/blog/558124/
источник

AG

Alexander Gorokhov in rannts
Хорошие бананы нынче тяжело найти
источник

AG

Alexander Gorokhov in rannts
Как и яблоки
источник

AG

Alexander Gorokhov in rannts
Айдаред уже не айдаред
источник
2021 May 20

💭П

💭 Руслан Прохоров... in rannts
Да :-(((
источник

💭П

💭 Руслан Прохоров... in rannts
И гренни тоже :-(
источник

SZ

Sergey Z in rannts
Пинк Лейди и Гала, ещё Голден. гренни - кислятина :)
источник

KK

Kirill (Cykooz) Kuzm... in rannts
Вот, что и требовалось доказать - Cython творит чудеса и pydantic вдруг оказывается снова не самым быстрым:
pydantic+cython best=51.373μs/iter version=1.8.2
colander+cython best=50.473μs/iter version=1.8
источник

KK

Kirill (Cykooz) Kuzm... in rannts
Хотя стоит отдать должное пидантику - он на выходе даёт не словарик, а объект аля dataclass с которым умеют работать всякие IDE. Это приятный бонус.
источник

RB

Roman Bolkhovitin in rannts
А у cythonized colander тесты проходят?
источник

KK

Kirill (Cykooz) Kuzm... in rannts
Ну тесты самого коландера я пока не проверял. Но тесты бенчмарка от pydantic отработали без ошибок
источник

SA

Sergey Arkhipov in rannts
Pydantic очень лаконичный, за то и любим. Он не самый быстрый, это факт (из моего опыта, в проекте. где его добавили для упрощения валидации данных то, где справлялось 4 контейнера, резко потребовалось 10 на той же нагрузке), но тем не менее.

Colander увидел только сейчас. Он очень громоздкий, как и Marshmallow. Да, безусловно где-то погибче, но все равно очень-очень шумный
источник

SA

Sergey Arkhipov in rannts
С этим всем можно работать, конечно. Но и Marshmallow, и Colander требуют хорошей дисциплины. Там где я бы все запихнул в один файл с Pydantic'ом, мне бы пришлось делать модуль и аккуратно все разносить по файлам. Не берусь спорить, это хорошо или плохо. Просто наблюдение
источник