Changelog for Falcon 1.4.0 ========================== Breaking Changes ---------------- - :attr:`falcon.testing.Result.json` now returns None when the response body is empty, rather than raising an error. Changes to Supported Platforms ------------------------------ - Python 3 is now supported on PyPy as of PyPy3.5 v5.10. - Support for CPython 3.3 is now deprecated and will be removed in Falcon 2.0. - As with the previous release, Python 2.6 and Jython 2.7 remain deprecated and will no longer be supported in Falcon 2.0. New & Improved -------------- - We added a new method, :meth:`~.API.add_static_route`, that makes it easy to serve files from a local directory. This feature provides an alternative to serving files from the web server when you don't have that option, when authorization is required, or for testing purposes. - Arguments can now be passed to hooks (see :ref:`Hooks `). - The default JSON media type handler will now use `ujson `_, if available, to speed up JSON (de)serialization under CPython. - Semantic validation via the *format* keyword is now enabled for the :meth:`~falcon.media.validators.jsonschema.validate` JSON Schema decorator. - We added a new helper, :meth:`~falcon.Request.get_param_as_uuid`, to the :class:`~falcon.Request` class. - Falcon now supports WebDAV methods (`RFC 3253 `_), such as UPDATE and REPORT. - We added a new property, :attr:`~falcon.Response.downloadable_as`, to the :class:`~falcon.Response` class for setting the Content-Disposition header. - :meth:`~falcon.routing.create_http_method_map` has been refactored into two new methods, :meth:`~falcon.routing.map_http_methods` and :meth:`~falcon.routing.set_default_responders`, so that custom routers can better pick and choose the functionality they need. The original method is still available for backwards-compatibility, but will be removed in a future release. - We added a new `json` param to :meth:`~falcon.testing.simulate_request` et al. to automatically serialize the request body from a JSON serializable object or type (for a complete list of serializable types, see `json.JSONEncoder `_). - :class:`~.TestClient`'s ``simulate_*()`` methods now call :meth:`~.TestClient.simulate_request` to make it easier for subclasses to override :class:`~.TestClient`'s behavior. - :class:`~.TestClient` can now be configured with a default set of headers to send with every request. - The :ref:`FAQ ` has been reorganized and greatly expanded. - We restyled the docs to match https://falconframework.org Fixed ----- - Forwarded headers containing quoted strings with commas were not being parsed correctly. This has been fixed, and the parser generally made more robust. - :class:`~falcon.media.JSONHandler` was raising an error under Python 2.x when serializing strings containing Unicode code points. This issue has been fixed. - Overriding a resource class and calling its responders via ``super()`` did not work when passing URI template params as positional arguments. This has now been fixed. - Python 3.6 was generating warnings for strings containing ``'\s'`` within Falcon. These strings have been converted to raw strings to mitigate the warning. - Several syntax errors were found and fixed in the code examples used in the docs. Contributors to this Release ---------------------------- Many thanks to all of our talented and stylish contributors for this release! - GriffGeorge - hynek - kgriffs - rhemz - santeyio - timc13 - tyronegroves - vytas7 - zhanghanyun