Pull to refresh

Comments 12

Take a look at a simple bash script below.

А почему не сразу на питоне скриптовать? Да и в принципе какой-нибудь простенький менеджер всего этого безобразия консольный написать. crax init, crax serve, crax migrate и прочее в том же духе. Батарейки в комплекте обычно добавляют плюс к размеру комьюнити.


__init__.py

Я же правильно понимаю что проект завязан на Python 3+. Оно вроде с третьей версии не требует скрипта инициализации, если это не фолбэк во вторую версию. Поправьте если не прав.

Есть инструменты работы с командной строкой. Об этом рассказывается в соответствующих главах документации. Но вызов происходит путём python app.py command_name. В основном команды касаются работы с бд. Например python app.py makemigrations, python app.py migrate и прочее. Скриптов создания пустого проекта или неймспейса пока нет. Нет, Вы совершенно правы, начиная с 3.3 пакеты можно без init.py
Оно вроде с третьей версии не требует скрипта инициализации, если это не фолбэк во вторую версию. Поправьте если не прав.

Зависит от того, что вы хотите получить. Разница между namespace и regular packages всё же есть. См. PEP-0420


Пустые __init__ действительно можно выкинуть.

Забавно, что некоторые модули до сих пор требуют init. Например, unittest
python3 -m unittest discover
не находит тесты, если на пути до них не будет везде __init__.py

Посмотрел исходники.
Вы никогда не обращали внимание на то, что в других, "взрослых" фреймворках HTTP-заголовки представлены не совсем обычным питонячим словарём? Обычно это нечто называемое, как минимум, MultiDict (а в идеале там ещё и case-insensetive сравнение ключей).
И ведь не просто так ASGI передаёт приложению заголовки в виде списка тюплов. А вы довольно смело берёте и превращаете этот список в самый обычный словарик.
Думается мне, что вас ждёт ещё много открытий на вашем пути. И с каждым новым открытием ваш фреймворк скорее всего будет становиться медленнее и медленнее.

Спасибо, что интересуетесь.
Положа руку на сердце, в проекте достаточно «детских» решений, которые ещё придётся изменять и дополнять.
Касаемо преобразования list of tuples в словарик. Мы, естественно, преобразуем ASGI scope
(https://asgi.readthedocs.io/en/latest/specs/www.html#http-connection-scope). Я, разумеется, читал (https://github.com/encode/starlette/blob/c566fc6c819f0d565f8cff432351fe009e83d866/starlette/datastructures.py#L487). И, несомненно, у этого есть высокая цель. Я даже подозреваю какая: Объект заголовков должен быть неизменяемым на момент всего выполнения запроса каким бы долгим он ни был — это первое. Второе — «Duplicates are possible and must be preserved in the message as received». Именно поэтому Ваше сообщение вызывает уважение. Я размышлял очень много над объектом реквеста (он практически неизменен с первых строк проекта), и я хочу что-то делать не потому что «А у взрослых дяденек так», а потому что так действительно стоит делать. В данном конкретном случае ТАК действительно нужно делать только потому, что так говорит ASGI спецификация. Как именно это выполнить, я пока не знаю.
Что я имею в виду: Объект реквеста, с предоставляемыми атрибутами может быть изменён приложением во время выполнения. При этом объект ASGI scope останется неизменным. Опасность заключается в том, что эти объекты могут не совпадать. Я понимаю риск. Я понимаю, что объект реквеста, который передаётся в течение всего цикла запроса есть желание изменить. Для этих целей, например, у Starlette есть State.
Я не уверен, как делать это в Crax.

Если что, то это не ASGI говорит, это спека на HTTP говорит, что может быть несколько заголовков с одинаковым именем. И это нормальная ситуация.

Совершенно верно. Значения заголовков с одинаковыми названиями МОГУТ быть объединены в один. В том случае, если значения представляют собой список значений, разделённый запятой. Во всех остальных случаях последнее значение «перекрывает» предыдущее. Текущая ситуация может породить похожий тред:
github.com/nodejs/node/issues/3591
Нам точно нужна +1 зависимость чтобы писать конфиг?

Иногда да, иногда нет. Я в последнее время использовал fastapi, а с ним pydantic. Конфиги пришли приятным бонусом.
А до этого мы в проектах использовали envparse для чтения переменных окружения (я знаю про os.environ), так что все равно была +1 зависимость.

Single man army — это почти гарантия того, что рано или поздно проект будет заброшен.


Мне нравится «почти». «Можете со мной поспорить и переспорить, но это не будет считаться, потому что я сказал волшебное слово „почти“. „

И вывод странный. Все до одного фреймворки в любом языке когда-то были single man army. А вы как хотели, чтобы сразу сообщество выросло в первый месяц-год?

Что-то забросили, а что-то выросло.
Sign up to leave a comment.

Articles