I'm proud to announce the release of Morepath 0.16. Morepath_ is a Python web framework that is easy to use and lightweight but grows with you when your project demands more.
Morepath 0.16 is one of the biggest releases of Morepath in a while. I want to discuss a few of the highlights of this release here.
Morepath uses the predicate dispatch library Reg for its view lookup system and other behavior. We've rewritten Reg once again. For most Morepath users nothing changes, except that Reg is faster which also makes Morepath faster. If you want to use Reg directly, the new registration API makes it easier to use.
With Reg you can control the context in which dispatch takes place:
this allows multiple separate configurations of dispatch in the same
runtime. To control context, previously we used an implicit global
lookup object, or an explicit but not very Pythonic
argument. Those are all gone. If you need multiple dispatch contexts
in an application, you can define dispatch methods which derive their
context from their class. This change allowed us to simplify Reg
considerably and increase its performance.
This work was done by Stefano Taschini in collaboration with myself. Thanks Stefano!
New pip-based build system
This only affects us Morepath developers, but it's a significant change, so I want to highlight it here. We have a nice core team of contributors now and I hope we can attract more, after all.
I've been a happy buildout user over the years, so of course I used it
for Morepath's development setup as well. But for a Python-only
project like Morepath,
pip can now do what buildout does. Since
many more Python programmers are familiar with pip, and we want to
make it as easy as possible for someone to start contributing, we've
taken the plunge and entirely replaced buildout with pip. Even a
buildout guy such as myself has been appreciating the results.
This work was done by Henri Hulski. Thanks Henri!
Other significant changes
I took a good look at Traject's routing system with an eye on performance and refactored it.
We realized that the
directivedirective was a bit too magic for its own good. I changed Dectate so that new Morepath configuration directives are now defined directly on the
Appclass using the
dectate.directivefunction. This breaks some code if you define new directives, but it's easy to fix.
Our extensive documentation has had a reorganization of its table of contents.
Look at the detailed changelog for much more information, including upgrade notes.
I benchmarked Morepath quite frequently during this development
cycle. To make benchmarking easier, I created a new benchmarking
tool called howareyou. It can not only benchmark Morepath, but can
also benchmark other web frameworks -- Michael Merickel has in fact
been using it already to help optimize Pyramid. You can find the
howareyou tool here . The
origins of this tool ultimately go back to work by
creator Andriy Kornatskyy.
Morepath uses Webob for its request and response implementation. I learned quite a lot about Webob performance characteristics during this development cycle. This allowed me to make performance tweaks in Morepath.
It also let me detect that Webob's development version had some performance regressions that affected both Pyramid and Morepath. I'm very grateful to Bert Regeer for picking up so quickly and thoroughly on my reports of performance problems in Webob, and the Webob development version is currently actually slightly faster than release 1.6.1.
I talked about Morepath's performance history recently in my article Is Morepath Fast yet?. There we had peaked at about 19000 requests per second (on a synthetic benchmark) for the development version. I am happy to announce that we've managed to increase performance even more in our 0.16 release. It's now more than 28000 requests per second!
Let's compare Morepath with some other carefully selected frameworks:
Cool, Morepath 0.16 is actually faster than Pyramid at this point in
time! I don't expect it to last long given that the Pyramid devs
howareyou to optimize Pyramid, but it's nice to have
such a moment. And I deliberately didn't include Falcon, Bottle or
wheezy.web in this comparison, as that would rather spoil the
effect. Do remember these are somewhat silly, synthetic
benchmarks. It's rare indeed that Python web framework overhead is
going to affect real world performance, but at least Morepath isn't
the slowest one, right?
I hope you all enjoy the fresh new release. Do get in touch with us!