Skip to content

Instantly share code, notes, and snippets.

@kgriffs
Last active May 10, 2021 22:23
Show Gist options
  • Save kgriffs/a719c84aa33069d8dcf98b925135da39 to your computer and use it in GitHub Desktop.
Save kgriffs/a719c84aa33069d8dcf98b925135da39 to your computer and use it in GitHub Desktop.
Falcon 3.0 Roadmap

Falcon 3.0 Roadmap

3.0.0a1

  • Review/Merge the ASGI implementation - PR #1573
  • Review/Merge native form parsing (WSGI only) - PR #1549
  • Fix doc formatting issue (see also comment on PR #1566)
  • Get tests to pass on Windows
  • Add windows gate to Travis CI

3.0.0a2

  • Tweak ASGI and form interfaces (if needed) based on alpha tester feedback
  • Finish ASGI Docs (including Changelog snippets)
  • Finish multipart form parsing docs
  • Add async support for multipart form parsing
  • Review/Merge PR backlog

3.0.0a3

  • ASGI WebSocket impl. + docs - PR #1741
  • Tweak ASGI and form interfaces (if needed) based on alpha tester feedback
  • Review/Merge PR backlog

3.0.0b1

  • ASGI tutorial
  • Implement and merge remaining items from the 3.0 milestone in the issue tracker (delay low-priority items to 3.1/4.0 as needed)
  • Semi-final performance testing and optimization
  • Semi-final changelog updates
  • Render changelog news fragments (so far)

3.0.0bx

  • Bug fixes
  • Final performance testing and optimization
  • Final changelog updates
  • Review/Merge PR backlog (or delay community PRs to 3.x/4.x as needed)

3.0.0rc1

  • Critical bug fixes and non-invasive documentation improvements ONLY
  • Render changelog news fragments to changelog and remove fragment files
  • Finalize "Contributors to this Release" section in the changelog
  • Add release summary to changelog

3.0.0

  • Stable release!
  • Update sponsors on falconframework.org - #1838
  • Update benchmarks on falconframework.org - #1822
  • Update colors and/or layout on falconframework.org so people know something has changed (i.e., 3.0) - #1028
@nmcbride
Copy link

nmcbride commented Apr 3, 2020

No apologies are necessary, you guys are doing a great job. I put a project on hold for a year because I wanted to use falcon but wanted to do so with web socket support for real time collaboration. I do not regret that decision at all and will patiently keep waiting. I understand that everyone thinks their application is the most important focus in the world right now but don't let yourself feel pressured because of it. You guys take care of yourselves first and foremost and we'll happily keep waiting and be content when it's released. I am going to start building up the new API with the pre-release and see if I cant get some web socket stuff going as well as looking into umongo for async db. You guys just keep doing what you are doing and know that we all appreciate it greatly.

R,
Nate

@onecrayon
Copy link

Are websockets still targeted for 3.0, or are they likely to be moved back to 3.1? I've been plugging away at a personal project using the 3.0 alpha that I knew was going to need websocket support down the road, but it turns out I'll need it earlier in the process than I thought. I'm trying to figure out if I should postpone work on this section of the app on the assumption that websockets will be included in 3.0 with some patience, or if I should evaluate lesser frameworks.

Thanks for your work on 3.0! I'm really enjoying the ASGI support so far.

@kgriffs
Copy link
Author

kgriffs commented May 5, 2020

Hi @onecrayon, thanks for reaching out. I can't promise anything, but I will take a look and see if I can get an initial WebSocket implementation done for 3.0. I don't want to push out the release any longer than we have to (since things already got a bit delayed) but I may be able to sneak something in while @vytas7 is finishing up multipart/form-data.

If you have thoughts on https://gist.github.com/kgriffs/023dcdc39c07c0ec0c749d0ddf29c4da please let me know!

@nmcbride
Copy link

@kgriffs that would be awesome; I am in the same boat as @onecrayon. Out of curiosity what needed to be done with multipart/form-data? Asking just encase it will impact those of us using the alpha.

@vytas7
Copy link

vytas7 commented May 20, 2020

Hi @nmcbride ! Proper ASGI support is lacking for multipart/form-data. You could probably (attempt to) parse it with the current handler in ASGI too, but then the whole form would be first buffered in a bytestring, and possibly other bad things would happen.

The WSGI multipart code has not seen any changes since the first alpha yet (bar some docs polish) AFAIK.

@vytas7
Copy link

vytas7 commented Jun 3, 2020

Multipart (ASGI): I have finally resumed active work on the async multipart/form-data parser.

Although I still have one edge case memory usage tweak in mind (and the whole thing is probably not very optimized for small wrapped stream reads), but it is hopefully getting usable. Also working on the corresponding tests (very sparse atm) and docs (missing altogether).

This Gist explains how to test the current state of the prototype: multipart/form-data demo in ASGI Falcon.

@nmcbride
Copy link

Thanks I'm getting ready to test it out and will let you know how it goes.

@vytas7
Copy link

vytas7 commented Jul 1, 2020

Multipart (ASGI): PR #1728 is ready for review! The ASGI multipart/form-data demo Gist is still valid, don't hesitate to give it a spin 😉

As the next step, I'll try to clean up my offshore Falcon+ASGI tutorial and submit it as a PR.

Furthermore, we have a couple of high impact breaking changes and other items needing decision left, mostly related to request query parameter and media handling.
And, as always, merging the PR backlog from our awesome community.

@vytas7
Copy link

vytas7 commented Aug 3, 2020

Multipart (ASGI) (PR #1728) – ready for the second round of reviews! Thanks @kgriffs & @CaselIT for feedback.

I have also proposed PRs (some have already got merged) for several smaller high-priority issues within the 3.0 milestone, as well as created a couple of documentation recipe PRs based on discussions on our Gitter channels.

Next, I'm aiming at finishing and cleaning up my ASGI tutorial PR, as well as moving it from Draft.

@vytas7
Copy link

vytas7 commented Aug 4, 2020

ASGI Multipart PR has been merged!

@kgriffs
Copy link
Author

kgriffs commented Aug 7, 2020

@kgriffs
Copy link
Author

kgriffs commented Aug 7, 2020

3.0.0a2 Was just published. Kick the tires and let us know what you think! This version adds ASGI support to the new multipart form parser and a number of other tweaks and optimizations, as well as improved docs. I have updated the roadmap above to reflect planned next steps.

@kgriffs
Copy link
Author

kgriffs commented Nov 19, 2020

WebSocket implementation is completed and docs for the same are 90% done. I will be updating my PR and taking it out of draft status very soon. Let's try to get the first beta out over the next two weeks.

@kgriffs
Copy link
Author

kgriffs commented Nov 25, 2020

WebSocket PR merged: falconry/falcon#1741

@kgriffs
Copy link
Author

kgriffs commented Dec 1, 2020

3.0.0a3 is now available with WebSocket support and cythonized wheels! This is our final alpha, so please give us feedback on any design changes you might want for the new features! The first beta is just around the corner.

@kgriffs
Copy link
Author

kgriffs commented Dec 18, 2020

First beta should be available very soon.

@vytas7
Copy link

vytas7 commented Dec 19, 2020

@kgriffs
Copy link
Author

kgriffs commented Dec 23, 2020

I am pleased to announce that the first beta is now available on GH and PyPI. RTD has also been updated so you can select 3.0.0b1. More info here: https://github.com/falconry/falcon/releases/tag/3.0.0b1

@kgriffs
Copy link
Author

kgriffs commented Feb 17, 2021

Second beta should be landing soon.

@kgriffs
Copy link
Author

kgriffs commented Mar 9, 2021

New: Second beta now available for testing. First release candidate will arrive soon, so please test this beta ASAP. Thanks! https://github.com/falconry/falcon/releases/tag/3.0.0b2

@kgriffs
Copy link
Author

kgriffs commented Mar 19, 2021

@kgriffs
Copy link
Author

kgriffs commented Mar 30, 2021

@btegs
Copy link

btegs commented Apr 3, 2021

Silly question, but are you still supporting Cython in v3.0? I ask because I wasn't sure if you were going to ship Cythonized versions of the package or if you want us to do a command like pip3 install -v --no-binary :all: falcon==3.0.0rc2 every time we install.

I've also been using Poetry for the past year or so and it has been great: https://python-poetry.org/

@vytas7
Copy link

vytas7 commented Apr 3, 2021

Hi @btegs,
And sorry for the confusion, we'll check the docs.

But the answer is that we are shipping wheels for all popular platforms and architectures, so normally you shouldn't need to cythonize manually that way.

@btegs
Copy link

btegs commented Apr 3, 2021

Hi @btegs,
And sorry for the confusion, we'll check the docs.

But the answer is that we are shipping wheels for all popular platforms and architectures, so normally you shouldn't need to cythonize manually that way.

Sounds good. Btw have you tried Poetry before? I find it handy when I mix it with pyenv, install the Python version I want, then use either a local or global .python-version and run poetry new project1 to keep everything organized and manage my packages in the .toml file.

@vytas7
Copy link

vytas7 commented Apr 3, 2021

I've tried Poetry briefly, but haven't looked more in depth. It is listed as one of the alternatives if/when we decide to proceed with PEP 517. Poetry looks to be the most solid option for managing dependencies by a country mile, but, OTOH, Falcon has no hard dependencies on any third party library.

Resorting to pip install --no-binary :all: ... is still needed in case the wheel is unavailable, which might happen in the following scenarios:

  • No wheel is available for the interpreter in question, e.g., Python 3.10 is released and our stable release won't have a wheel for that.
  • No wheel is available for the architecture in question, like i386 etc.
  • It is desirable to deploy a version other than a release on PyPi, e.g., the latest GitHub snapshot etc.

Btw regarding Falcon 3.0 + Cython, there are some good news, and some worse:

  • ➕ (Blowing my own 🎺 here) we are now offering pure Cython code for certain parts of the framework, like decoding a query string. On CPython, this can outperform the std lib by an order of magnitude for percent-encoded query strings.
  • ➖ Parts of our ASGI code are not cythonized, as we haven't found any way to utilize a cythonized coroutine in any ASGI server. It seems that wrapping it in another Python async task degrades the performance to worse than pure Python. We'll circle back on this in 3.1: maybe there is a way to speed up coroutines with Cython in a more usable way, or maybe we could offer patches to the popular uvicorn (or other ASGI servers) to somehow remove the said barrier, if at all possible. FWIW, to that end, we have also tried Cython 3.0 alpha, and while that offered a slight improvement, it did not eliminate the issue.

@vytas7
Copy link

vytas7 commented Apr 3, 2021

Btw, absent critical bugs, the plan is to ship a stable release on Monday or Tuesday (6th/7th April). :shipit:

@btegs
Copy link

btegs commented Apr 4, 2021

Btw, absent critical bugs, the plan is to ship a stable release on Monday or Tuesday (6th/7th April). :shipit:

Awesome!

@kgriffs
Copy link
Author

kgriffs commented Apr 5, 2021

@kgriffs
Copy link
Author

kgriffs commented May 10, 2021

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment