Bogdan (SirEdvin)
Нет, но как бы django же тоже не спасает от того, что нужно выбирать либу
Bogdan (SirEdvin)
Когда-то спасала, а теперь уже нет
Vladimir
Кто же с этим спорит! Выбирать постоянно приходится
Андрей
Bogdan (SirEdvin)
Кто же с этим спорит! Выбирать постоянно приходится
А автор оригинальног коммента жалуется на это
Vladimir
А автор оригинальног коммента жалуется на это
Он говорил о том, что запарился выбирать базовые вещи. Я это так понял
Stepan
Глянул в пипенв, тут flask-restful тоже есть, наверное тот джсон зачем-то тоже подтянули
Stepan
Flask-restful, flask-rest-jsonapi рядом две библиотеки, сиди гадай что где
Дмитрий
Flask-restful, flask-rest-jsonapi рядом две библиотеки, сиди гадай что где
ну, по идее чтение документации на оба + issues гитхаба должны помочь выбрать
Stepan
Уверен, что у каждой из них есть свои плюсы-минксы. Раз одна не задавила другую
Stepan
DRF порешала аналоги
Дмитрий
ну так и здорово же, выбор
Дмитрий
смотришь какие плюсы тебе важнее, какие минусы менее критичны
misanthrop
ну так и здорово же, выбор
Формошлепам он избыточен
Дмитрий
справедливо. но мы же не такие?
misanthrop
Так мы и не жалуемся)
Stepan
ну так и здорово же, выбор
Интересно, до 2004 года и стандарта USB про тысячи переходников так же рассуждали?
Stepan
Лучше одно крутое и полное решение, как по мне
Дмитрий
Интересно, до 2004 года и стандарта USB про тысячи переходников так же рассуждали?
отличный аргумент но нет. хардварные стандарты немного про другое
misanthrop
Лучше одно крутое и полное решение, как по мне
Вот только таких не существует
Andrey
Usb-c похоже станет таким
misanthrop
Usb-c похоже станет таким
Это неверная аналогия
Дмитрий
Это не касается яблочников_))
причем тут яблоко? поддержка десятка разьемов и умение выбрать из трех либ не сопоставимы по затратам от слова совсем
Дмитрий
не говоря о том, что это в целом разные вещи, требующие разного всего, и сравнивать их некорретно
Stepan
Вот только таких не существует
Всё относительно. Когда вообще нет библиотек, фласковские обгрызки выглядят полным решением. Но по сравнению с фласковскими обгрызками DRF выглядит полным решением и т.д. Нам всегда будет не хватать.
Tishka17
когда делаешь что-то совершенно левое, DRF выглядит каком-то монстром
misanthrop
когда делаешь что-то совершенно левое, DRF выглядит каком-то монстром
+ усложняет разработку потому что нужно ещё доку читать а как там они это реализовали
Tishka17
ну доку читать - ладно. Скорее ты просто выкидываешь почти все готовые компоненты
Anonymous
Господа, у кого-нибудь есть идеи, как заставить этот сниппет заработать в Python 3.6? https://pastebin.com/uRpumGiB Очевидно, проблема в этом баге, который пофиксили в PEP 560, но опции перейти на 3.7 у меня сейчас нету
Anonymous
#работа #удаленка На проект требуется python-разработчик Нужно написать бэк для браузерной игры покер. Уже есть готовое решение с гитхаба, нужно его переделать под наши требования, а именно дописать простое АПИ и соединить с нашим фронтом Стек: Python, Flask, redis, MongoDB или любая удобная вам СУБД Оплата : договорная за задачу, наш бюджет до 100 тысяч рублей
Mikhail
Кто-нибудь подвергал изменению объект dataframe pandas sql-запросом внутри python3?
Tishka17
Что за баг не открывается, сорри
Anonymous
Эм. А зачем так?
Что именно зачем?
Tishka17
kwarg при наследовании
Tishka17
И init subclass метод
Daniil
Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/lib/python3.6/typing.py", line 682, in inner return func(*args, **kwds) File "/usr/lib/python3.6/typing.py", line 1143, in __getitem__ orig_bases=self.__orig_bases__) File "/usr/lib/python3.6/typing.py", line 978, in __new__ self = super().__new__(cls, name, bases, namespace, _root=True) File "/usr/lib/python3.6/typing.py", line 137, in __new__ return super().__new__(cls, name, bases, namespace) File "/usr/lib/python3.6/abc.py", line 133, in __new__ cls = super().__new__(mcls, name, bases, namespace, **kwargs) TypeError: __init_subclass__() missing 1 required positional argument: 'kw_only_arg'
Daniil
там такой трэйс на 3.6
Anonymous
На основе него в реальном коде производится некая дополнительная работа То же самое можно было бы достичь зафигачив метакласс
Anonymous
там такой трэйс на 3.6
Да При этом на 3.7 работает нормально, потому что в 3.7 нативные генерики
nxexox
Лучше одно крутое и полное решение, как по мне
Если интересно я пробовал аналог делать, пока есть сериалайзеры остальное допиливать планирую. Сам использую на фласке и аиохттп активно(сериалайзеры тащят) https://github.com/nxexox/python-rest-framework
Tishka17
Хм. Я с настороженностью отношусь к метаклассам в реальном коде. Ты уверен, что нельзя это заменить на композицию?
Anonymous
В реальности я с помощью этого кода составляю список подклассов Это можно сделать вручную, но тогда это придётся делать в ещё одном месте
Tishka17
Список подклассов?
Tishka17
Зачем такое может понадобиться?
Nikolay Markov
Зачем такое может понадобиться?
Это офигенно, если надо отслеживать экземпляры
Anonymous
Зачем такое может понадобиться?
Вкратце: есть события, есть обработчики событий. Обработчик событий наследуется от базового обработчика с дополнительным аргументом в виде типа события, который он может обрабатывать. На основе этого составляется таблица роутинга.
Bogdan (SirEdvin)
Зачем такое может понадобиться?
например, что бы выбирать стратегию поведения. В базовом классе абстрактная логика, в наследниках реализация. И вместо регистрации ручками, автоматическая
Anonymous
Этот уровень магичности я считаю допустимым для реального кода Я ж не AST переписываю, а всего лишь хуки добавляю
Nikolay Markov
Для отладки - ок. Но не более
Наоборот. Для боя, когда у тебя паттерны строгие. Но сложной логики там быть не должно, конечно
Anonymous
Автоматический выбор реализации
Tishka17
Автоматический выбор реализации делается с помощью паттерна стратегия
Anonymous
Есть разные типы обработчиков Условно, у нас происходит два типа событий, на каждое из них свой обработчик
Anonymous
Соответственно, обработчик — генерик по типу события
Bogdan (SirEdvin)
Anonymous
И так как в Python не вполне полноценные генерики, то выбор реализации приходится костылить вручную
Slam!
Что такое генерики?
Anonymous
А в чём их неполноценность?
Они ничего не делают в рантайме, фактически В идеале, class A(Generic[T]): def __init__(val: T): ... class B(A[int]): ... class C(A[str]): ... A[int](1) # Не даст B(1) A(1) # Тем более
misanthrop
Что такое генерики?
Пользовательские типы данных если в двух словах
Tishka17
наследник - это наслденик
Tishka17
к механизму дженериков не имеет никакого отношения
Anonymous
Если T определить как controversial, то наследование имеет несколько другую семантику
Tishka17
они остаются наследниками, но нарушается принцип подстановки. Но да
Anonymous
Тогда B — это специализация A
Tishka17
ну
Tishka17
B - это специализация A[int]