1173 lines
49 KiB
Text
1173 lines
49 KiB
Text
|
Werkzeug Changelog
|
||
|
==================
|
||
|
|
||
|
Version 0.12.1
|
||
|
--------------
|
||
|
|
||
|
Released on March 15th 2017
|
||
|
|
||
|
- Fix crash of reloader (used on debug mode) on Windows.
|
||
|
(`OSError: [WinError 10038]`). See pull request ``#1081``
|
||
|
- Partially revert change to class hierarchy of `Headers`. See ``#1084``.
|
||
|
|
||
|
Version 0.12
|
||
|
------------
|
||
|
|
||
|
Released on March 10th 2017
|
||
|
|
||
|
- Spit out big deprecation warnings for werkzeug.script
|
||
|
- Use `inspect.getfullargspec` internally when available as
|
||
|
`inspect.getargspec` is gone in 3.6
|
||
|
- Added support for status code 451 and 423
|
||
|
- Improved the build error suggestions. In particular only if
|
||
|
someone stringifies the error will the suggestions be calculated.
|
||
|
- Added support for uWSGI's caching backend.
|
||
|
- Fix a bug where iterating over a `FileStorage` would result in an infinite
|
||
|
loop.
|
||
|
- Datastructures now inherit from the relevant baseclasses from the
|
||
|
`collections` module in the stdlib. See #794.
|
||
|
- Add support for recognizing NetBSD, OpenBSD, FreeBSD, DragonFlyBSD platforms
|
||
|
in the user agent string.
|
||
|
- Recognize SeaMonkey browser name and version correctly
|
||
|
- Recognize Baiduspider, and bingbot user agents
|
||
|
- If `LocalProxy`'s wrapped object is a function, refer to it with __wrapped__
|
||
|
attribute.
|
||
|
- The defaults of ``generate_password_hash`` have been changed to more secure
|
||
|
ones, see pull request ``#753``.
|
||
|
- Add support for encoding in options header parsing, see pull request
|
||
|
``#933``.
|
||
|
- ``test.Client`` now properly handles Location headers with relative URLs, see
|
||
|
pull request ``#879``.
|
||
|
- When `HTTPException` is raised, it now prints the description, for easier
|
||
|
debugging.
|
||
|
- Werkzeug's dict-like datastructures now have ``view``-methods under Python 2,
|
||
|
see pull request ``#968``.
|
||
|
- Fix a bug in ``MultiPartParser`` when no ``stream_factory`` was provided
|
||
|
during initialization, see pull request ``#973``.
|
||
|
- Disable autocorrect and spellchecker in the debugger middleware's Python
|
||
|
prompt, see pull request ``#994``.
|
||
|
- Don't redirect to slash route when method doesn't match, see pull request
|
||
|
``#907``.
|
||
|
- Fix a bug when using ``SharedDataMiddleware`` with frozen packages, see pull
|
||
|
request ``#959``.
|
||
|
- `Range` header parsing function fixed for invalid values ``#974``.
|
||
|
- Add support for byte Range Requests, see pull request ``#978``.
|
||
|
- Use modern cryptographic defaults in the dev servers ``#1004``.
|
||
|
- the post() method of the test client now accept file object through the data
|
||
|
parameter.
|
||
|
- Color run_simple's terminal output based on HTTP codes ``#1013``.
|
||
|
- Fix self-XSS in debugger console, see ``#1031``.
|
||
|
- Fix IPython 5.x shell support, see ``#1033``.
|
||
|
|
||
|
Version 0.11.16
|
||
|
---------------
|
||
|
|
||
|
- werkzeug.serving: set CONTENT_TYPE / CONTENT_LENGTH if only they're provided by the client
|
||
|
- werkzeug.serving: Fix crash of reloader when using `python -m werkzeug.serving`.
|
||
|
|
||
|
Version 0.11.15
|
||
|
---------------
|
||
|
|
||
|
Released on December 30th 2016.
|
||
|
|
||
|
- Bugfix for the bugfix in the previous release.
|
||
|
|
||
|
Version 0.11.14
|
||
|
---------------
|
||
|
|
||
|
Released on December 30th 2016.
|
||
|
|
||
|
- Check if platform can fork before importing ``ForkingMixIn``, raise exception
|
||
|
when creating ``ForkingWSGIServer`` on such a platform, see PR ``#999``.
|
||
|
|
||
|
Version 0.11.13
|
||
|
---------------
|
||
|
|
||
|
Released on December 26th 2016.
|
||
|
|
||
|
- Correct fix for the reloader issuer on certain Windows installations.
|
||
|
|
||
|
Version 0.11.12
|
||
|
---------------
|
||
|
|
||
|
Released on December 26th 2016.
|
||
|
|
||
|
- Fix more bugs in multidicts regarding empty lists. See ``#1000``.
|
||
|
- Add some docstrings to some `EnvironBuilder` properties that were previously
|
||
|
unintentionally missing.
|
||
|
- Added a workaround for the reloader on windows.
|
||
|
|
||
|
Version 0.11.11
|
||
|
---------------
|
||
|
|
||
|
Released on August 31st 2016.
|
||
|
|
||
|
- Fix JSONRequestMixin for Python3. See #731
|
||
|
- Fix broken string handling in test client when passing integers. See #852
|
||
|
- Fix a bug in ``parse_options_header`` where an invalid content type
|
||
|
starting with comma or semi-colon would result in an invalid return value,
|
||
|
see issue ``#995``.
|
||
|
- Fix a bug in multidicts when passing empty lists as values, see issue
|
||
|
``#979``.
|
||
|
- Fix a security issue that allows XSS on the Werkzeug debugger. See ``#1001``.
|
||
|
|
||
|
Version 0.11.10
|
||
|
---------------
|
||
|
|
||
|
Released on May 24th 2016.
|
||
|
|
||
|
- Fixed a bug that occurs when running on Python 2.6 and using a broken locale.
|
||
|
See pull request #912.
|
||
|
- Fixed a crash when running the debugger on Google App Engine. See issue #925.
|
||
|
- Fixed an issue with multipart parsing that could cause memory exhaustion.
|
||
|
|
||
|
Version 0.11.9
|
||
|
--------------
|
||
|
|
||
|
Released on April 24th 2016.
|
||
|
|
||
|
- Corrected an issue that caused the debugger not to use the
|
||
|
machine GUID on POSIX systems.
|
||
|
- Corrected a Unicode error on Python 3 for the debugger's
|
||
|
PIN usage.
|
||
|
- Corrected the timestamp verification in the pin debug code.
|
||
|
Without this fix the pin was remembered for too long.
|
||
|
|
||
|
Version 0.11.8
|
||
|
--------------
|
||
|
|
||
|
Released on April 15th 2016.
|
||
|
|
||
|
- fixed a problem with the machine GUID detection code on OS X
|
||
|
on Python 3.
|
||
|
|
||
|
Version 0.11.7
|
||
|
--------------
|
||
|
|
||
|
Released on April 14th 2016.
|
||
|
|
||
|
- fixed a regression on Python 3 for the debugger.
|
||
|
|
||
|
Version 0.11.6
|
||
|
--------------
|
||
|
|
||
|
Released on April 14th 2016.
|
||
|
|
||
|
- werkzeug.serving: Still show the client address on bad requests.
|
||
|
- improved the PIN based protection for the debugger to make it harder to
|
||
|
brute force via trying cookies. Please keep in mind that the debugger
|
||
|
*is not intended for running on production environments*
|
||
|
- increased the pin timeout to a week to make it less annoying for people
|
||
|
which should decrease the chance that users disable the pin check
|
||
|
entirely.
|
||
|
- werkzeug.serving: Fix broken HTTP_HOST when path starts with double slash.
|
||
|
|
||
|
Version 0.11.5
|
||
|
--------------
|
||
|
|
||
|
Released on March 22nd 2016.
|
||
|
|
||
|
- werkzeug.serving: Fix crash when attempting SSL connection to HTTP server.
|
||
|
|
||
|
Version 0.11.4
|
||
|
--------------
|
||
|
|
||
|
Released on February 14th 2016.
|
||
|
|
||
|
- Fixed werkzeug.serving not working from -m flag.
|
||
|
- Fixed incorrect weak etag handling.
|
||
|
|
||
|
Version 0.11.3
|
||
|
--------------
|
||
|
|
||
|
Released on December 20th 2015.
|
||
|
|
||
|
- Fixed an issue with copy operations not working against
|
||
|
proxies.
|
||
|
- Changed the logging operations of the development server to
|
||
|
correctly log where the server is running in all situations
|
||
|
again.
|
||
|
- Fixed another regression with SSL wrapping similar to the
|
||
|
fix in 0.11.2 but for a different code path.
|
||
|
|
||
|
Version 0.11.2
|
||
|
--------------
|
||
|
|
||
|
Released on November 12th 2015.
|
||
|
|
||
|
- Fix inheritable sockets on Windows on Python 3.
|
||
|
- Fixed an issue with the forking server not starting any longer.
|
||
|
- Fixed SSL wrapping on platforms that supported opening sockets
|
||
|
by file descriptor.
|
||
|
- No longer log from the watchdog reloader.
|
||
|
- Unicode errors in hosts are now better caught or converted into
|
||
|
bad request errors.
|
||
|
|
||
|
Version 0.11.1
|
||
|
--------------
|
||
|
|
||
|
Released on November 10th 2015.
|
||
|
|
||
|
- Fixed a regression on Python 3 in the debugger.
|
||
|
|
||
|
Version 0.11
|
||
|
------------
|
||
|
|
||
|
Released on November 8th 2015, codename Gleisbaumaschine.
|
||
|
|
||
|
- Added ``reloader_paths`` option to ``run_simple`` and other functions in
|
||
|
``werkzeug.serving``. This allows the user to completely override the Python
|
||
|
module watching of Werkzeug with custom paths.
|
||
|
- Many custom cached properties of Werkzeug's classes are now subclasses of
|
||
|
Python's ``property`` type (issue ``#616``).
|
||
|
- ``bind_to_environ`` now doesn't differentiate between implicit and explicit
|
||
|
default port numbers in ``HTTP_HOST`` (pull request ``#204``).
|
||
|
- ``BuildErrors`` are now more informative. They come with a complete sentence
|
||
|
as error message, and also provide suggestions (pull request ``#691``).
|
||
|
- Fix a bug in the user agent parser where Safari's build number instead of
|
||
|
version would be extracted (pull request ``#703``).
|
||
|
- Fixed issue where RedisCache set_many was broken for twemproxy, which doesn't
|
||
|
support the default MULTI command (pull request ``#702``).
|
||
|
- ``mimetype`` parameters on request and response classes are now always
|
||
|
converted to lowercase.
|
||
|
- Changed cache so that cache never expires if timeout is 0. This also fixes
|
||
|
an issue with redis setex (issue ``#550``)
|
||
|
- Werkzeug now assumes ``UTF-8`` as filesystem encoding on Unix if Python
|
||
|
detected it as ASCII.
|
||
|
- New optional `has` method on caches.
|
||
|
- Fixed various bugs in `parse_options_header` (pull request ``#643``).
|
||
|
- If the reloader is enabled the server will now open the socket in the parent
|
||
|
process if this is possible. This means that when the reloader kicks in
|
||
|
the connection from client will wait instead of tearing down. This does
|
||
|
not work on all Python versions.
|
||
|
- Implemented PIN based authentication for the debugger. This can optionally
|
||
|
be disabled but is discouraged. This change was necessary as it has been
|
||
|
discovered that too many people run the debugger in production.
|
||
|
- Devserver no longer requires SSL module to be installed.
|
||
|
|
||
|
Version 0.10.5
|
||
|
--------------
|
||
|
|
||
|
(bugfix release, release date yet to be decided)
|
||
|
|
||
|
- Reloader: Correctly detect file changes made by moving temporary files over
|
||
|
the original, which is e.g. the case with PyCharm (pull request ``#722``).
|
||
|
- Fix bool behavior of ``werkzeug.datastructures.ETags`` under Python 3 (issue
|
||
|
``#744``).
|
||
|
|
||
|
Version 0.10.4
|
||
|
--------------
|
||
|
|
||
|
(bugfix release, released on March 26th 2015)
|
||
|
|
||
|
- Re-release of 0.10.3 with packaging artifacts manually removed.
|
||
|
|
||
|
Version 0.10.3
|
||
|
--------------
|
||
|
|
||
|
(bugfix release, released on March 26th 2015)
|
||
|
|
||
|
- Re-release of 0.10.2 without packaging artifacts.
|
||
|
|
||
|
Version 0.10.2
|
||
|
--------------
|
||
|
|
||
|
(bugfix release, released on March 26th 2015)
|
||
|
|
||
|
- Fixed issue where ``empty`` could break third-party libraries that relied on
|
||
|
keyword arguments (pull request ``#675``)
|
||
|
- Improved ``Rule.empty`` by providing a ```get_empty_kwargs`` to allow setting
|
||
|
custom kwargs without having to override entire ``empty`` method. (pull
|
||
|
request ``#675``)
|
||
|
- Fixed ```extra_files``` parameter for reloader to not cause startup
|
||
|
to crash when included in server params
|
||
|
- Using `MultiDict` when building URLs is now not supported again. The behavior
|
||
|
introduced several regressions.
|
||
|
- Fix performance problems with stat-reloader (pull request ``#715``).
|
||
|
|
||
|
Version 0.10.1
|
||
|
--------------
|
||
|
|
||
|
(bugfix release, released on February 3rd 2015)
|
||
|
|
||
|
- Fixed regression with multiple query values for URLs (pull request ``#667``).
|
||
|
- Fix issues with eventlet's monkeypatching and the builtin server (pull
|
||
|
request ``#663``).
|
||
|
|
||
|
Version 0.10
|
||
|
------------
|
||
|
|
||
|
Released on January 30th 2015, codename Bagger.
|
||
|
|
||
|
- Changed the error handling of and improved testsuite for the caches in
|
||
|
``contrib.cache``.
|
||
|
- Fixed a bug on Python 3 when creating adhoc ssl contexts, due to `sys.maxint`
|
||
|
not being defined.
|
||
|
- Fixed a bug on Python 3, that caused
|
||
|
:func:`~werkzeug.serving.make_ssl_devcert` to fail with an exception.
|
||
|
- Added exceptions for 504 and 505.
|
||
|
- Added support for ChromeOS detection.
|
||
|
- Added UUID converter to the routing system.
|
||
|
- Added message that explains how to quit the server.
|
||
|
- Fixed a bug on Python 2, that caused ``len`` for
|
||
|
:class:`werkzeug.datastructures.CombinedMultiDict` to crash.
|
||
|
- Added support for stdlib pbkdf2 hmac if a compatible digest
|
||
|
is found.
|
||
|
- Ported testsuite to use ``py.test``.
|
||
|
- Minor optimizations to various middlewares (pull requests ``#496`` and
|
||
|
``#571``).
|
||
|
- Use stdlib ``ssl`` module instead of ``OpenSSL`` for the builtin server
|
||
|
(issue ``#434``). This means that OpenSSL contexts are not supported anymore,
|
||
|
but instead ``ssl.SSLContext`` from the stdlib.
|
||
|
- Allow protocol-relative URLs when building external URLs.
|
||
|
- Fixed Atom syndication to print time zone offset for tz-aware datetime
|
||
|
objects (pull request ``#254``).
|
||
|
- Improved reloader to track added files and to recover from broken
|
||
|
sys.modules setups with syntax errors in packages.
|
||
|
- ``cache.RedisCache`` now supports arbitrary ``**kwargs`` for the redis
|
||
|
object.
|
||
|
- ``werkzeug.test.Client`` now uses the original request method when resolving
|
||
|
307 redirects (pull request ``#556``).
|
||
|
- ``werkzeug.datastructures.MIMEAccept`` now properly deals with mimetype
|
||
|
parameters (pull request ``#205``).
|
||
|
- ``werkzeug.datastructures.Accept`` now handles a quality of ``0`` as
|
||
|
intolerable, as per RFC 2616 (pull request ``#536``).
|
||
|
- ``werkzeug.urls.url_fix`` now properly encodes hostnames with ``idna``
|
||
|
encoding (issue ``#559``). It also doesn't crash on malformed URLs anymore
|
||
|
(issue ``#582``).
|
||
|
- ``werkzeug.routing.MapAdapter.match`` now recognizes the difference between
|
||
|
the path ``/`` and an empty one (issue ``#360``).
|
||
|
- The interactive debugger now tries to decode non-ascii filenames (issue
|
||
|
``#469``).
|
||
|
- Increased default key size of generated SSL certificates to 1024 bits (issue
|
||
|
``#611``).
|
||
|
- Added support for specifying a ``Response`` subclass to use when calling
|
||
|
:func:`~werkzeug.utils.redirect`\ .
|
||
|
- ``werkzeug.test.EnvironBuilder`` now doesn't use the request method anymore
|
||
|
to guess the content type, and purely relies on the ``form``, ``files`` and
|
||
|
``input_stream`` properties (issue ``#620``).
|
||
|
- Added Symbian to the user agent platform list.
|
||
|
- Fixed make_conditional to respect automatically_set_content_length
|
||
|
- Unset ``Content-Length`` when writing to response.stream (issue ``#451``)
|
||
|
- ``wrappers.Request.method`` is now always uppercase, eliminating
|
||
|
inconsistencies of the WSGI environment (issue ``647``).
|
||
|
- ``routing.Rule.empty`` now works correctly with subclasses of ``Rule`` (pull
|
||
|
request ``#645``).
|
||
|
- Made map updating safe in light of concurrent updates.
|
||
|
- Allow multiple values for the same field for url building (issue ``#658``).
|
||
|
|
||
|
Version 0.9.7
|
||
|
-------------
|
||
|
|
||
|
(bugfix release, release date to be decided)
|
||
|
|
||
|
- Fix unicode problems in ``werkzeug.debug.tbtools``.
|
||
|
- Fix Python 3-compatibility problems in ``werkzeug.posixemulation``.
|
||
|
- Backport fix of fatal typo for ``ImmutableList`` (issue ``#492``).
|
||
|
- Make creation of the cache dir for ``FileSystemCache`` atomic (issue
|
||
|
``#468``).
|
||
|
- Use native strings for memcached keys to work with Python 3 client (issue
|
||
|
``#539``).
|
||
|
- Fix charset detection for ``werkzeug.debug.tbtools.Frame`` objects (issues
|
||
|
``#547`` and ``#532``).
|
||
|
- Fix ``AttributeError`` masking in ``werkzeug.utils.import_string`` (issue
|
||
|
``#182``).
|
||
|
- Explicitly shut down server (issue ``#519``).
|
||
|
- Fix timeouts greater than 2592000 being misinterpreted as UNIX timestamps in
|
||
|
``werkzeug.contrib.cache.MemcachedCache`` (issue ``#533``).
|
||
|
- Fix bug where ``werkzeug.exceptions.abort`` would raise an arbitrary subclass
|
||
|
of the expected class (issue ``#422``).
|
||
|
- Fix broken ``jsrouting`` (due to removal of ``werkzeug.templates``)
|
||
|
- ``werkzeug.urls.url_fix`` now doesn't crash on malformed URLs anymore, but
|
||
|
returns them unmodified. This is a cheap workaround for ``#582``, the proper
|
||
|
fix is included in version 0.10.
|
||
|
- The repr of ``werkzeug.wrappers.Request`` doesn't crash on non-ASCII-values
|
||
|
anymore (pull request ``#466``).
|
||
|
- Fix bug in ``cache.RedisCache`` when combined with ``redis.StrictRedis``
|
||
|
object (pull request ``#583``).
|
||
|
- The ``qop`` parameter for ``WWW-Authenticate`` headers is now always quoted,
|
||
|
as required by RFC 2617 (issue ``#633``).
|
||
|
- Fix bug in ``werkzeug.contrib.cache.SimpleCache`` with Python 3 where add/set
|
||
|
may throw an exception when pruning old entries from the cache (pull request
|
||
|
``#651``).
|
||
|
|
||
|
Version 0.9.6
|
||
|
-------------
|
||
|
|
||
|
(bugfix release, released on June 7th 2014)
|
||
|
|
||
|
- Added a safe conversion for IRI to URI conversion and use that
|
||
|
internally to work around issues with spec violations for
|
||
|
protocols such as ``itms-service``.
|
||
|
|
||
|
Version 0.9.7
|
||
|
-------------
|
||
|
|
||
|
- Fixed uri_to_iri() not re-encoding hashes in query string parameters.
|
||
|
|
||
|
Version 0.9.5
|
||
|
-------------
|
||
|
|
||
|
(bugfix release, released on June 7th 2014)
|
||
|
|
||
|
- Forward charset argument from request objects to the environ
|
||
|
builder.
|
||
|
- Fixed error handling for missing boundaries in multipart data.
|
||
|
- Fixed session creation on systems without ``os.urandom()``.
|
||
|
- Fixed pluses in dictionary keys not being properly URL encoded.
|
||
|
- Fixed a problem with deepcopy not working for multi dicts.
|
||
|
- Fixed a double quoting issue on redirects.
|
||
|
- Fixed a problem with unicode keys appearing in headers on 2.x.
|
||
|
- Fixed a bug with unicode strings in the test builder.
|
||
|
- Fixed a unicode bug on Python 3 in the WSGI profiler.
|
||
|
- Fixed an issue with the safe string compare function on
|
||
|
Python 2.7.7 and Python 3.4.
|
||
|
|
||
|
Version 0.9.4
|
||
|
-------------
|
||
|
|
||
|
(bugfix release, released on August 26th 2013)
|
||
|
|
||
|
- Fixed an issue with Python 3.3 and an edge case in cookie parsing.
|
||
|
- Fixed decoding errors not handled properly through the WSGI
|
||
|
decoding dance.
|
||
|
- Fixed URI to IRI conversion incorrectly decoding percent signs.
|
||
|
|
||
|
Version 0.9.3
|
||
|
-------------
|
||
|
|
||
|
(bugfix release, released on July 25th 2013)
|
||
|
|
||
|
- Restored behavior of the ``data`` descriptor of the request class to pre 0.9
|
||
|
behavior. This now also means that ``.data`` and ``.get_data()`` have
|
||
|
different behavior. New code should use ``.get_data()`` always.
|
||
|
|
||
|
In addition to that there is now a flag for the ``.get_data()`` method that
|
||
|
controls what should happen with form data parsing and the form parser will
|
||
|
honor cached data. This makes dealing with custom form data more consistent.
|
||
|
|
||
|
Version 0.9.2
|
||
|
-------------
|
||
|
|
||
|
(bugfix release, released on July 18th 2013)
|
||
|
|
||
|
- Added `unsafe` parameter to :func:`~werkzeug.urls.url_quote`.
|
||
|
- Fixed an issue with :func:`~werkzeug.urls.url_quote_plus` not quoting
|
||
|
`'+'` correctly.
|
||
|
- Ported remaining parts of :class:`~werkzeug.contrib.RedisCache` to
|
||
|
Python 3.3.
|
||
|
- Ported remaining parts of :class:`~werkzeug.contrib.MemcachedCache` to
|
||
|
Python 3.3
|
||
|
- Fixed a deprecation warning in the contrib atom module.
|
||
|
- Fixed a regression with setting of content types through the
|
||
|
headers dictionary instead with the content type parameter.
|
||
|
- Use correct name for stdlib secure string comparison function.
|
||
|
- Fixed a wrong reference in the docstring of
|
||
|
:func:`~werkzeug.local.release_local`.
|
||
|
- Fixed an `AttributeError` that sometimes occurred when accessing the
|
||
|
:attr:`werkzeug.wrappers.BaseResponse.is_streamed` attribute.
|
||
|
|
||
|
Version 0.9.1
|
||
|
-------------
|
||
|
|
||
|
(bugfix release, released on June 14th 2013)
|
||
|
|
||
|
- Fixed an issue with integers no longer being accepted in certain
|
||
|
parts of the routing system or URL quoting functions.
|
||
|
- Fixed an issue with `url_quote` not producing the right escape
|
||
|
codes for single digit codepoints.
|
||
|
- Fixed an issue with :class:`~werkzeug.wsgi.SharedDataMiddleware` not
|
||
|
reading the path correctly and breaking on etag generation in some
|
||
|
cases.
|
||
|
- Properly handle `Expect: 100-continue` in the development server
|
||
|
to resolve issues with curl.
|
||
|
- Automatically exhaust the input stream on request close. This should
|
||
|
fix issues where not touching request files results in a timeout.
|
||
|
- Fixed exhausting of streams not doing anything if a non-limited
|
||
|
stream was passed into the multipart parser.
|
||
|
- Raised the buffer sizes for the multipart parser.
|
||
|
|
||
|
Version 0.9
|
||
|
-----------
|
||
|
|
||
|
Released on June 13nd 2013, codename Planierraupe.
|
||
|
|
||
|
- Added support for :meth:`~werkzeug.wsgi.LimitedStream.tell`
|
||
|
on the limited stream.
|
||
|
- :class:`~werkzeug.datastructures.ETags` now is nonzero if it
|
||
|
contains at least one etag of any kind, including weak ones.
|
||
|
- Added a workaround for a bug in the stdlib for SSL servers.
|
||
|
- Improved SSL interface of the devserver so that it can generate
|
||
|
certificates easily and load them from files.
|
||
|
- Refactored test client to invoke the open method on the class
|
||
|
for redirects. This makes subclassing more powerful.
|
||
|
- :func:`werkzeug.wsgi.make_chunk_iter` and
|
||
|
:func:`werkzeug.wsgi.make_line_iter` now support processing of
|
||
|
iterators and streams.
|
||
|
- URL generation by the routing system now no longer quotes
|
||
|
``+``.
|
||
|
- URL fixing now no longer quotes certain reserved characters.
|
||
|
- The :func:`werkzeug.security.generate_password_hash` and
|
||
|
check functions now support any of the hashlib algorithms.
|
||
|
- `wsgi.get_current_url` is now ascii safe for browsers sending
|
||
|
non-ascii data in query strings.
|
||
|
- improved parsing behavior for :func:`werkzeug.http.parse_options_header`
|
||
|
- added more operators to local proxies.
|
||
|
- added a hook to override the default converter in the routing
|
||
|
system.
|
||
|
- The description field of HTTP exceptions is now always escaped.
|
||
|
Use markup objects to disable that.
|
||
|
- Added number of proxy argument to the proxy fix to make it more
|
||
|
secure out of the box on common proxy setups. It will by default
|
||
|
no longer trust the x-forwarded-for header as much as it did
|
||
|
before.
|
||
|
- Added support for fragment handling in URI/IRI functions.
|
||
|
- Added custom class support for :func:`werkzeug.http.parse_dict_header`.
|
||
|
- Renamed `LighttpdCGIRootFix` to `CGIRootFix`.
|
||
|
- Always treat `+` as safe when fixing URLs as people love misusing them.
|
||
|
- Added support to profiling into directories in the contrib profiler.
|
||
|
- The escape function now by default escapes quotes.
|
||
|
- Changed repr of exceptions to be less magical.
|
||
|
- Simplified exception interface to no longer require environments
|
||
|
to be passed to receive the response object.
|
||
|
- Added sentinel argument to IterIO objects.
|
||
|
- Added pbkdf2 support for the security module.
|
||
|
- Added a plain request type that disables all form parsing to only
|
||
|
leave the stream behind.
|
||
|
- Removed support for deprecated `fix_headers`.
|
||
|
- Removed support for deprecated `header_list`.
|
||
|
- Removed support for deprecated parameter for `iter_encoded`.
|
||
|
- Removed support for deprecated non-silent usage of the limited
|
||
|
stream object.
|
||
|
- Removed support for previous dummy `writable` parameter on
|
||
|
the cached property.
|
||
|
- Added support for explicitly closing request objects to close
|
||
|
associated resources.
|
||
|
- Conditional request handling or access to the data property on responses no
|
||
|
longer ignores direct passthrough mode.
|
||
|
- Removed werkzeug.templates and werkzeug.contrib.kickstart.
|
||
|
- Changed host lookup logic for forwarded hosts to allow lists of
|
||
|
hosts in which case only the first one is picked up.
|
||
|
- Added `wsgi.get_query_string`, `wsgi.get_path_info` and
|
||
|
`wsgi.get_script_name` and made the `wsgi.pop_path_info` and
|
||
|
`wsgi.peek_path_info` functions perform unicode decoding. This
|
||
|
was necessary to avoid having to expose the WSGI encoding dance
|
||
|
on Python 3.
|
||
|
- Added `content_encoding` and `content_md5` to the request object's
|
||
|
common request descriptor mixin.
|
||
|
- added `options` and `trace` to the test client.
|
||
|
- Overhauled the utilization of the input stream to be easier to use
|
||
|
and better to extend. The detection of content payload on the input
|
||
|
side is now more compliant with HTTP by detecting off the content
|
||
|
type header instead of the request method. This also now means that
|
||
|
the stream property on the request class is always available instead
|
||
|
of just when the parsing fails.
|
||
|
- Added support for using :class:`werkzeug.wrappers.BaseResponse` in a with
|
||
|
statement.
|
||
|
- Changed `get_app_iter` to fetch the response early so that it does not
|
||
|
fail when wrapping a response iterable. This makes filtering easier.
|
||
|
- Introduced `get_data` and `set_data` methods for responses.
|
||
|
- Introduced `get_data` for requests.
|
||
|
- Soft deprecated the `data` descriptors for request and response objects.
|
||
|
- Added `as_bytes` operations to some of the headers to simplify working
|
||
|
with things like cookies.
|
||
|
- Made the debugger paste tracebacks into github's gist service as
|
||
|
private pastes.
|
||
|
|
||
|
Version 0.8.4
|
||
|
-------------
|
||
|
|
||
|
(bugfix release, release date to be announced)
|
||
|
|
||
|
- Added a favicon to the debugger which fixes problem with
|
||
|
state changes being triggered through a request to
|
||
|
/favicon.ico in Google Chrome. This should fix some
|
||
|
problems with Flask and other frameworks that use
|
||
|
context local objects on a stack with context preservation
|
||
|
on errors.
|
||
|
- Fixed an issue with scrolling up in the debugger.
|
||
|
- Fixed an issue with debuggers running on a different URL
|
||
|
than the URL root.
|
||
|
- Fixed a problem with proxies not forwarding some rarely
|
||
|
used special methods properly.
|
||
|
- Added a workaround to prevent the XSS protection from Chrome
|
||
|
breaking the debugger.
|
||
|
- Skip redis tests if redis is not running.
|
||
|
- Fixed a typo in the multipart parser that caused content-type
|
||
|
to not be picked up properly.
|
||
|
|
||
|
Version 0.8.3
|
||
|
-------------
|
||
|
|
||
|
(bugfix release, released on February 5th 2012)
|
||
|
|
||
|
- Fixed another issue with :func:`werkzeug.wsgi.make_line_iter`
|
||
|
where lines longer than the buffer size were not handled
|
||
|
properly.
|
||
|
- Restore stdout after debug console finished executing so
|
||
|
that the debugger can be used on GAE better.
|
||
|
- Fixed a bug with the redis cache for int subclasses
|
||
|
(affects bool caching).
|
||
|
- Fixed an XSS problem with redirect targets coming from
|
||
|
untrusted sources.
|
||
|
- Redis cache backend now supports password authentication.
|
||
|
|
||
|
Version 0.8.2
|
||
|
-------------
|
||
|
|
||
|
(bugfix release, released on December 16th 2011)
|
||
|
|
||
|
- Fixed a problem with request handling of the builtin server
|
||
|
not responding to socket errors properly.
|
||
|
- The routing request redirect exception's code attribute is now
|
||
|
used properly.
|
||
|
- Fixed a bug with shutdowns on Windows.
|
||
|
- Fixed a few unicode issues with non-ascii characters being
|
||
|
hardcoded in URL rules.
|
||
|
- Fixed two property docstrings being assigned to fdel instead
|
||
|
of ``__doc__``.
|
||
|
- Fixed an issue where CRLF line endings could be split into two
|
||
|
by the line iter function, causing problems with multipart file
|
||
|
uploads.
|
||
|
|
||
|
Version 0.8.1
|
||
|
-------------
|
||
|
|
||
|
(bugfix release, released on September 30th 2011)
|
||
|
|
||
|
- Fixed an issue with the memcache not working properly.
|
||
|
- Fixed an issue for Python 2.7.1 and higher that broke
|
||
|
copying of multidicts with :func:`copy.copy`.
|
||
|
- Changed hashing methodology of immutable ordered multi dicts
|
||
|
for a potential problem with alternative Python implementations.
|
||
|
|
||
|
Version 0.8
|
||
|
-----------
|
||
|
|
||
|
Released on September 29th 2011, codename Lötkolben
|
||
|
|
||
|
- Removed data structure specific KeyErrors for a general
|
||
|
purpose :exc:`~werkzeug.exceptions.BadRequestKeyError`.
|
||
|
- Documented :meth:`werkzeug.wrappers.BaseRequest._load_form_data`.
|
||
|
- The routing system now also accepts strings instead of
|
||
|
dictionaries for the `query_args` parameter since we're only
|
||
|
passing them through for redirects.
|
||
|
- Werkzeug now automatically sets the content length immediately when
|
||
|
the :attr:`~werkzeug.wrappers.BaseResponse.data` attribute is set
|
||
|
for efficiency and simplicity reasons.
|
||
|
- The routing system will now normalize server names to lowercase.
|
||
|
- The routing system will no longer raise ValueErrors in case the
|
||
|
configuration for the server name was incorrect. This should make
|
||
|
deployment much easier because you can ignore that factor now.
|
||
|
- Fixed a bug with parsing HTTP digest headers. It rejected headers
|
||
|
with missing nc and nonce params.
|
||
|
- Proxy fix now also updates wsgi.url_scheme based on X-Forwarded-Proto.
|
||
|
- Added support for key prefixes to the redis cache.
|
||
|
- Added the ability to suppress some auto corrections in the wrappers
|
||
|
that are now controlled via `autocorrect_location_header` and
|
||
|
`automatically_set_content_length` on the response objects.
|
||
|
- Werkzeug now uses a new method to check that the length of incoming
|
||
|
data is complete and will raise IO errors by itself if the server
|
||
|
fails to do so.
|
||
|
- :func:`~werkzeug.wsgi.make_line_iter` now requires a limit that is
|
||
|
not higher than the length the stream can provide.
|
||
|
- Refactored form parsing into a form parser class that makes it possible
|
||
|
to hook into individual parts of the parsing process for debugging and
|
||
|
extending.
|
||
|
- For conditional responses the content length is no longer set when it
|
||
|
is already there and added if missing.
|
||
|
- Immutable datastructures are hashable now.
|
||
|
- Headers datastructure no longer allows newlines in values to avoid
|
||
|
header injection attacks.
|
||
|
- Made it possible through subclassing to select a different remote
|
||
|
addr in the proxy fix.
|
||
|
- Added stream based URL decoding. This reduces memory usage on large
|
||
|
transmitted form data that is URL decoded since Werkzeug will no longer
|
||
|
load all the unparsed data into memory.
|
||
|
- Memcache client now no longer uses the buggy cmemcache module and
|
||
|
supports pylibmc. GAE is not tried automatically and the dedicated
|
||
|
class is no longer necessary.
|
||
|
- Redis cache now properly serializes data.
|
||
|
- Removed support for Python 2.4
|
||
|
|
||
|
Version 0.7.2
|
||
|
-------------
|
||
|
|
||
|
(bugfix release, released on September 30th 2011)
|
||
|
|
||
|
- Fixed a CSRF problem with the debugger.
|
||
|
- The debugger is now generating private pastes on lodgeit.
|
||
|
- If URL maps are now bound to environments the query arguments
|
||
|
are properly decoded from it for redirects.
|
||
|
|
||
|
Version 0.7.1
|
||
|
-------------
|
||
|
|
||
|
(bugfix release, released on July 26th 2011)
|
||
|
|
||
|
- Fixed a problem with newer versions of IPython.
|
||
|
- Disabled pyinotify based reloader which does not work reliably.
|
||
|
|
||
|
Version 0.7
|
||
|
-----------
|
||
|
|
||
|
Released on July 24th 2011, codename Schraubschlüssel
|
||
|
|
||
|
- Add support for python-libmemcached to the Werkzeug cache abstraction
|
||
|
layer.
|
||
|
- Improved :func:`url_decode` and :func:`url_encode` performance.
|
||
|
- Fixed an issue where the SharedDataMiddleware could cause an
|
||
|
internal server error on weird paths when loading via pkg_resources.
|
||
|
- Fixed an URL generation bug that caused URLs to be invalid if a
|
||
|
generated component contains a colon.
|
||
|
- :func:`werkzeug.import_string` now works with partially set up
|
||
|
packages properly.
|
||
|
- Disabled automatic socket switching for IPv6 on the development
|
||
|
server due to problems it caused.
|
||
|
- Werkzeug no longer overrides the Date header when creating a
|
||
|
conditional HTTP response.
|
||
|
- The routing system provides a method to retrieve the matching
|
||
|
methods for a given path.
|
||
|
- The routing system now accepts a parameter to change the encoding
|
||
|
error behaviour.
|
||
|
- The local manager can now accept custom ident functions in the
|
||
|
constructor that are forwarded to the wrapped local objects.
|
||
|
- url_unquote_plus now accepts unicode strings again.
|
||
|
- Fixed an issue with the filesystem session support's prune
|
||
|
function and concurrent usage.
|
||
|
- Fixed a problem with external URL generation discarding the port.
|
||
|
- Added support for pylibmc to the Werkzeug cache abstraction layer.
|
||
|
- Fixed an issue with the new multipart parser that happened when
|
||
|
a linebreak happened to be on the chunk limit.
|
||
|
- Cookies are now set properly if ports are in use. A runtime error
|
||
|
is raised if one tries to set a cookie for a domain without a dot.
|
||
|
- Fixed an issue with Template.from_file not working for file
|
||
|
descriptors.
|
||
|
- Reloader can now use inotify to track reloads. This requires the
|
||
|
pyinotify library to be installed.
|
||
|
- Werkzeug debugger can now submit to custom lodgeit installations.
|
||
|
- redirect function's status code assertion now allows 201 to be used
|
||
|
as redirection code. While it's not a real redirect, it shares
|
||
|
enough with redirects for the function to still be useful.
|
||
|
- Fixed securecookie for pypy.
|
||
|
- Fixed `ValueErrors` being raised on calls to `best_match` on
|
||
|
`MIMEAccept` objects when invalid user data was supplied.
|
||
|
- Deprecated `werkzeug.contrib.kickstart` and `werkzeug.contrib.testtools`
|
||
|
- URL routing now can be passed the URL arguments to keep them for
|
||
|
redirects. In the future matching on URL arguments might also be
|
||
|
possible.
|
||
|
- Header encoding changed from utf-8 to latin1 to support a port to
|
||
|
Python 3. Bytestrings passed to the object stay untouched which
|
||
|
makes it possible to have utf-8 cookies. This is a part where
|
||
|
the Python 3 version will later change in that it will always
|
||
|
operate on latin1 values.
|
||
|
- Fixed a bug in the form parser that caused the last character to
|
||
|
be dropped off if certain values in multipart data are used.
|
||
|
- Multipart parser now looks at the part-individual content type
|
||
|
header to override the global charset.
|
||
|
- Introduced mimetype and mimetype_params attribute for the file
|
||
|
storage object.
|
||
|
- Changed FileStorage filename fallback logic to skip special filenames
|
||
|
that Python uses for marking special files like stdin.
|
||
|
- Introduced more HTTP exception classes.
|
||
|
- `call_on_close` now can be used as a decorator.
|
||
|
- Support for redis as cache backend.
|
||
|
- Added `BaseRequest.scheme`.
|
||
|
- Support for the RFC 5789 PATCH method.
|
||
|
- New custom routing parser and better ordering.
|
||
|
- Removed support for `is_behind_proxy`. Use a WSGI middleware
|
||
|
instead that rewrites the `REMOTE_ADDR` according to your setup.
|
||
|
Also see the :class:`werkzeug.contrib.fixers.ProxyFix` for
|
||
|
a drop-in replacement.
|
||
|
- Added cookie forging support to the test client.
|
||
|
- Added support for host based matching in the routing system.
|
||
|
- Switched from the default 'ignore' to the better 'replace'
|
||
|
unicode error handling mode.
|
||
|
- The builtin server now adds a function named 'werkzeug.server.shutdown'
|
||
|
into the WSGI env to initiate a shutdown. This currently only works
|
||
|
in Python 2.6 and later.
|
||
|
- Headers are now assumed to be latin1 for better compatibility with
|
||
|
Python 3 once we have support.
|
||
|
- Added :func:`werkzeug.security.safe_join`.
|
||
|
- Added `accept_json` property analogous to `accept_html` on the
|
||
|
:class:`werkzeug.datastructures.MIMEAccept`.
|
||
|
- :func:`werkzeug.utils.import_string` now fails with much better
|
||
|
error messages that pinpoint to the problem.
|
||
|
- Added support for parsing of the `If-Range` header
|
||
|
(:func:`werkzeug.http.parse_if_range_header` and
|
||
|
:class:`werkzeug.datastructures.IfRange`).
|
||
|
- Added support for parsing of the `Range` header
|
||
|
(:func:`werkzeug.http.parse_range_header` and
|
||
|
:class:`werkzeug.datastructures.Range`).
|
||
|
- Added support for parsing of the `Content-Range` header of responses
|
||
|
and provided an accessor object for it
|
||
|
(:func:`werkzeug.http.parse_content_range_header` and
|
||
|
:class:`werkzeug.datastructures.ContentRange`).
|
||
|
|
||
|
Version 0.6.2
|
||
|
-------------
|
||
|
|
||
|
(bugfix release, released on April 23th 2010)
|
||
|
|
||
|
- renamed the attribute `implicit_seqence_conversion` attribute of the
|
||
|
request object to `implicit_sequence_conversion`.
|
||
|
|
||
|
Version 0.6.1
|
||
|
-------------
|
||
|
|
||
|
(bugfix release, released on April 13th 2010)
|
||
|
|
||
|
- heavily improved local objects. Should pick up standalone greenlet
|
||
|
builds now and support proxies to free callables as well. There is
|
||
|
also a stacked local now that makes it possible to invoke the same
|
||
|
application from within itself by pushing current request/response
|
||
|
on top of the stack.
|
||
|
- routing build method will also build non-default method rules properly
|
||
|
if no method is provided.
|
||
|
- added proper IPv6 support for the builtin server.
|
||
|
- windows specific filesystem session store fixes.
|
||
|
(should now be more stable under high concurrency)
|
||
|
- fixed a `NameError` in the session system.
|
||
|
- fixed a bug with empty arguments in the werkzeug.script system.
|
||
|
- fixed a bug where log lines will be duplicated if an application uses
|
||
|
:meth:`logging.basicConfig` (#499)
|
||
|
- added secure password hashing and checking functions.
|
||
|
- `HEAD` is now implicitly added as method in the routing system if
|
||
|
`GET` is present. Not doing that was considered a bug because often
|
||
|
code assumed that this is the case and in web servers that do not
|
||
|
normalize `HEAD` to `GET` this could break `HEAD` requests.
|
||
|
- the script support can start SSL servers now.
|
||
|
|
||
|
Version 0.6
|
||
|
-----------
|
||
|
|
||
|
Released on Feb 19th 2010, codename Hammer.
|
||
|
|
||
|
- removed pending deprecations
|
||
|
- sys.path is now printed from the testapp.
|
||
|
- fixed an RFC 2068 incompatibility with cookie value quoting.
|
||
|
- the :class:`FileStorage` now gives access to the multipart headers.
|
||
|
- `cached_property.writeable` has been deprecated.
|
||
|
- :meth:`MapAdapter.match` now accepts a `return_rule` keyword argument
|
||
|
that returns the matched `Rule` instead of just the `endpoint`
|
||
|
- :meth:`routing.Map.bind_to_environ` raises a more correct error message
|
||
|
now if the map was bound to an invalid WSGI environment.
|
||
|
- added support for SSL to the builtin development server.
|
||
|
- Response objects are no longer modified in place when they are evaluated
|
||
|
as WSGI applications. For backwards compatibility the `fix_headers`
|
||
|
function is still called in case it was overridden.
|
||
|
You should however change your application to use `get_wsgi_headers` if
|
||
|
you need header modifications before responses are sent as the backwards
|
||
|
compatibility support will go away in future versions.
|
||
|
- :func:`append_slash_redirect` no longer requires the QUERY_STRING to be
|
||
|
in the WSGI environment.
|
||
|
- added :class:`~werkzeug.contrib.wrappers.DynamicCharsetResponseMixin`
|
||
|
- added :class:`~werkzeug.contrib.wrappers.DynamicCharsetRequestMixin`
|
||
|
- added :attr:`BaseRequest.url_charset`
|
||
|
- request and response objects have a default `__repr__` now.
|
||
|
- builtin data structures can be pickled now.
|
||
|
- the form data parser will now look at the filename instead the
|
||
|
content type to figure out if it should treat the upload as regular
|
||
|
form data or file upload. This fixes a bug with Google Chrome.
|
||
|
- improved performance of `make_line_iter` and the multipart parser
|
||
|
for binary uploads.
|
||
|
- fixed :attr:`~werkzeug.BaseResponse.is_streamed`
|
||
|
- fixed a path quoting bug in `EnvironBuilder` that caused PATH_INFO and
|
||
|
SCRIPT_NAME to end up in the environ unquoted.
|
||
|
- :meth:`werkzeug.BaseResponse.freeze` now sets the content length.
|
||
|
- for unknown HTTP methods the request stream is now always limited
|
||
|
instead of being empty. This makes it easier to implement DAV
|
||
|
and other protocols on top of Werkzeug.
|
||
|
- added :meth:`werkzeug.MIMEAccept.best_match`
|
||
|
- multi-value test-client posts from a standard dictionary are now
|
||
|
supported. Previously you had to use a multi dict.
|
||
|
- rule templates properly work with submounts, subdomains and
|
||
|
other rule factories now.
|
||
|
- deprecated non-silent usage of the :class:`werkzeug.LimitedStream`.
|
||
|
- added support for IRI handling to many parts of Werkzeug.
|
||
|
- development server properly logs to the werkzeug logger now.
|
||
|
- added :func:`werkzeug.extract_path_info`
|
||
|
- fixed a querystring quoting bug in :func:`url_fix`
|
||
|
- added `fallback_mimetype` to :class:`werkzeug.SharedDataMiddleware`.
|
||
|
- deprecated :meth:`BaseResponse.iter_encoded`'s charset parameter.
|
||
|
- added :meth:`BaseResponse.make_sequence`,
|
||
|
:attr:`BaseResponse.is_sequence` and
|
||
|
:meth:`BaseResponse._ensure_sequence`.
|
||
|
- added better __repr__ of :class:`werkzeug.Map`
|
||
|
- `import_string` accepts unicode strings as well now.
|
||
|
- development server doesn't break on double slashes after the host name.
|
||
|
- better `__repr__` and `__str__` of
|
||
|
:exc:`werkzeug.exceptions.HTTPException`
|
||
|
- test client works correctly with multiple cookies now.
|
||
|
- the :class:`werkzeug.routing.Map` now has a class attribute with
|
||
|
the default converter mapping. This helps subclasses to override
|
||
|
the converters without passing them to the constructor.
|
||
|
- implemented :class:`OrderedMultiDict`
|
||
|
- improved the session support for more efficient session storing
|
||
|
on the filesystem. Also added support for listing of sessions
|
||
|
currently stored in the filesystem session store.
|
||
|
- werkzeug no longer utilizes the Python time module for parsing
|
||
|
which means that dates in a broader range can be parsed.
|
||
|
- the wrappers have no class attributes that make it possible to
|
||
|
swap out the dict and list types it uses.
|
||
|
- werkzeug debugger should work on the appengine dev server now.
|
||
|
- the URL builder supports dropping of unexpected arguments now.
|
||
|
Previously they were always appended to the URL as query string.
|
||
|
- profiler now writes to the correct stream.
|
||
|
|
||
|
Version 0.5.1
|
||
|
-------------
|
||
|
(bugfix release for 0.5, released on July 9th 2009)
|
||
|
|
||
|
- fixed boolean check of :class:`FileStorage`
|
||
|
- url routing system properly supports unicode URL rules now.
|
||
|
- file upload streams no longer have to provide a truncate()
|
||
|
method.
|
||
|
- implemented :meth:`BaseRequest._form_parsing_failed`.
|
||
|
- fixed #394
|
||
|
- :meth:`ImmutableDict.copy`, :meth:`ImmutableMultiDict.copy` and
|
||
|
:meth:`ImmutableTypeConversionDict.copy` return mutable shallow
|
||
|
copies.
|
||
|
- fixed a bug with the `make_runserver` script action.
|
||
|
- :meth:`MultiDict.items` and :meth:`MutiDict.iteritems` now accept an
|
||
|
argument to return a pair for each value of each key.
|
||
|
- the multipart parser works better with hand-crafted multipart
|
||
|
requests now that have extra newlines added. This fixes a bug
|
||
|
with setuptools uploads not handled properly (#390)
|
||
|
- fixed some minor bugs in the atom feed generator.
|
||
|
- fixed a bug with client cookie header parsing being case sensitive.
|
||
|
- fixed a not-working deprecation warning.
|
||
|
- fixed package loading for :class:`SharedDataMiddleware`.
|
||
|
- fixed a bug in the secure cookie that made server-side expiration
|
||
|
on servers with a local time that was not set to UTC impossible.
|
||
|
- fixed console of the interactive debugger.
|
||
|
|
||
|
|
||
|
Version 0.5
|
||
|
-----------
|
||
|
|
||
|
Released on April 24th, codename Schlagbohrer.
|
||
|
|
||
|
- requires Python 2.4 now
|
||
|
- fixed a bug in :class:`~contrib.IterIO`
|
||
|
- added :class:`MIMEAccept` and :class:`CharsetAccept` that work like the
|
||
|
regular :class:`Accept` but have extra special normalization for mimetypes
|
||
|
and charsets and extra convenience methods.
|
||
|
- switched the serving system from wsgiref to something homebrew.
|
||
|
- the :class:`Client` now supports cookies.
|
||
|
- added the :mod:`~werkzeug.contrib.fixers` module with various
|
||
|
fixes for webserver bugs and hosting setup side-effects.
|
||
|
- added :mod:`werkzeug.contrib.wrappers`
|
||
|
- added :func:`is_hop_by_hop_header`
|
||
|
- added :func:`is_entity_header`
|
||
|
- added :func:`remove_hop_by_hop_headers`
|
||
|
- added :func:`pop_path_info`
|
||
|
- added :func:`peek_path_info`
|
||
|
- added :func:`wrap_file` and :class:`FileWrapper`
|
||
|
- moved `LimitedStream` from the contrib package into the regular
|
||
|
werkzeug one and changed the default behavior to raise exceptions
|
||
|
rather than stopping without warning. The old class will stick in
|
||
|
the module until 0.6.
|
||
|
- implemented experimental multipart parser that replaces the old CGI hack.
|
||
|
- added :func:`dump_options_header` and :func:`parse_options_header`
|
||
|
- added :func:`quote_header_value` and :func:`unquote_header_value`
|
||
|
- :func:`url_encode` and :func:`url_decode` now accept a separator
|
||
|
argument to switch between `&` and `;` as pair separator. The magic
|
||
|
switch is no longer in place.
|
||
|
- all form data parsing functions as well as the :class:`BaseRequest`
|
||
|
object have parameters (or attributes) to limit the number of
|
||
|
incoming bytes (either totally or per field).
|
||
|
- added :class:`LanguageAccept`
|
||
|
- request objects are now enforced to be read only for all collections.
|
||
|
- added many new collection classes, refactored collections in general.
|
||
|
- test support was refactored, semi-undocumented `werkzeug.test.File`
|
||
|
was replaced by :class:`werkzeug.FileStorage`.
|
||
|
- :class:`EnvironBuilder` was added and unifies the previous distinct
|
||
|
:func:`create_environ`, :class:`Client` and
|
||
|
:meth:`BaseRequest.from_values`. They all work the same now which
|
||
|
is less confusing.
|
||
|
- officially documented imports from the internal modules as undefined
|
||
|
behavior. These modules were never exposed as public interfaces.
|
||
|
- removed `FileStorage.__len__` which previously made the object
|
||
|
falsy for browsers not sending the content length which all browsers
|
||
|
do.
|
||
|
- :class:`SharedDataMiddleware` uses `wrap_file` now and has a
|
||
|
configurable cache timeout.
|
||
|
- added :class:`CommonRequestDescriptorsMixin`
|
||
|
- added :attr:`CommonResponseDescriptorsMixin.mimetype_params`
|
||
|
- added :mod:`werkzeug.contrib.lint`
|
||
|
- added `passthrough_errors` to `run_simple`.
|
||
|
- added `secure_filename`
|
||
|
- added :func:`make_line_iter`
|
||
|
- :class:`MultiDict` copies now instead of revealing internal
|
||
|
lists to the caller for `getlist` and iteration functions that
|
||
|
return lists.
|
||
|
- added :attr:`follow_redirect` to the :func:`open` of :class:`Client`.
|
||
|
- added support for `extra_files` in
|
||
|
:func:`~werkzeug.script.make_runserver`
|
||
|
|
||
|
Version 0.4.1
|
||
|
-------------
|
||
|
|
||
|
(Bugfix release, released on January 11th 2009)
|
||
|
|
||
|
- `werkzeug.contrib.cache.Memcached` accepts now objects that
|
||
|
implement the memcache.Client interface as alternative to a list of
|
||
|
strings with server addresses.
|
||
|
There is also now a `GAEMemcachedCache` that connects to the Google
|
||
|
appengine cache.
|
||
|
- explicitly convert secret keys to bytestrings now because Python
|
||
|
2.6 no longer does that.
|
||
|
- `url_encode` and all interfaces that call it, support ordering of
|
||
|
options now which however is disabled by default.
|
||
|
- the development server no longer resolves the addresses of clients.
|
||
|
- Fixed a typo in `werkzeug.test` that broke `File`.
|
||
|
- `Map.bind_to_environ` uses the `Host` header now if available.
|
||
|
- Fixed `BaseCache.get_dict` (#345)
|
||
|
- `werkzeug.test.Client` can now run the application buffered in which
|
||
|
case the application is properly closed automatically.
|
||
|
- Fixed `Headers.set` (#354). Caused header duplication before.
|
||
|
- Fixed `Headers.pop` (#349). default parameter was not properly
|
||
|
handled.
|
||
|
- Fixed UnboundLocalError in `create_environ` (#351)
|
||
|
- `Headers` is more compatible with wsgiref now.
|
||
|
- `Template.render` accepts multidicts now.
|
||
|
- dropped support for Python 2.3
|
||
|
|
||
|
Version 0.4
|
||
|
-----------
|
||
|
|
||
|
Released on November 23rd 2008, codename Schraubenzieher.
|
||
|
|
||
|
- `Client` supports an empty `data` argument now.
|
||
|
- fixed a bug in `Response.application` that made it impossible to use it
|
||
|
as method decorator.
|
||
|
- the session system should work on appengine now
|
||
|
- the secure cookie works properly in load balanced environments with
|
||
|
different cpu architectures now.
|
||
|
- `CacheControl.no_cache` and `CacheControl.private` behavior changed to
|
||
|
reflect the possibilities of the HTTP RFC. Setting these attributes to
|
||
|
`None` or `True` now sets the value to "the empty value".
|
||
|
More details in the documentation.
|
||
|
- fixed `werkzeug.contrib.atom.AtomFeed.__call__`. (#338)
|
||
|
- `BaseResponse.make_conditional` now always returns `self`. Previously
|
||
|
it didn't for post requests and such.
|
||
|
- fixed a bug in boolean attribute handling of `html` and `xhtml`.
|
||
|
- added graceful error handling to the debugger pastebin feature.
|
||
|
- added a more list like interface to `Headers` (slicing and indexing
|
||
|
works now)
|
||
|
- fixed a bug with the `__setitem__` method of `Headers` that didn't
|
||
|
properly remove all keys on replacing.
|
||
|
- added `remove_entity_headers` which removes all entity headers from
|
||
|
a list of headers (or a `Headers` object)
|
||
|
- the responses now automatically call `remove_entity_headers` if the
|
||
|
status code is 304.
|
||
|
- fixed a bug with `Href` query parameter handling. Previously the last
|
||
|
item of a call to `Href` was not handled properly if it was a dict.
|
||
|
- headers now support a `pop` operation to better work with environ
|
||
|
properties.
|
||
|
|
||
|
|
||
|
Version 0.3.1
|
||
|
-------------
|
||
|
|
||
|
(bugfix release, released on June 24th 2008)
|
||
|
|
||
|
- fixed a security problem with `werkzeug.contrib.SecureCookie`.
|
||
|
More details available in the `release announcement`_.
|
||
|
|
||
|
.. _release announcement: http://lucumr.pocoo.org/cogitations/2008/06/24/werkzeug-031-released/
|
||
|
|
||
|
Version 0.3
|
||
|
-----------
|
||
|
|
||
|
Released on June 14th 2008, codename EUR325CAT6.
|
||
|
|
||
|
- added support for redirecting in url routing.
|
||
|
- added `Authorization` and `AuthorizationMixin`
|
||
|
- added `WWWAuthenticate` and `WWWAuthenticateMixin`
|
||
|
- added `parse_list_header`
|
||
|
- added `parse_dict_header`
|
||
|
- added `parse_authorization_header`
|
||
|
- added `parse_www_authenticate_header`
|
||
|
- added `_get_current_object` method to `LocalProxy` objects
|
||
|
- added `parse_form_data`
|
||
|
- `MultiDict`, `CombinedMultiDict`, `Headers`, and `EnvironHeaders` raise
|
||
|
special key errors now that are subclasses of `BadRequest` so if you
|
||
|
don't catch them they give meaningful HTTP responses.
|
||
|
- added support for alternative encoding error handling and the new
|
||
|
`HTTPUnicodeError` which (if not caught) behaves like a `BadRequest`.
|
||
|
- added `BadRequest.wrap`.
|
||
|
- added ETag support to the SharedDataMiddleware and added an option
|
||
|
to disable caching.
|
||
|
- fixed `is_xhr` on the request objects.
|
||
|
- fixed error handling of the url adapter's `dispatch` method. (#318)
|
||
|
- fixed bug with `SharedDataMiddleware`.
|
||
|
- fixed `Accept.values`.
|
||
|
- `EnvironHeaders` contain content-type and content-length now
|
||
|
- `url_encode` treats lists and tuples in dicts passed to it as multiple
|
||
|
values for the same key so that one doesn't have to pass a `MultiDict`
|
||
|
to the function.
|
||
|
- added `validate_arguments`
|
||
|
- added `BaseRequest.application`
|
||
|
- improved Python 2.3 support
|
||
|
- `run_simple` accepts `use_debugger` and `use_evalex` parameters now,
|
||
|
like the `make_runserver` factory function from the script module.
|
||
|
- the `environ_property` is now read-only by default
|
||
|
- it's now possible to initialize requests as "shallow" requests which
|
||
|
causes runtime errors if the request object tries to consume the
|
||
|
input stream.
|
||
|
|
||
|
|
||
|
Version 0.2
|
||
|
-----------
|
||
|
|
||
|
Released Feb 14th 2008, codename Faustkeil.
|
||
|
|
||
|
- Added `AnyConverter` to the routing system.
|
||
|
- Added `werkzeug.contrib.securecookie`
|
||
|
- Exceptions have a ``get_response()`` method that return a response object
|
||
|
- fixed the path ordering bug (#293), thanks Thomas Johansson
|
||
|
- `BaseReporterStream` is now part of the werkzeug contrib module. From
|
||
|
Werkzeug 0.3 onwards you will have to import it from there.
|
||
|
- added `DispatcherMiddleware`.
|
||
|
- `RequestRedirect` is now a subclass of `HTTPException` and uses a
|
||
|
301 status code instead of 302.
|
||
|
- `url_encode` and `url_decode` can optionally treat keys as unicode strings
|
||
|
now, too.
|
||
|
- `werkzeug.script` has a different caller format for boolean arguments now.
|
||
|
- renamed `lazy_property` to `cached_property`.
|
||
|
- added `import_string`.
|
||
|
- added is_* properties to request objects.
|
||
|
- added `empty()` method to routing rules.
|
||
|
- added `werkzeug.contrib.profiler`.
|
||
|
- added `extends` to `Headers`.
|
||
|
- added `dump_cookie` and `parse_cookie`.
|
||
|
- added `as_tuple` to the `Client`.
|
||
|
- added `werkzeug.contrib.testtools`.
|
||
|
- added `werkzeug.unescape`
|
||
|
- added `BaseResponse.freeze`
|
||
|
- added `werkzeug.contrib.atom`
|
||
|
- the HTTPExceptions accept an argument `description` now which overrides the
|
||
|
default description.
|
||
|
- the `MapAdapter` has a default for path info now. If you use
|
||
|
`bind_to_environ` you don't have to pass the path later.
|
||
|
- the wsgiref subclass werkzeug uses for the dev server does not use direct
|
||
|
sys.stderr logging any more but a logger called "werkzeug".
|
||
|
- implemented `Href`.
|
||
|
- implemented `find_modules`
|
||
|
- refactored request and response objects into base objects, mixins and
|
||
|
full featured subclasses that implement all mixins.
|
||
|
- added simple user agent parser
|
||
|
- werkzeug's routing raises `MethodNotAllowed` now if it matches a
|
||
|
rule but for a different method.
|
||
|
- many fixes and small improvements
|
||
|
|
||
|
|
||
|
Version 0.1
|
||
|
-----------
|
||
|
|
||
|
Released on Dec 9th 2007, codename Wictorinoxger.
|
||
|
|
||
|
- Initial release
|