Releases: pallets/werkzeug
3.1.3
This is the Werkzeug 3.1.3 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes vs 3.1.0.
PyPI: https://pypi.org/project/Werkzeug/3.1.3/
Changes: https://werkzeug.palletsprojects.com/en/stable/changes/#version-3-1-3
Milestone: https://github.com/pallets/werkzeug/milestone/41?closed=1
- Initial data passed to
MultiDict
and similar interfaces only acceptslist
,tuple
, orset
when passing multiple values. It had been changed to accept anyCollection
, but this matched types that should be treated as single values, such asbytes
. #2994 - When the
Host
header is not set andRequest.host
falls back to the WSGISERVER_NAME
value, if that value is an IPv6 address it is wrapped in[]
to match theHost
header. #2993
3.1.2
This is the Werkzeug 3.1.2 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes vs 3.1.0.
PyPI: https://pypi.org/project/Werkzeug/3.1.2/
Changes: https://werkzeug.palletsprojects.com/en/stable/changes/#version-3-1-2
Milestone: https://github.com/pallets/werkzeug/milestone/40?closed=1
3.1.1
This is the Werkzeug 3.1.1 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes vs 3.1.0.
PyPI: https://pypi.org/project/Werkzeug/3.1.1/
Changes: https://werkzeug.palletsprojects.com/en/stable/changes/#version-3-1-1
Milestone: https://github.com/pallets/werkzeug/milestone/38?closed=1
- Fix an issue that caused
str(Request.headers)
to always appear empty. #2985
3.1.0
This is the Werkzeug 3.1.0 feature release. A feature release may include new features, remove previously deprecated code, add new deprecations, or introduce potentially breaking changes. We encourage everyone to upgrade, and to use a tool such as pip-tools to pin all dependencies and control upgrades. Test with warnings treated as errors to be able to adapt to deprecation warnings early.
PyPI: https://pypi.org/project/Werkzeug/3.1.0/
Changes: https://werkzeug.palletsprojects.com/en/stable/changes/#version-3-1-0
Milestone: https://github.com/pallets/werkzeug/milestone/34?closed=1
- Drop support for Python 3.8. #2966
- Remove previously deprecated code. #2967
Request.max_form_memory_size
defaults to 500kB instead of unlimited. Non-file form fields over this size will cause aRequestEntityTooLarge
error. #2964OrderedMultiDict
andImmutableOrderedMultiDict
are deprecated. UseMultiDict
andImmutableMultiDict
instead. #2968- Behavior of properties on
request.cache_control
andresponse.cache_control
has been significantly adjusted.- Dict values are always
str | None
. Setting properties will convert the value to a string. Setting a property toFalse
is equivalent to setting it toNone
. Getting typed properties will returnNone
if conversion raisesValueError
, rather than the string. #2980 max_age
isNone
if present without a value, rather than-1
. #2980no_cache
is a boolean for requests, it isTrue
instead of"*"
when present. It remains a string for responses. #2980max_stale
isTrue
if present without a value, rather than"*"
. #2980no_transform
is a boolean. Previously it was mistakenly alwaysNone
. #2881min_fresh
isNone
if present without a value, rather than"*"
. #2881private
isTrue
if present without a value, rather than"*"
. #2980- Added the
must_understand
property. #2881 - Added the
stale_while_revalidate
, andstale_if_error
properties. #2948 - Type annotations more accurately reflect the values. #2881
- Dict values are always
- Support Cookie CHIPS (Partitioned Cookies). #2797
- Add 421
MisdirectedRequest
HTTP exception. #2850 - Increase default work factor for PBKDF2 to 1,000,000 iterations. #2969
- Inline annotations for
datastructures
, removing stub files. #2970 MultiDict.getlist
catchesTypeError
in addition toValueError
when doing type conversion. #2976- Implement
|
and|=
operators forMultiDict
,Headers
, andCallbackDict
, and disallow|=
on immutable types. #2977
3.0.6
This is the Werkzeug 3.0.6 security fix release, which fixes security issues but does not otherwise change behavior and should not result in breaking changes.
PyPI: https://pypi.org/project/Werkzeug/3.0.6/
Changes: https://werkzeug.palletsprojects.com/en/stable/changes/#version-3-0-6
- Fix how
max_form_memory_size
is applied when parsing large non-file fields. GHSA-q34m-jh98-gwm2 safe_join
catches certain paths on Windows that were not caught byntpath.isabs
on Python < 3.11. GHSA-f9vj-2wh5-fj8j
3.0.5
This is the Werkzeug 3.0.5 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes.
PyPI: https://pypi.org/project/Werkzeug/3.0.5/
Changes: https://werkzeug.palletsprojects.com/en/stable/changes/#version-3-0-5
Milestone: https://github.com/pallets/werkzeug/milestone/37?closed=1
- The Watchdog reloader ignores file closed no write events. #2945
- Logging works with client addresses containing an IPv6 scope. #2952
- Ignore invalid authorization parameters. #2955
- Improve type annotation fore
SharedDataMiddleware
. #2958 - Compatibility with Python 3.13 when generating debugger pin and the current UID does not have an associated name. #2957
3.0.4
This is the Werkzeug 3.0.4 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes.
PyPI: https://pypi.org/project/Werkzeug/3.0.4/
Changes: https://werkzeug.palletsprojects.com/en/3.0.x/changes/#version-3-0-4
Milestone: https://github.com/pallets/werkzeug/milestone/36?closed=1
- Restore behavior where parsing
multipart/x-www-form-urlencoded
data with
invalid UTF-8 bytes in the body results in no form data parsed rather than a
413 error. #2930 - Improve
parse_options_header
performance when parsing unterminated
quoted string values. #2904 - Debugger pin auth is synchronized across threads/processes when tracking
failed entries. #2916 - Dev server handles unexpected
SSLEOFError
due to issue in Python < 3.13.
#2926 - Debugger pin auth works when the URL already contains a query string.
#2918
3.0.3
This is the Werkzeug 3.0.3 security release, which fixes security issues and bugs but does not otherwise change behavior and should not result in breaking changes.
PyPI: https://pypi.org/project/Werkzeug/3.0.3/
Changes: https://werkzeug.palletsprojects.com/en/3.0.x/changes/#version-3-0-3
Milestone: https://github.com/pallets/werkzeug/milestone/35?closed=1
- Only allow
localhost
,.localhost
,127.0.0.1
, or the specified hostname when running the dev server, to make debugger requests. Additional hosts can be added by using the debugger middleware directly. The debugger UI makes requests using the full URL rather than only the path. GHSA-2g68-c3qc-8985 - Make reloader more robust when
""
is insys.path
. #2823 - Better TLS cert format with
adhoc
dev certs. #2891 - Inform Python < 3.12 how to handle
itms-services
URIs correctly, rather than using an overly-broad workaround in Werkzeug that caused some redirect URIs to be passed on without encoding. #2828 - Type annotation for
Rule.endpoint
and other uses ofendpoint
isAny
. #2836
3.0.2
This is a fix release for the 3.0.x feature branch.
2.3.8
This is a security release for the 2.3.x feature branch.