home.social

#starlette — Public Fediverse posts

Live and recent posts from across the Fediverse tagged #starlette, aggregated by home.social.

  1. 3/3

    This is a supply chain story dressed as a CVE. The ecosystem was built too fast. Security assumed it would catch up. It hasn't.

    Digital sovereignty without perimeter defence is just security theatre. If you're running MCP servers and you skip the proxy because 'it adds complexity,' you've already lost.

    haunted.lighthouse.co.im/artic

    #BadHost #CVE202648710 #Starlette #FastAPI #MCP #SupplyChain #CyberSecurity #DigitalSovereignty #ShadowIT #Architecture

  2. HTTP-кеширование изнутри: ETag, Last-Modified и эвристика браузера

    Как браузер принимает решение о кешировании? Что такое условный HTTP-запрос? Как возникает 304 Not Modified? Как устроен принудительный запрос ресурса, минуя кеш? Если эти вопросы для вас актуальны, прошу на огонёк. Изложение намеренно подробное: статья адресована и тем, кто только начинает путь в веб-разработке, и тем, кто просто хочет закрыть отдельные пробелы в понимании механизма кеширования. Скажем "нет" слепому копированию заголовков кеширования. Погружаемся

    habr.com/ru/articles/1010594/

    #сети #http #кеширование #кэширование #rfc9111 #starlette #uvicorn #httpсервер #браузеры #rfc9110

  3. HTTP-кеширование изнутри: ETag, Last-Modified и эвристика браузера

    Как браузер принимает решение о кешировании? Что такое условный HTTP-запрос? Как возникает 304 Not Modified? Как устроен принудительный запрос ресурса, минуя кеш? Если эти вопросы для вас актуальны, прошу на огонёк. Изложение намеренно подробное: статья адресована и тем, кто только начинает путь в веб-разработке, и тем, кто просто хочет закрыть отдельные пробелы в понимании механизма кеширования. Скажем "нет" слепому копированию заголовков кеширования. Погружаемся

    habr.com/ru/articles/1010594/

    #сети #http #кеширование #кэширование #rfc9111 #starlette #uvicorn #httpсервер #браузеры #rfc9110

  4. HTTP-кеширование изнутри: ETag, Last-Modified и эвристика браузера

    Как браузер принимает решение о кешировании? Что такое условный HTTP-запрос? Как возникает 304 Not Modified? Как устроен принудительный запрос ресурса, минуя кеш? Если эти вопросы для вас актуальны, прошу на огонёк. Изложение намеренно подробное: статья адресована и тем, кто только начинает путь в веб-разработке, и тем, кто просто хочет закрыть отдельные пробелы в понимании механизма кеширования. Скажем "нет" слепому копированию заголовков кеширования. Погружаемся

    habr.com/ru/articles/1010594/

    #сети #http #кеширование #кэширование #rfc9111 #starlette #uvicorn #httpсервер #браузеры #rfc9110

  5. HTTP-кеширование изнутри: ETag, Last-Modified и эвристика браузера

    Как браузер принимает решение о кешировании? Что такое условный HTTP-запрос? Как возникает 304 Not Modified? Как устроен принудительный запрос ресурса, минуя кеш? Если эти вопросы для вас актуальны, прошу на огонёк. Изложение намеренно подробное: статья адресована и тем, кто только начинает путь в веб-разработке, и тем, кто просто хочет закрыть отдельные пробелы в понимании механизма кеширования. Скажем "нет" слепому копированию заголовков кеширования. Погружаемся

    habr.com/ru/articles/1010594/

    #сети #http #кеширование #кэширование #rfc9111 #starlette #uvicorn #httpсервер #браузеры #rfc9110

  6. От WSGI к ASGI: как Python научился работать с асинхронным вебом

    WSGI и ASGI — то, на чем стоит весь современный веб на Python. Это стандарты, которые описывают интерфейс между веб-сервером и приложением. Благодаря им сервер и фреймворк не образуют жесткую пару: любой WSGI-сервер запускает любое WSGI-приложение, любой ASGI-сервер любое ASGI-приложение. Uvicorn не знает ничего о FastAPI, FastAPI не знает ничего о Uvicorn, они знают только о том, что передать на вход и что ожидать на выходе. Разберем, как все это устроено. Погружаемся

    habr.com/ru/articles/1003282/

    #python #asgi #wsgi #вебсервер #asyncio #starlette #uvicorn

  7. Urich: DDD и CQRS для микросервисов на Starlette без ручной раскладки роутов

    Когда строим бэкенд по DDD и CQRS, роуты и OpenAPI обычно собираем вручную. Urich делает иначе: описываешь ограниченный контекст одним объектом — маршруты и документация появляются сами. Обзор фреймворка на Starlette и примеры кода.

    habr.com/ru/articles/1002994/

    #python_3 #starlette #ddd #cqrs #микросервисы

  8. Ваша LLM стримит в никуда: разбираемся, как работать с дисконнектами в FastAPI

    Что делает ваше FastAPI-приложение, когда клиент неожиданно закрывает соединение? По умолчанию — ничего. Если сервису важно экономить ресурсы (например, при работе с LLM), дисконнекты приходится обрабатывать явно, иначе GPU продолжит генерировать токены в пустоту. В FastAPI есть встроенные механизмы отмены обработки запроса при дисконнекте клиента. Однако просто включить их недостаточно: нужно подготовить ваш код к этому. Иначе возможны проблемы: зависшие транзакции и сломанный пул соединений с БД.

    habr.com/ru/companies/tochka/a

    #fastapi #starlette #uvicorn #стримминг #sse #дисконнекты #отмена_запроса #asgi

  9. Ваша LLM стримит в никуда: разбираемся, как работать с дисконнектами в FastAPI

    Что делает ваше FastAPI-приложение, когда клиент неожиданно закрывает соединение? По умолчанию — ничего. Если сервису важно экономить ресурсы (например, при работе с LLM), дисконнекты приходится обрабатывать явно, иначе GPU продолжит генерировать токены в пустоту. В FastAPI есть встроенные механизмы отмены обработки запроса при дисконнекте клиента. Однако просто включить их недостаточно: нужно подготовить ваш код к этому. Иначе возможны проблемы: зависшие транзакции и сломанный пул соединений с БД.

    habr.com/ru/companies/tochka/a

    #fastapi #starlette #uvicorn #стримминг #sse #дисконнекты #отмена_запроса #asgi

  10. Python devs! Small quiz for you. (This is not a support request.)

    Have a look at starlette.dev/middleware/.

    As you can see, there's a Middleware() wrapper that takes a class name and arguments, so some kind of delayed construction takes place here. The question is: how delayed?

    Take a guess when in your application's lifetime a middleware instance (e.g. CORSMiddleware) actually gets initialized.

    ("ASGI server starts" means it's getting ready to handle requests.)

    #Python #Starlette

  11. FastOpenAPI: автодокументация OpenAPI для разных фреймворков на Python

    Всем привет! Меня зовут Никита Рыженков, и я хочу поделиться опытом разработки библиотеки FastOpenAPI. Это инструмент, который приносит удобный стиль маршрутизации FastAPI и автоматическую документацию OpenAPI в целый ряд Python-фреймворков. Идея родилась из личной боли: в одном проекте приходилось поддерживать OpenAPI-документацию сразу в нескольких фреймворках, и я устал дублировать решения под каждый из них. Вдохновившись лаконичностью FastAPI, я решил создать унифицированный подход для Flask, AioHttp, Sanic, Falcon, Starlette, Quart, Tornado – назвал его FastOpenAPI​. В этой статье расскажу, какие проблемы решает FastOpenAPI, как он устроен внутри и как им пользоваться с примерами кода под каждый поддерживаемый фреймворк.

    habr.com/ru/articles/903622/

    #python #openapi #flask #falcon #aiohttp #sanic #starlette #tornado #opensourсe #сезон_open_source

  12. The responsible disclosure process wasn't the smoothest I've ever had, but in the end we got this fixed, and that's what matters.

    This issue is very similar to #CVE-2024-47874 in #Starlette (#FastAPI), which was fixed a lot quicker and with a lot less back and forth. I really have to give creds to the Starlette team here. Great work! It was really nice to work with you.

    nvd.nist.gov/vuln/detail/CVE-2

    #infosec

  13. The #FastAPI devs published an update 3 days before the security release of #Starlette that widened the version range of the dependency just enough to allow the to-be-released patch. Sneaky!

    github.com/fastapi/fastapi/pul

  14. A mówiłem sobie, że będę pisał ogólnie o problemach, zamiast pokazywać palcami konkretne projekty, ale takie podejście zdaje się mieć więcej sensu przy pomyłkach niż przy celowym, szkodliwym zachowaniu. Tak więc…

    Tasiemiec się ciągnie. Dwie paczki na #PyPI, #multipart i python-multipart, roszczą sobie prawa do nazwy modułu Pythona "multipart". Autorzy obydwu argumentują, każdy na swoją korzyść, żaden nie chce ustąpić, a ostatecznie proponują ten sam kompromis: włączanie zależności w kod. Z tą tylko różnicą, że jeden sugeruje, że kiedyś włączy swoją wersję w swoją popularną paczkę (w bliżej nieokreślonej przyszłości), a drugi sugeruje, by inne paczki w międzyczasie włączały potrzebną im wersję.

    Mamy tu całkiem sporą szkodę. Najpierw ludzie zaczynają używać w swoim projekcie jednej z paczek. Następnie dowiadują się, że właśnie wprowadzili konflikt zależności. I jedyne wyjście z sytuacji, to włączyć jakąś wersję jednej z paczek. A pewnego dnia powstały bajzel będzie trzeba uprzątnąć.

    Rzecz jasna, pojawia się już poszukiwanie rozwiązań technicznych na ten problem natury osobowej. Myślę, że sam zmienię nazwę w #Gentoo, i połatam wsteczne zależności, żeby już teraz móc zacząć pozbywać się włączanych zależności. Co za bajzel.

    Na marginesie: jeżeli używacie teraz #starlette, możecie chcieć rozważyć bardziej przyjazne dla ekosystemu alternatywy.

    github.com/pypa/packaging-prob

    #Python

  15. I've told myself that I'm going to point out generic issues rather than point fingers at specific projects, but I guess that makes more sense for mistakes rather than deliberate harmful behavior, so…

    The drama continues. The #multipart and python-multipart #PyPI packages both claim the #Python import name of "multipart". Both have arguments for their claims, both refuse to step down, and unsurprisingly, both reach the same compromise: vendoring. Except that one says they're eventually going to vendor it in their popular package (at some future time), while the other tells everyone to vendor the other package in the meantime.

    The damage is quite deep here. First, people start using one of the packages. Then they learn that they've just introduced a potential dependency conflict. And the only thing that they can do now is start vendoring an arbitrary version of the package. And one day, someone will have to clean this mess up.

    And of course, people are now looking for technical solutions to this disturbing social problem. In fact, I'll probably end up going for the rename-and-patch approach in #Gentoo to start unvendoring immediately. What a mess.

    The bottom line is: if you're using #starlette, you may want to reconsider.

    github.com/pypa/packaging-prob

  16. RT @marcelotryle

    Just released Starlette 0.38.3! 🚀

    We now officially support Python 3.13, and @adriangb fixed a bug in the BaseHTTPMiddleware. 🛠️

    @FastAPI users get this update out-of-the-box! 🙌

    Have a beautiful Sunday, everyone! 💖👋

    github.com/encode/starlette/re

  17. Should I add the `async` keyword to my API methods that call opensearch, redis, postgres, & other microservices?

    context:
    #connexion + #starlette + #uvicorn + #gunicorn + supervisord, #python 3.12

    #asyncio

  18. #Starlette (and thus #FastAPI) does self.render() in Response.__init__() to populate self.body, meaning that for example a JSONResponse will always instantly render its JSON to bytes as soon as it's constructed, not lazily when it's actually about to be sent.

    This becomes a bit of an issue when you'd like to modify the original data in a middleware, because you basically have to re-parse the bytes into a Python object, then render them again.

    There's also no way to access the original object.

  19. Also, #FastAPI / #Starlette middleware should totally have a way to get a reference to the function that handled the request. Make it a property on the Response object.

    (Yes, I will open an issue about that and maybe even write a PR, but not tonight. Tonight there's only energy for tootin'.)