Bogdan (SirEdvin)
Нет, но как бы django же тоже не спасает от того, что нужно выбирать либу
Bogdan (SirEdvin)
Когда-то спасала, а теперь уже нет
Vladimir
Кто же с этим спорит! Выбирать постоянно приходится
Tishka17
Андрей
Bogdan (SirEdvin)
Stepan
Глянул в пипенв, тут flask-restful тоже есть, наверное тот джсон зачем-то тоже подтянули
Andrey
Stepan
Flask-restful, flask-rest-jsonapi рядом две библиотеки, сиди гадай что где
Vladimir
Stepan
Уверен, что у каждой из них есть свои плюсы-минксы. Раз одна не задавила другую
Stepan
DRF порешала аналоги
Дмитрий
ну так и здорово же, выбор
Дмитрий
смотришь какие плюсы тебе важнее, какие минусы менее критичны
misanthrop
Дмитрий
справедливо. но мы же не такие?
misanthrop
Так мы и не жалуемся)
Stepan
Лучше одно крутое и полное решение, как по мне
Дмитрий
Vladimir
misanthrop
Andrey
Usb-c похоже станет таким
misanthrop
Дмитрий
Это не касается яблочников_))
причем тут яблоко? поддержка десятка разьемов и умение выбрать из трех либ не сопоставимы по затратам от слова совсем
Дмитрий
не говоря о том, что это в целом разные вещи, требующие разного всего, и сравнивать их некорретно
Stepan
Вот только таких не существует
Всё относительно. Когда вообще нет библиотек, фласковские обгрызки выглядят полным решением. Но по сравнению с фласковскими обгрызками DRF выглядит полным решением и т.д. Нам всегда будет не хватать.
Tishka17
когда делаешь что-то совершенно левое, 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
Tishka17
Что за баг не открывается, сорри
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
На основе него в реальном коде производится некая дополнительная работа
То же самое можно было бы достичь зафигачив метакласс
nxexox
Лучше одно крутое и полное решение, как по мне
Если интересно я пробовал аналог делать, пока есть сериалайзеры остальное допиливать планирую. Сам использую на фласке и аиохттп активно(сериалайзеры тащят)
https://github.com/nxexox/python-rest-framework
Tishka17
Хм. Я с настороженностью отношусь к метаклассам в реальном коде. Ты уверен, что нельзя это заменить на композицию?
Anonymous
В реальности я с помощью этого кода составляю список подклассов
Это можно сделать вручную, но тогда это придётся делать в ещё одном месте
Nikolay Markov
Tishka17
Список подклассов?
Bogdan (SirEdvin)
Tishka17
Зачем такое может понадобиться?
Alex
Tishka17
Anonymous
Зачем такое может понадобиться?
Вкратце: есть события, есть обработчики событий. Обработчик событий наследуется от базового обработчика с дополнительным аргументом в виде типа события, который он может обрабатывать. На основе этого составляется таблица роутинга.
Bogdan (SirEdvin)
Зачем такое может понадобиться?
например, что бы выбирать стратегию поведения. В базовом классе абстрактная логика, в наследниках реализация. И вместо регистрации ручками, автоматическая
Anonymous
Этот уровень магичности я считаю допустимым для реального кода
Я ж не AST переписываю, а всего лишь хуки добавляю
Anonymous
Tishka17
Anonymous
Автоматический выбор реализации
Tishka17
Tishka17
Автоматический выбор реализации делается с помощью паттерна стратегия
Anonymous
Есть разные типы обработчиков
Условно, у нас происходит два типа событий, на каждое из них свой обработчик
Anonymous
Соответственно, обработчик — генерик по типу события
Bogdan (SirEdvin)
Anonymous
И так как в Python не вполне полноценные генерики, то выбор реализации приходится костылить вручную
Nikolay Markov
Slam!
Что такое генерики?
Tishka17
Anonymous
А в чём их неполноценность?
Они ничего не делают в рантайме, фактически
В идеале,
class A(Generic[T]):
def __init__(val: T): ...
class B(A[int]): ...
class C(A[str]): ...
A[int](1) # Не даст B(1)
A(1) # Тем более
Tishka17
Tishka17
наследник - это наслденик
Tishka17
к механизму дженериков не имеет никакого отношения
Anonymous
Если T определить как controversial, то наследование имеет несколько другую семантику
Tishka17
они остаются наследниками, но нарушается принцип подстановки. Но да
Anonymous
Тогда B — это специализация A
Tishka17
ну
Tishka17
B - это специализация A[int]