Changelog for Falcon 1.2.0

Breaking Changes

(None)

New & Improved

  • A new default kwarg was added to get_header().
  • A delete_header() method was added to falcon.Response.
  • Several new HTTP status codes and error classes were added, such as falcon.HTTPFailedDependency.
  • If ujson is installed it will be used in lieu of json to speed up error serialization and query string parsing under CPython. PyPy users should continue to use json.
  • The independent_middleware kwarg was added to falcon.API to enable the execution of process_response() middleware methods, even when process_request() raises an error.
  • Single-character field names are now allowed in URL templates when specifying a route.
  • A detailed error message is now returned when an attempt is made to add a route that conflicts with one that has already been added.
  • The HTTP protocol version can now be specified when simulating requests with the testing framework.
  • The falcon.ResponseOptions class was added, along with a secure_cookies_by_default option to control the default value of the “secure” attribute when setting cookies. This can make testing easier by providing a way to toggle whether or not HTTPS is required.
  • port, netloc and scheme properties were added to the falcon.Request class. The protocol property is now deprecated and will be removed in a future release.
  • The strip_url_path_trailing_slash was added to falcon.RequestOptions to control whether or not to retain the trailing slash in the URL path, if one is present. When this option is enabled (the default), the URL path is normalized by stripping the trailing slash character. This lets the application define a single route to a resource for a path that may or may not end in a forward slash. However, this behavior can be problematic in certain cases, such as when working with authentication schemes that employ URL-based signatures. Therefore, the strip_url_path_trailing_slash option was introduced to make this behavior configurable.
  • Improved the documentation for falcon.HTTPError, particularly around customizing error serialization.
  • Misc. improvements to the look and feel of Falcon’s documentation.
  • The tutorial in the docs was revamped, and now includes guidance on testing Falcon applications.

Fixed

  • Certain non-alphanumeric characters, such as parenthesis, are not handled properly in complex URI template path segments that are comprised of both literal text and field definitions.
  • When the WSGI server does not provide a wsgi.file_wrapper object, Falcon wraps Response.stream in a simple iterator object that does not implement close(). The iterator should be modified to implement a close() method that calls the underlying stream’s close() to free system resources.
  • The testing framework does not correctly parse cookies under Jython.
  • Whitespace is not stripped when parsing cookies in the testing framework.
  • The Vary header is not always set by the default error serializer.
  • While not specified in PEP-3333 that the status returned to the WSGI server must be of type str, setting the status on the response to a unicode string under Python 2.6 or 2.7 can cause WSGI servers to raise an error. Therefore, the status string must first be converted if it is of the wrong type.
  • The default OPTIONS responder returns 204, when it should return 200. RFC 7231 specifically states that Content-Length should be zero in the response to an OPTIONS request, which implies a status code of 200 since RFC 7230 states that Content-Length must not be set in any response with a status code of 204.