Werkzeug 0.6 – Hammer released
I am incredible happy to announce the latest release of Werkzeug 0.6, the WSGI toolkit for Python. There is so much new in this version, I am not sure where to start :)
- pending deprecations were removed and tons of bugs were fixed. Among those we now have better RFC 2068 compatibility regarding cookie quoting.
- the
FileStorageobject now gives you access to the multipart headers. Also the Google Chrome plaintext file-upload handled as form data is gone now. - The URL routing system is now able to give you back the URL rule object instead of the endpoint. This makes it possible to put more information onto a rule. This can be used to bind a rule to a function and interpolate the rule endpoint string from the function name. When matching, the rule object is returned and with that you have access to both the function and the endpoint name.
- The builtin development server now has SSL support. You can finally test your application via HTTPS without the need of an external server.
- Finally! Response objects are no longer modified in place when evaluated as WSGI application. This is a backwards incompatible change but Werkzeug will warn you if you rely on that behaviour. What does this mean to you? In a nutshell, it is now possible to share response objects between requests. Also, if you freeze a response now, the content length is set automatically.
- If you are working in multi-charset environments, you can configure the Werkzeug wrappers to support dynamic charset setting. This makes it possible to change the content type or charset and the system reacts dynamically when encoding / decoding.
- The wrappers also have a default
__repr__now which spits out useful information. - All the builtin data structures can be pickled now.
- Huge performance improvements for the new multipart parser now. If uploads were slow for you, update right now :)
- If you are working with custom HTTP methods (such as DAV) you can now rely on the stream attribute of the wrappers being usable. Previously you had to fall back to the raw WSGI input stream instead.
- The accept objects returned for accept headers now have a
best_matchmethod that helps you guessing the best type. - Werkzeug is finally able to work with IRIs. You can safely use unicode URLs internally now.
- Also, Werkzeug now provides a
OrderedMultiDictthat preserves order of form data. Use this if you need to ensure that you can process form data without changing the order. From what I've heard, that is a requirement to work with the PayPal API. - The MoinMoin wiki people contributed many patches to improve the filesystem session support from the session contrib module. If you use filesystem sessions, you want to upgrade ASAP :)
- Werkzeug no longer utilizes the time module for header parsing. This means that finally the time parsing behaviour is consistent regarding overflows and works on a wider range of dates. Also it will no longer have undefined behaviour for invalid dates which do occur in the real world :(
- The wrappers allow you to change the collection classes used internally now.
- The Werkzeug debugger should work on the Google Appengine SDK now.
Get it while it's hot from the Python Package Index (aka cheeseshop).
Great news, congratulations and thanks!
— Vinay Sajip on Thursday, February 18, 2010 23:56 #
I think I just hear angels singing…
— Dave K on Friday, February 19, 2010 3:40 #
Together with Jinja2 and SQLAlchemy this offers probably the most flexible and stable Python web development around today.
— Dan on Friday, February 19, 2010 11:58 #
I've been developing with latest snapshot of Werkzeug for the past month. Coming from Django, I'm building Django-like framework with Werkzeug, declarative SQLAlchemy, WTForms, Jinja2. Main focus is "applications" that have mandatory files like modules.py, urls.py, views.py. I borrowed heavily from Glashammer and Zine: Werkzeug requires a lot of boilerplate code to make any non-trivial application.
Are there any plans to add some Glashammer and Zine pieces into Werkzeug itself? What I am talking about is code for building routing map, dispatching, your typical "url_for" function, some rudimentary config system, perhaps event processing. Maybe in the form of contrib? Or is Glashammer a "go to" for that? I actually prefer the way Zine does it for some things.
Excellent release, by the way.
— Alexei Boukirev on Friday, February 19, 2010 15:15 #
That's great new, thanks for the good work. I started using Werkzeug and Jinja 8 months ago and never looked back.
— Julien Demoor on Friday, February 19, 2010 17:57 #
wow, that looks awesome!
congratulations :))
— Muhammad on Sunday, February 21, 2010 9:27 #
Thank you. Keep on the good work.
Regards
— Lutz on Tuesday, February 23, 2010 13:59 #
Weee!
— rodrigo moraes on Tuesday, February 23, 2010 18:17 #
Looking forward to use some new features of this release :-)
werkzeug is really an excellent Python library - and well documented!
— Hyperion on Friday, March 12, 2010 15:51 #
Thank you. Werkzueg is amazing! Using it since 6 months and am so happy :-))
— Maciek on Saturday, March 27, 2010 14:11 #