1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
|
What's New In Pyramid 1.6
=========================
This article explains the new features in :app:`Pyramid` version 1.6 as
compared to its predecessor, :app:`Pyramid` 1.6. It also documents backwards
incompatibilities between the two versions and deprecations added to
:app:`Pyramid` 1.6, as well as software dependency changes and notable
documentation additions.
Backwards Incompatibilities
---------------------------
- ``request.response`` will no longer be mutated when using the
:func:`~pyramid.renderers.render_to_response` API. It is now necessary
to pass in
a ``response=`` argument to :func:`~pyramid.renderers.render_to_response` if
you wish to supply the renderer with a custom response object for it to
use. If you do not pass one then a response object will be created using the
current response factory. Almost all renderers mutate the
``request.response`` response object (for example, the JSON renderer sets
``request.response.content_type`` to ``application/json``). However, when
invoking ``render_to_response`` it is not expected that the response object
being returned would be the same one used later in the request. The response
object returned from ``render_to_response`` is now explicitly different from
``request.response``. This does not change the API of a renderer. See
https://github.com/Pylons/pyramid/pull/1563
Feature Additions
-----------------
- Cache busting for static assets has been added and is available via a new
argument to :meth:`pyramid.config.Configurator.add_static_view`:
``cachebust``. Core APIs are shipped for both cache busting via query
strings and path segments and may be extended to fit into custom asset
pipelines. See https://github.com/Pylons/pyramid/pull/1380 and
https://github.com/Pylons/pyramid/pull/1583
- Assets can now be overidden by an absolute path on the filesystem when using
the :meth:`~pyramid.config.Configurator.override_asset` API. This makes it
possible to fully support serving up static content from a mutable directory
while still being able to use the :meth:`~pyramid.request.Request.static_url`
API and :meth:`~pyramid.config.Configurator.add_static_view`. Previously it
was not possible to use :meth:`~pyramid.config.Configurator.add_static_view`
with an absolute path **and** generate urls to the content. This change
replaces the call, ``config.add_static_view('/abs/path', 'static')``, with
``config.add_static_view('myapp:static', 'static')`` and
``config.override_asset(to_override='myapp:static/',
override_with='/abs/path/')``. The ``myapp:static`` asset spec is completely
made up and does not need to exist - it is used for generating urls via
``request.static_url('myapp:static/foo.png')``. See
https://github.com/Pylons/pyramid/issues/1252
- Added :meth:`~pyramid.config.Configurator.set_response_factory` and the
``response_factory`` keyword argument to the constructor of
:class:`~pyramid.config.Configurator` for defining a factory that will return
a custom ``Response`` class. See https://github.com/Pylons/pyramid/pull/1499
- Add :attr:`pyramid.config.Configurator.root_package` attribute and init
parameter to assist with includeable packages that wish to resolve
resources relative to the package in which the configurator was created.
This is especially useful for addons that need to load asset specs from
settings, in which case it is may be natural for a developer to define
imports or assets relative to the top-level package.
See https://github.com/Pylons/pyramid/pull/1337
- Overall improvments for the ``proutes`` command. Added ``--format`` and
``--glob`` arguments to the command, introduced the ``method``
column for displaying available request methods, and improved the ``view``
output by showing the module instead of just ``__repr__``.
See https://github.com/Pylons/pyramid/pull/1488
- ``pserve`` can now take a ``-b`` or ``--browser`` option to open the server
URL in a web browser. See https://github.com/Pylons/pyramid/pull/1533
- Support keyword-only arguments and function annotations in views in
Python 3. See https://github.com/Pylons/pyramid/pull/1556
- The ``append_slash`` argument of
:meth:`~pyramid.config.Configurator.add_notfound_view()` will now accept
anything that implements the :class:`~pyramid.interfaces.IResponse` interface
and will use that as the response class instead of the default
:class:`~pyramid.httpexceptions.HTTPFound`. See
https://github.com/Pylons/pyramid/pull/1610
- The :class:`~pyramid.config.Configurator` has grown the ability to allow
actions to call other actions during a commit-cycle. This enables much more
logic to be placed into actions, such as the ability to invoke other actions
or group them for improved conflict detection. We have also exposed and
documented the config phases that Pyramid uses in order to further assist in
building conforming addons. See https://github.com/Pylons/pyramid/pull/1513
- Allow an iterator to be returned from a renderer. Previously it was only
possible to return bytes or unicode.
See https://github.com/Pylons/pyramid/pull/1417
- Improve robustness to timing attacks in the
:class:`~pyramid.authentication.AuthTktCookieHelper` and the
:class:`~pyramid.session.SignedCookieSessionFactory` classes by using the
stdlib's ``hmac.compare_digest`` if it is available (such as Python 2.7.7+ and
3.3+). See https://github.com/Pylons/pyramid/pull/1457
- Improve the readability of the ``pcreate`` shell script output.
See https://github.com/Pylons/pyramid/pull/1453
- Make it simple to define notfound and forbidden views that wish to use the
default exception-response view but with altered predicates and other
configuration options. The ``view`` argument is now optional in
:meth:`~pyramid.config.Configurator.add_notfound_view` and
:meth:`~pyramid.config.Configurator.add_forbidden_view` See
https://github.com/Pylons/pyramid/issues/494
- The ``pshell`` script will now load a ``PYTHONSTARTUP`` file if one is
defined in the environment prior to launching the interpreter.
See https://github.com/Pylons/pyramid/pull/1448
- Add new HTTP exception objects for status codes
``428 Precondition Required``, ``429 Too Many Requests`` and
``431 Request Header Fields Too Large`` in ``pyramid.httpexceptions``.
See https://github.com/Pylons/pyramid/pull/1372/files
- ``pcreate`` when run without a scaffold argument will now print information
on the missing flag, as well as a list of available scaffolds. See
https://github.com/Pylons/pyramid/pull/1566 and
https://github.com/Pylons/pyramid/issues/1297
- Add :func:`pyramid.request.apply_request_extensions` function which can be
used in testing to apply any request extensions configured via
``config.add_request_method``. Previously it was only possible to test the
extensions by going through Pyramid's router. See
https://github.com/Pylons/pyramid/pull/1581
- Make it possible to subclass ``pyramid.request.Request`` and also use
``pyramid.request.Request.add_request.method``. See
https://github.com/Pylons/pyramid/issues/1529
Deprecations
------------
- The ``principal`` argument to :func:`pyramid.security.remember` was renamed
to ``userid``. Using ``principal`` as the argument name still works and will
continue to work for the next few releases, but a deprecation warning is
printed.
Scaffolding Enhancements
------------------------
- Added line numbers to the log formatters in the scaffolds to assist with
debugging. See https://github.com/Pylons/pyramid/pull/1326
- Update scaffold generating machinery to return the version of pyramid and
pyramid docs for use in scaffolds. Updated ``starter``, ``alchemy`` and
``zodb`` templates to have links to correctly versioned documentation and
reflect which pyramid was used to generate the scaffold.
- Removed non-ascii copyright symbol from templates, as this was
causing the scaffolds to fail for project generation.
Documentation Enhancements
--------------------------
- Removed logging configuration from Quick Tutorial ini files except for
scaffolding- and logging-related chapters to avoid needing to explain it too
early.
- Improve and clarify the documentation on what Pyramid defines as a
``principal`` and a ``userid`` in its security APIs.
See https://github.com/Pylons/pyramid/pull/1399
|