Wed Aug 2 10:06:33 UTC 2017 - sebix+novell.com@sebix.at
- disable Cython-build because of failing tests
- update to 1.2.0:
* New & Improved
- A new default kwarg was added to falcon.Request.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.
- update to 1.1.0:
* New & Improved
- A new bounded_stream property was added to falcon.Request that can be used in place of the stream property to mitigate the blocking behavior of input objects used by some WSGI servers.
- A new uri_template property was added to falcon.Request to expose the template for the route corresponding to the path requested by the user agent.
- A context property was added to falcon.Response to mirror the same property that is already available for falcon.Request.
- JSON-encoded query parameter values can now be retrieved and decoded in a single step via falcon.Request.get_param_as_dict().
- CSV-style parsing of query parameter values can now be disabled.
- falcon.Request.get_param_as_bool() now recognizes "on" and "off" in support of IE's default checkbox values.
- An accept_ranges property was added to falcon.Response to facilitate setting the Accept-Ranges header.
- Added the falcon.HTTPUriTooLong and falcon.HTTPGone error classes.
- When a title is not specified for falcon.HTTPError, it now defaults to the HTTP status text.
- All parameters are now optional for most error classes.
- Cookie-related documentation has been clarified and expanded
- The falcon.testing.Cookie class was added to represent a cookie returned by a simulated request. falcon.testing.Result now exposes a cookies attribute for examining returned cookies.
- pytest support was added to Falcon's testing framework. Apps can now choose to either write unittest- or pytest-style tests.
- The test runner for Falcon's own tests was switched from nose to pytest.
- When simulating a request using Falcon's testing framework, query string parameters can now be specified as a dict, as an alternative to passing a raw query string.
- A flag is now passed to the process_request middleware method to signal whether or not an exception was raised while processing the request. A shim was added to avoid breaking existing middleware methods that do not yet accept this new parameter.
- A new CLI utility, falcon-print-routes, was added that takes in a module:callable, introspects the routes, and prints the results to stdout. This utility is automatically installed along with the framework:
- $ falcon-print-routes commissaire:api
- -> /api/v0/status
- -> /api/v0/cluster/{name}
- -> /api/v0/cluster/{name}/hosts
- -> /api/v0/cluster/{name}/hosts/{address}
- Custom attributes can now be attached to instances of falcon.Request and falcon.Response. This can be used as an alternative to adding values to the context property, or implementing custom subclasses.
- falcon.get_http_status() was implemented to provide a way to look up a full HTTP status line, given just a status code.
* Fixed
- When auto_parse_form_urlencoded is set to True, the framework now checks the HTTP method before attempting to consume and parse the body.
- Before attempting to read the body of a form-encoded request, the framework now checks the Content-Length header to ensure that a non-empty body is expected. This helps prevent bad requests from causing a blocking read when running behind certain WSGI servers.
- When the requested method is not implemented for the target resource, the framework now raises falcon.HTTPMethodNotAllowed, rather than modifying the falcon.Request object directly. This improves visibility for custom error handlers and for middleware methods.
- Error class docstrings have been updated to reflect the latest RFCs.
- When an error is raised by a resource method or a hook, the error will now always be processed (including setting the appropriate properties of the falcon.Response object) before middleware methods are called.
- A case was fixed in which middleware processing did not continue when an instance of falcon.HTTPError or falcon.HTTPStatus was raised.
- The falcon.uri.encode() method will now attempt to detect whether the specified string has already been encoded, and return it unchanged if that is the case.
- The default OPTIONS responder now explicitly sets Content-Length to zero in the response.
- falcon.testing.Result now assumes that the response body is encoded as UTF-8 when the character set is not specified, rather than raising an error when attempting to decode the response body.
- When simulating requests, Falcon's testing framework now properly tunnels Unicode characters through the WSGI interface.
- import falcon.uri now works, in addition to from falcon import uri.
- URI template fields are now validated up front, when the route is added, to ensure they are valid Python identifiers. This prevents cryptic errors from being raised later on when requests are routed.
- When running under Python 3, inspect.signature() is used instead of inspect.getargspec() to provide compatibility with annotated functions.