Chris McDonough
2011-06-21 c724f039d58f2c126594b7a644a0de1b97e17910
- The pyramid Router attempted to set a value into the key
``environ['repoze.bfg.message']`` when it caught a view-related exception
for backwards compatibility with :mod:`repoze.bfg` during error handling.
It did this by using code that looked like so::

# "why" is an exception object
try:
msg = why[0]
except:
msg = ''

environ['repoze.bfg.message'] = msg

Use of the value ``environ['repoze.bfg.message']`` was docs-deprecated in
Pyramid 1.0. Our standing policy is to not remove features after a
deprecation for two full major releases, so this code was originally slated
to be removed in Pyramid 1.2. However, computing the
``repoze.bfg.message`` value was the source of at least one bug found in
the wild (https://github.com/Pylons/pyramid/issues/199), and there isn't a
foolproof way to both preserve backwards compatibility and to fix the bug.
Therefore, the code which sets the value has been removed in this release.
Code in exception views which relies on this value's presence in the
environment should now use the ``exception`` attribute of the request
(e.g. ``request.exception[0]``) to retrieve the message instead of relying
on ``request.environ['repoze.bfg.message']``.

Closes #199.
2 files modified
40 ■■■■ changed files
CHANGES.txt 32 ●●●●● patch | view | raw | blame | history
pyramid/router.py 8 ●●●●● patch | view | raw | blame | history
CHANGES.txt
@@ -1,3 +1,35 @@
Next release
============
Backwards Incompatibilities
---------------------------
- The pyramid Router attempted to set a value into the key
  ``environ['repoze.bfg.message']`` when it caught a view-related exception
  for backwards compatibility with :mod:`repoze.bfg` during error handling.
  It did this by using code that looked like so::
                    # "why" is an exception object
                    try:
                        msg = why[0]
                    except:
                        msg = ''
                    environ['repoze.bfg.message'] = msg
  Use of the value ``environ['repoze.bfg.message']`` was docs-deprecated in
  Pyramid 1.0.  Our standing policy is to not remove features after a
  deprecation for two full major releases, so this code was originally slated
  to be removed in Pyramid 1.2.  However, computing the
  ``repoze.bfg.message`` value was the source of at least one bug found in
  the wild (https://github.com/Pylons/pyramid/issues/199), and there isn't a
  foolproof way to both preserve backwards compatibility and to fix the bug.
  Therefore, the code which sets the value has been removed in this release.
  Code in exception views which relies on this value's presence in the
  environment should now use the ``exception`` attribute of the request
  (e.g. ``request.exception[0]``) to retrieve the message instead of relying
  on ``request.environ['repoze.bfg.message']``.
1.1a1 (2011-06-20)
==================
pyramid/router.py
@@ -170,14 +170,6 @@
                    if view_callable is None:
                        raise
                    try:
                        msg = why[0]
                    except:
                        msg = ''
                    # repoze.bfg.message docs-deprecated in Pyramid 1.0
                    environ['repoze.bfg.message'] = msg
                    result = view_callable(why, request)
                # process the response