Skip to content

Latest commit

 

History

History
executable file
·
237 lines (161 loc) · 15.7 KB

changelog.rst

File metadata and controls

executable file
·
237 lines (161 loc) · 15.7 KB

.. highlight:: python .. currentmodule:: bottle

Release Notes

Release 0.14 (in development)

Removed APIs (deprecated since 0.13)

  • Removed the RouteReset exception and associated logic.
  • Removed the bottle.py console script entrypoint in favour of the new bottle script. You can still execute bottle.py directly or via python -m bottle. The only change is that the command installed by pip or similar tools into the bin/Scripts folder of the (virtual) environment is now called bottle to avoid circular import errors.

Changes

  • bottle.HTTPError raised on Invalid JSON now include the underlying exception in their exception field.

Release 0.13

Warning

This release contains breaking changers, please read the notes below

Dropped support for Python versions that reached their end-of-life.

Bottle up to 0.12 supported an absurd range of Python versions (2.5 to 3.12) and keeping support for Python versions as ancient as 2.5 required a ton of workarounds and compromises, but served no real purpose. If you need support for older Python versions, you can stay on bottle 0.12. The updated list of tested and supported python releases is as follows:

  • Python 2 >= 2.7.3
  • Python 3 >= 3.8

Support for Python 2.5 was marked as deprecated since 0.12. We decided to go a step further and also remove support for 2.6 and 3.1 to 3.7 even if it was never deprecated explicitly in bottle. This means that this release is not backwards compatible in Python <2.7.3 or <3.8 environments. Maintainers for distributions or systems that still use these old python versions should not update to Bottle 0.13 and stick with 0.12 instead.

Stabilized APIs

  • The documented API of the :class:`ConfigDict` class is now considered stable and ready to use.

Deprecated APIs

  • Python 2 support is now deprecated and will be dropped with the next release.
  • The command line executable installed along with bottle will be renamed from bottle.py to just bottle. You can still execute bottle directly as a script (e.g. ./bottle.py or python3 bottle.py) or as a module (via python3 -m bottle). Just the executable installed by your packaging tool (e.g. pip) into the bin folder of your (virtual) environment will change.
  • The old route syntax (/hello/:name) is deprecated in favor of the more readable and flexible /hello/<name> syntax.
  • :meth:`Bottle.mount` now recognizes Bottle instance and will warn about parameters that are not compatible with the new mounting behavior. The old behavior (mount applications as WSGI callable) still works and is used as a fallback automatically.
  • The undocumented :func:`local_property` helper is now deprecated.
  • The server adapter for google app engine is not useful anymore and marked as deprecated.
  • Bottle uses pickle to store arbitrary objects into signed cookies. This is safe, as long as the signature key remains a secret. Unfortunately, people tend to push code with signature keys to github all the time, so we decided to remove pickle-support from bottle. Signed cookies will now issue a deprecation warning if the value is not a string, and support for non-string values will be removed in 0.14. The global :func:`cookie_encode`, :func:`cookie_decode` and :func:`is_cookie_encoded` are now also deprecated. If you are using this feature, think about using json to serialize your objects before storing them into cookies, or switch to a session system that stores data server-side instead of client-side.

Removed APIs (deprecated since 0.12)

  • Plugins with the old API (api=1 or no api attribute) will no longer work.
  • Parameter order of :meth:`Bottle.mount` changed in 0.10. The old order will now result in an error instead of a warning.
  • The :class:`ConfigDict` class was introduced in 0.11 and changed during 0.12. These changes are now final.
    • Attribute access and assignment was removed due to high overhead and limited usability.
    • Namespaced sub-instance creation was removed. config["a"]["b"] has a high overhead and little benefit over config["a.b"].
    • :class:`ConfigDict` instances are no longer callable. This was a shortcut for :meth:`ConfigDict.update`.
    • :class:`ConfigDict` constructor no longer accepts any parameters. Use the load_* methods instead.
  • Bottle 0.12 changed some aspects of the Simple Template Engine. These changes are now final and the old syntax will now longer work.
    • The magic {{rebase()}} call was replaced by a base variable. Example: {{base}}
    • In STPL Templates, the rebase and include keywords were replaced with functions in 0.12.
    • PEP-263 encoding strings are no longer recognized. Templates are always utf-8.
  • The 'geventSocketIO' server adapter was removed without notice. It did not work anyway.

Changes

These changes might require special care when updating.

  • Signed cookies now use a stronger HMAC algorithm by default. This will result in old cookies to appear invalid after the update. Pass an explicit digestmod=hashlib.md5 to :meth:`Request.get_cookie <BaseRequest.get_cookie>` and :meth:`Response.set_cookie <BaseResponse.set_cookie>` to get the old behavior.
  • Bottle now ships with its own multipart form data parser (borrowed from multipart) and no longer relies on cgi.FieldStorage, which was removed in Python 3.13. This may change the way broken (non-standard) form submissions are parsed. The new parser is more strict and correct than ohe old one.
  • Installing bottle with pip or similar tools will now install an additional command line executable named bottle into the bin folder of your (virtual) environment. This will replace the now deprecated bottle.py executable in a later release. See above.

Other Improvements

  • :class:`Bottle` instances are now context managers. If used in a with-statement, the default application changes to the specific instance and the shortcuts for many instance methods can be used.
  • Added support for PATCH requests and the :meth:`Bottle.patch` decorator.
  • Added aiohttp and uvloop server adapters.
  • Added command-line arguments for config from json or ini files.
  • :meth:`Bottle.mount` now recognizes instances of :class:`Bottle` and mounts them with significantly less overhead than other WSGI applications.
  • The :attr:`Request.json <BaseRequest.json>` property now accepts application/json-rpc requests.
  • :func:`static_file` gained support for ETag headers. It will generate ETags and recognizes If-None-Match headers.
  • :func:`static_file` will now guess the mime type of *.gz and other compressed files correctly (e.g. application/gzip) and NOT set the Content-Encoding header.
  • Jinja2 templates will produce better error messages than before.

Release 0.12

  • New SimpleTemplate parser implementation
    • Support for multi-line code blocks (<% ... %>).
    • The keywords include and rebase are functions now and can accept variable template names.
  • The new :attr:`Request.route <BaseRequest.route>` property returns the :class:`Route` that originally matched the request.
  • Removed the Request.MAX_PARAMS limit. The hash collision bug in CPythons dict() implementation was fixed over a year ago. If you are still using Python 2.5 in production, consider upgrading or at least make sure that you get security fixed from your distributor.
  • New :class:`ConfigDict` API (see :doc:`configuration`)

More information can be found in this development blog post.

Release 0.11

API Changes

API Deprecations

Release 0.10

Release 0.9

Whats new?

Performance improvements

  • The :class:`Router` now special-cases wsgi.run_once environments to speed up CGI.
  • Reduced module load time by ~30% and optimized template parser. See 8ccb2d, f72a7c and b14b9a for details.
  • Support for "App Caching" on Google App Engine. See af93ec.
  • Some of the rarely used or deprecated features are now plugins that avoid overhead if the feature is not used.

API changes

This release is mostly backward compatible, but some APIs are marked deprecated now and will be removed for the next release. Most noteworthy:

  • The static route parameter is deprecated. You can escape wild-cards with a backslash.
  • Type-based output filters are deprecated. They can easily be replaced with plugins.

Release 0.8

API changes

These changes may break compatibility with previous versions.

New features

This is an incomplete list of new features and improved functionality.