Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Newer
Older
100644 922 lines (702 sloc) 40.204 kb
0d96b77 @mcdonc version bump in setup.py conf.py CHANGES.txt, rejigger changes bugs vs. ...
mcdonc authored
1 Next Release
2d93140 @mmerickel support acl as a callable
mmerickel authored
2 ============
3
4 Features
5 --------
6
1930ebf @mcdonc Permit escaping of double braces in scaffolds, see #862
mcdonc authored
7 - It is now possible to escape double braces in Pyramid scaffolds (unescaped,
8 these represent replacement values). You can use ``\{\{a\}\}`` to
9 represent a "bare" ``{{a}}``. See
10 https://github.com/Pylons/pyramid/pull/862
11
330164c @mcdonc make local_name an attribute of Request, move logic from get_localizer i...
mcdonc authored
12 - Add ``localizer`` and ``locale_name`` properties (reified) to the request.
13 See https://github.com/Pylons/pyramid/issues/508. Note that the
14 ``pyramid.i18n.get_localizer`` and ``pyramid.i18n.get_locale_name`` functions
15 now simply look up these properties on the request.
c614ffc @witsch add ``localizer`` property to the request (refs #508)
witsch authored
16
b210ce3 @mcdonc add pdistreport command
mcdonc authored
17 - Add ``pdistreport`` script, which prints the Python version in use, the
18 Pyramid version in use, and the version number and location of all Python
19 distributions currently installed.
20
32333e4 @mcdonc add not_ predicate feature
mcdonc authored
21 - Add the ability to invert the result of any view, route, or subscriber
22 predicate using the ``not_`` class. For example::
23
24 from pyramid.config import not_
25
26 @view_config(route_name='myroute', request_method=not_('POST'))
27 def myview(request): ...
28
29 The above example will ensure that the view is called if the request method
30 is not POST (at least if no other view is more specific).
31
32 The :class:`pyramid.config.not_` class can be used against any value that is
33 a predicate value passed in any of these contexts:
34
35 - ``pyramid.config.Configurator.add_view``
36
37 - ``pyramid.config.Configurator.add_route``
38
39 - ``pyramid.config.Configurator.add_subscriber``
40
41 - ``pyramid.view.view_config``
42
43 - ``pyramid.events.subscriber``
44
a178631 @mcdonc add an entry to changes about code merged from feature.prequest_login br...
mcdonc authored
45 - ``scripts/prequest.py``: add support for submitting ``PUT`` and ``PATCH``
46 requests. See https://github.com/Pylons/pyramid/pull/1033. add support for
0d96b77 @mcdonc version bump in setup.py conf.py CHANGES.txt, rejigger changes bugs vs. ...
mcdonc authored
47 submitting ``OPTIONS`` and ``PROPFIND`` requests, and allow users to specify
a178631 @mcdonc add an entry to changes about code merged from feature.prequest_login br...
mcdonc authored
48 basic authentication credentials in the request via a ``--login`` argument to
49 the script. See https://github.com/Pylons/pyramid/pull/1039.
f0f92b0 @tseaver Changelog for PR #1033.
tseaver authored
50
2d93140 @mmerickel support acl as a callable
mmerickel authored
51 - ``ACLAuthorizationPolicy`` supports ``__acl__`` as a callable. This
52 removes the ambiguity between the potential ``AttributeError`` that would
53 be raised on the ``context`` when the property was not defined and the
54 ``AttributeError`` that could be raised from any user-defined code within
55 a dynamic property. It is recommended to define a dynamic ACL as a callable
56 to avoid this ambiguity. See https://github.com/Pylons/pyramid/issues/735.
57
ff41f86 @wosc Fixes #798: Allow a protocol-relative URL to be passed to add_static_vie...
wosc authored
58 - Allow a protocol-relative URL (e.g. ``//example.com/images``) to be passed to
59 ``pyramid.config.Configurator.add_static_view``. This allows
60 externally-hosted static URLs to be generated based on the current protocol.
61
a1f768c @wichert Allow explicit cookie domain setting.
wichert authored
62 - The ``AuthTktAuthenticationPolicy`` has two new options to configure its
63 domain usage:
58c5fef @tshepang fix some rST issues
tshepang authored
64
a1f768c @wichert Allow explicit cookie domain setting.
wichert authored
65 * ``parent_domain``: if set the authentication cookie is set on
66 the parent domain. This is useful if you have multiple sites sharing the
67 same domain.
68 * ``domain``: if provided the cookie is always set for this domain, bypassing
58c5fef @tshepang fix some rST issues
tshepang authored
69 all usual logic.
70
3ea7883 @tomster Add reference to the pull requests
tomster authored
71 See https://github.com/Pylons/pyramid/pull/1028,
72 https://github.com/Pylons/pyramid/pull/1072 and
73 https://github.com/Pylons/pyramid/pull/1078.
188aa7e @wichert Add a parent_domain option for auth_tkt policy
wichert authored
74
23a7c6d @mmerickel update CHANGES.txt
mmerickel authored
75 - The ``AuthTktAuthenticationPolicy`` now supports IPv6 addresses when using
76 the ``include_ip=True`` option. This is possibly incompatible with
77 alternative ``auth_tkt`` implementations, as the specification does not
78 define how to properly handle IPv6. See
79 https://github.com/Pylons/pyramid/issues/831.
80
38844f7 @mmerickel update CHANGES.txt
mmerickel authored
81 - Make it possible to use variable arguments via
82 ``pyramid.paster.get_appsettings``. This also allowed the generated
83 ``initialize_db`` script from the ``alchemy`` scaffold to grow support
84 for options in the form ``a=1 b=2`` so you can fill in
85 values in a parameterized ``.ini`` file, e.g.
86 ``initialize_myapp_db etc/development.ini a=1 b=2``.
87 See https://github.com/Pylons/pyramid/pull/911
88
fab8454 @mcdonc add changelog note
mcdonc authored
89 - The ``request.session.check_csrf_token()`` method and the ``check_csrf`` view
90 predicate now take into account the value of the HTTP header named
91 ``X-CSRF-Token`` (as well as the ``csrf_token`` form parameter, which they
92 always did). The header is tried when the form parameter does not exist.
93
b6a4d40 @mmerickel Merge branch 'master' of latteier/pyramid into pull.786
mmerickel authored
94 - View lookup will now search for valid views based on the inheritance
95 hierarchy of the context. It tries to find views based on the most
96 specific context first, and upon predicate failure, will move up the
97 inheritance chain to test views found by the super-type of the context.
98 In the past, only the most specific type containing views would be checked
99 and if no matching view could be found then a PredicateMismatch would be
100 raised. Now predicate mismatches don't hide valid views registered on
0d96b77 @mcdonc version bump in setup.py conf.py CHANGES.txt, rejigger changes bugs vs. ...
mcdonc authored
101 super-types. Here's an example that now works:
b6a4d40 @mmerickel Merge branch 'master' of latteier/pyramid into pull.786
mmerickel authored
102
103 .. code-block:: python
9e1e6d3 @latteier Change log note.
latteier authored
104
b6a4d40 @mmerickel Merge branch 'master' of latteier/pyramid into pull.786
mmerickel authored
105 class IResource(Interface):
07c189d @stevepiercy Fix whitespace in CHANGES.txt to permit build.
stevepiercy authored
106
b6a4d40 @mmerickel Merge branch 'master' of latteier/pyramid into pull.786
mmerickel authored
107 ...
9e1e6d3 @latteier Change log note.
latteier authored
108
b6a4d40 @mmerickel Merge branch 'master' of latteier/pyramid into pull.786
mmerickel authored
109 @view_config(context=IResource)
110 def get(context, request):
07c189d @stevepiercy Fix whitespace in CHANGES.txt to permit build.
stevepiercy authored
111
b6a4d40 @mmerickel Merge branch 'master' of latteier/pyramid into pull.786
mmerickel authored
112 ...
9e1e6d3 @latteier Change log note.
latteier authored
113
b6a4d40 @mmerickel Merge branch 'master' of latteier/pyramid into pull.786
mmerickel authored
114 @view_config(context=IResource, request_method='POST')
115 def post(context, request):
07c189d @stevepiercy Fix whitespace in CHANGES.txt to permit build.
stevepiercy authored
116
b6a4d40 @mmerickel Merge branch 'master' of latteier/pyramid into pull.786
mmerickel authored
117 ...
9e1e6d3 @latteier Change log note.
latteier authored
118
b6a4d40 @mmerickel Merge branch 'master' of latteier/pyramid into pull.786
mmerickel authored
119 @view_config(context=IResource, request_method='DELETE')
120 def delete(context, request):
07c189d @stevepiercy Fix whitespace in CHANGES.txt to permit build.
stevepiercy authored
121
b6a4d40 @mmerickel Merge branch 'master' of latteier/pyramid into pull.786
mmerickel authored
122 ...
9e1e6d3 @latteier Change log note.
latteier authored
123
b6a4d40 @mmerickel Merge branch 'master' of latteier/pyramid into pull.786
mmerickel authored
124 @implementor(IResource)
125 class MyResource:
07c189d @stevepiercy Fix whitespace in CHANGES.txt to permit build.
stevepiercy authored
126
b6a4d40 @mmerickel Merge branch 'master' of latteier/pyramid into pull.786
mmerickel authored
127 ...
9e1e6d3 @latteier Change log note.
latteier authored
128
b6a4d40 @mmerickel Merge branch 'master' of latteier/pyramid into pull.786
mmerickel authored
129 @view_config(context=MyResource, request_method='POST')
130 def override_post(context, request):
07c189d @stevepiercy Fix whitespace in CHANGES.txt to permit build.
stevepiercy authored
131
b6a4d40 @mmerickel Merge branch 'master' of latteier/pyramid into pull.786
mmerickel authored
132 ...
9e1e6d3 @latteier Change log note.
latteier authored
133
134 Previously the override_post view registration would hide the get
135 and delete views in the context of MyResource -- leading to a
136 predicate mismatch error when trying to use GET or DELETE
137 methods. Now the views are found and no predicate mismatch is
138 raised.
6b97003 @mmerickel update changlog
mmerickel authored
139 See https://github.com/Pylons/pyramid/pull/786 and
75fc4ac @mmerickel update changelog
mmerickel authored
140 https://github.com/Pylons/pyramid/pull/1004 and
141 https://github.com/Pylons/pyramid/pull/1046
9e1e6d3 @latteier Change log note.
latteier authored
142
1377480 @mcdonc add change note
mcdonc authored
143 - The ``pserve`` command now takes a ``-v`` (or ``--verbose``) flag and a
144 ``-q`` (or ``--quiet``) flag. Output from running ``pserve`` can be
145 controlled using these flags. ``-v`` can be specified multiple times to
146 increase verbosity. ``-q`` sets verbosity to ``0`` unconditionally. The
147 default verbosity level is ``1``.
148
986dc5f @mcdonc add change note
mcdonc authored
149 - The ``alchemy`` scaffold tests now provide better coverage. See
150 https://github.com/Pylons/pyramid/pull/1029
151
d07d167 @mcdonc raise ValueError instead of generating just path when _app_url is provid...
mcdonc authored
152 - The ``pyramid.config.Configurator.add_route`` method now supports being
153 called with an external URL as pattern. See
154 https://github.com/Pylons/pyramid/issues/611 for more information.
8a8eff5 @tomster update changelog
tomster authored
155
0d96b77 @mcdonc version bump in setup.py conf.py CHANGES.txt, rejigger changes bugs vs. ...
mcdonc authored
156 Bug Fixes
157 ---------
158
8a7e80d @mcdonc - When the ``pyramid.reload_templates`` setting was true, and a Chameleo...
mcdonc authored
159 - When the ``pyramid.reload_templates`` setting was true, and a Chameleon
160 template was reloaded, and the renderer specification named a macro
161 (e.g. ``foo#macroname.pt``), renderings of the template after the template
162 was reloaded due to a file change would produce the entire template body
163 instead of just a rendering of the macro. See
164 https://github.com/Pylons/pyramid/issues/1013.
165
ece96f6 @mcdonc - Fix an obscure problem when combining a virtual root with a route with...
mcdonc authored
166 - Fix an obscure problem when combining a virtual root with a route with a
167 ``*traverse`` in its pattern. Now the traversal path generated in
168 such a configuration will be correct, instead of an element missing
169 a leading slash.
170
24c9326 @blaflamme added bug fix to changes
blaflamme authored
171 - Fixed a Mako renderer bug returning a tuple with a previous defname value
3de54e3 @blaflamme fixed line indentation
blaflamme authored
172 in some circumstances. See https://github.com/Pylons/pyramid/issues/1037
173 for more information.
24c9326 @blaflamme added bug fix to changes
blaflamme authored
174
0d96b77 @mcdonc version bump in setup.py conf.py CHANGES.txt, rejigger changes bugs vs. ...
mcdonc authored
175 - Make the ``pyramid.config.assets.PackageOverrides`` object implement the API
176 for ``__loader__`` objects specified in PEP 302. Proxies to the
177 ``__loader__`` set by the importer, if present; otherwise, raises
178 ``NotImplementedError``. This makes Pyramid static view overrides work
179 properly under Python 3.3 (previously they would not). See
180 https://github.com/Pylons/pyramid/pull/1015 for more information.
181
182 - ``mako_templating``: added defensive workaround for non-importability of
183 ``mako`` due to upstream ``markupsafe`` dropping Python 3.2 support. Mako
184 templating will no longer work under the combination of MarkupSafe 0.17 and
185 Python 3.2 (although the combination of MarkupSafe 0.17 and Python 3.3 or any
186 supported Python 2 version will work OK).
187
ea278e1 @mmerickel update changelog
mmerickel authored
188 - Spaces and dots may now be in mako renderer template paths. This was
189 broken when support for the new makodef syntax was added in 1.4a1.
190 See https://github.com/Pylons/pyramid/issues/950
191
20c57e6 @mmerickel update changelog
mmerickel authored
192 - ``pyramid.debug_authorization=true`` will now correctly print out
193 ``Allowed`` for views registered with ``NO_PERMISSION_REQUIRED`` instead
194 of invoking the ``permits`` method of the authorization policy.
195 See https://github.com/Pylons/pyramid/issues/954
196
c35b298 @mmerickel update changes.txt
mmerickel authored
197 - Pyramid failed to install on some systems due to being packaged with
198 some test files containing higher order characters in their names. These
199 files have now been removed. See
200 https://github.com/Pylons/pyramid/issues/981
201
050b71c @mcdonc - ``pyramid.testing.DummyResource`` didn't define ``__bool__``, so code ...
mcdonc authored
202 - ``pyramid.testing.DummyResource`` didn't define ``__bool__``, so code under
0d96b77 @mcdonc version bump in setup.py conf.py CHANGES.txt, rejigger changes bugs vs. ...
mcdonc authored
203 Python 3 would use ``__len__`` to find truthiness; this usually caused an
204 instance of DummyResource to be "falsy" instead of "truthy". See
205 https://github.com/Pylons/pyramid/pull/1032
050b71c @mcdonc - ``pyramid.testing.DummyResource`` didn't define ``__bool__``, so code ...
mcdonc authored
206
0a8d50f @mcdonc add change note
mcdonc authored
207 - The ``alchemy`` scaffold would break when the database was MySQL during
208 tables creation. See https://github.com/Pylons/pyramid/pull/1049
209
6a4a341 @odontomachus Fixed documentation width, signed contributors agreement and added a tes...
odontomachus authored
210 - The ``current_route_url`` method now attaches the query string to the URL by
211 default. See
0f1bc52 @odontomachus Updated CHANGES
odontomachus authored
212 https://github.com/Pylons/pyramid/issues/1040
213
d6e8b86 @tomster Make ``pserve.cherrypy_server_runner`` Python 3 compatible.
tomster authored
214 - Make ``pserve.cherrypy_server_runner`` Python 3 compatible. See
215 https://github.com/Pylons/pyramid/issues/718
216
33e0fe1 @odontomachus Fixes to documentation, added change to what's new.
odontomachus authored
217 Backwards Incompatibilities
218 ---------------------------
219
6a4a341 @odontomachus Fixed documentation width, signed contributors agreement and added a tes...
odontomachus authored
220 - Modified the ``current_route_url`` method in pyramid.Request. The method
221 previously returned the URL without the query string by default, it now does
222 attach the query string unless it is overriden.
33e0fe1 @odontomachus Fixes to documentation, added change to what's new.
odontomachus authored
223
58951c0 @mcdonc - The ``route_url`` and ``route_path`` APIs no longer quote ``/``
mcdonc authored
224 - The ``route_url`` and ``route_path`` APIs no longer quote ``/``
225 to ``%2F`` when a replacement value contains a ``/``. This was pointless,
226 as WSGI servers always unquote the slash anyway, and Pyramid never sees the
227 quoted value.
228
330164c @mcdonc make local_name an attribute of Request, move logic from get_localizer i...
mcdonc authored
229 - It is no longer possible to set a ``locale_name`` attribute of the request,
230 nor is it possible to set a ``localizer`` attribute of the request. These
231 are now "reified" properties that look up a locale name and localizer
232 respectively using the machinery described in the "Internationalization"
233 chapter of the documentation.
234
96ab9f2 @mcdonc prep for 1.4
mcdonc authored
235 1.4 (2012-12-18)
236 ================
758fa23 @mcdonc garden
mcdonc authored
237
238 Docs
239 ----
240
241 - Fix functional tests in the ZODB tutorial
242
e609e19 @mcdonc prep for 1.4b3
mcdonc authored
243 1.4b3 (2012-12-10)
244 ==================
245
246 - Packaging release only, no code changes. 1.4b2 was a brownbag release due to
247 missing directories in the tarball.
248
a7e0e60 @mcdonc prep for 1.4b2
mcdonc authored
249 1.4b2 (2012-12-10)
250 ==================
251
252 Docs
253 ----
254
255 - Scaffolding is now PEP-8 compliant (at least for a brief shining moment).
256
257 - Tutorial improvements.
ed14191 @mmerickel _depth argument to view_config is now relative to view_config
mmerickel authored
258
259 Backwards Incompatibilities
260 ---------------------------
261
262 - Modified the ``_depth`` argument to ``pyramid.view.view_config`` to accept
263 a value relative to the invocation of ``view_config`` itself. Thus, when it
264 was previously expecting a value of ``1`` or greater, to reflect that
265 the caller of ``view_config`` is 1 stack frame away from ``venusian.attach``,
266 this implementation detail is now hidden.
267
a078e19 @mcdonc add changenote
mcdonc authored
268 - Modified the ``_backframes`` argument to ``pyramid.util.action_method`` in a
269 similar way to the changes described to ``_depth`` above. This argument
270 remains undocumented, but might be used in the wild by some insane person.
271
1608b26 @mcdonc prep for 1.4b1
mcdonc authored
272 1.4b1 (2012-11-21)
273 ==================
0ccdc23 @mcdonc - A failure when trying to locate the attribute ``__text__`` on route an...
mcdonc authored
274
71cd93b @mcdonc - Small microspeed enhancement which anticipates that a
mcdonc authored
275 Features
276 --------
277
278 - Small microspeed enhancement which anticipates that a
279 ``pyramid.response.Response`` object is likely to be returned from a view.
280 Some code is shortcut if the class of the object returned by a view is this
281 class. A similar microoptimization was done to
282 ``pyramid.request.Request.is_response``.
283
9132f65 @mcdonc garden
mcdonc authored
284 - Make it possible to use variable arguments on ``p*`` commands (``pserve``,
285 ``pshell``, ``pviews``, etc) in the form ``a=1 b=2`` so you can fill in
286 values in parameterized ``.ini`` file, e.g. ``pshell etc/development.ini
6ba0fc7 @mcdonc garden
mcdonc authored
287 http_port=8080``. See https://github.com/Pylons/pyramid/pull/714
9132f65 @mcdonc garden
mcdonc authored
288
f700d37 @mcdonc garden
mcdonc authored
289 - A somewhat advanced and obscure feature of Pyramid event handlers is their
290 ability to handle "multi-interface" notifications. These notifications have
291 traditionally presented multiple objects to the subscriber callable. For
292 instance, if an event was sent by code like this::
28fc3d5 @mcdonc - In order to normalize the relationship between event subscribers and
mcdonc authored
293
294 registry.notify(event, context)
295
296 In the past, in order to catch such an event, you were obligated to write and
297 register an event subscriber that mentioned both the event and the context in
298 its argument list::
299
300 @subscriber([SomeEvent, SomeContextType])
f700d37 @mcdonc garden
mcdonc authored
301 def asubscriber(event, context):
302 pass
303
304 In many subscriber callables registered this way, it was common for the logic
305 in the subscriber callable to completely ignore the second and following
306 arguments (e.g. ``context`` in the above example might be ignored), because
307 they usually existed as attributes of the event anyway. You could usually
a3810e7 @mcdonc garden
mcdonc authored
308 get the same value by doing ``event.context`` or similar.
f700d37 @mcdonc garden
mcdonc authored
309
310 The fact that you needed to put an extra argument which you usually ignored
311 in the subscriber callable body was only a minor annoyance until we added
a3810e7 @mcdonc garden
mcdonc authored
312 "subscriber predicates", used to narrow the set of circumstances under which
313 a subscriber will be executed, in a prior 1.4 alpha release. Once those were
314 added, the annoyance was escalated, because subscriber predicates needed to
315 accept the same argument list and arity as the subscriber callables that they
316 were configured against. So, for example, if you had these two subscriber
317 registrations in your code::
f700d37 @mcdonc garden
mcdonc authored
318
319 @subscriber([SomeEvent, SomeContextType])
320 def asubscriber(event, context):
321 pass
322
323 @subscriber(SomeOtherEvent)
324 def asubscriber(event):
325 pass
24c9326 @blaflamme added bug fix to changes
blaflamme authored
326
f700d37 @mcdonc garden
mcdonc authored
327 And you wanted to use a subscriber predicate::
328
329 @subscriber([SomeEvent, SomeContextType], mypredicate=True)
a3810e7 @mcdonc garden
mcdonc authored
330 def asubscriber1(event, context):
28fc3d5 @mcdonc - In order to normalize the relationship between event subscribers and
mcdonc authored
331 pass
332
f700d37 @mcdonc garden
mcdonc authored
333 @subscriber(SomeOtherEvent, mypredicate=True)
a3810e7 @mcdonc garden
mcdonc authored
334 def asubscriber2(event):
f700d37 @mcdonc garden
mcdonc authored
335 pass
336
a3810e7 @mcdonc garden
mcdonc authored
337 If an existing ``mypredicate`` subscriber predicate had been written in such
338 a way that it accepted only one argument in its ``__call__``, you could not
339 use it against a subscription which named more than one interface in its
340 subscriber interface list. Similarly, if you had written a subscriber
341 predicate that accepted two arguments, you couldn't use it against a
342 registration that named only a single interface type.
343
344 For example, if you created this predicate::
f700d37 @mcdonc garden
mcdonc authored
345
346 class MyPredicate(object):
347 # portions elided...
348 def __call__(self, event):
349 return self.val == event.context.foo
350
a3810e7 @mcdonc garden
mcdonc authored
351 It would not work against a multi-interface-registered subscription, so in
352 the above example, when you attempted to use it against ``asubscriber1``, it
353 would fail at runtime with a TypeError, claiming something was attempting to
354 call it with too many arguments.
f700d37 @mcdonc garden
mcdonc authored
355
a3810e7 @mcdonc garden
mcdonc authored
356 To hack around this limitation, you were obligated to design the
357 ``mypredicate`` predicate to expect to receive in its ``__call__`` either a
358 single ``event`` argument (a SomeOtherEvent object) *or* a pair of arguments
359 (a SomeEvent object and a SomeContextType object), presumably by doing
360 something like this::
f700d37 @mcdonc garden
mcdonc authored
361
362 class MyPredicate(object):
363 # portions elided...
364 def __call__(self, event, context=None):
365 return self.val == event.context.foo
366
367 This was confusing and bad.
368
369 In order to allow people to ignore unused arguments to subscriber callables
370 and to normalize the relationship between event subscribers and subscriber
371 predicates, we now allow both subscribers and subscriber predicates to accept
372 only a single ``event`` argument even if they've been subscribed for
373 notifications that involve multiple interfaces. Subscribers and subscriber
374 predicates that accept only one argument will receive the first object passed
375 to ``notify``; this is typically (but not always) the event object. The
376 other objects involved in the subscription lookup will be discarded. You can
377 now write an event subscriber that accepts only ``event`` even if it
378 subscribes to multiple interfaces::
28fc3d5 @mcdonc - In order to normalize the relationship between event subscribers and
mcdonc authored
379
380 @subscriber([SomeEvent, SomeContextType])
f700d37 @mcdonc garden
mcdonc authored
381 def asubscriber(event):
28fc3d5 @mcdonc - In order to normalize the relationship between event subscribers and
mcdonc authored
382 # this will work!
383
f700d37 @mcdonc garden
mcdonc authored
384 This prevents you from needing to match the subscriber callable parameters to
385 the subscription type unnecessarily, especially when you don't make use of
386 any argument in your subscribers except for the event object itself.
387
388 Note, however, that if the event object is not the first
389 object in the call to ``notify``, you'll run into trouble. For example, if
390 notify is called with the context argument first::
28fc3d5 @mcdonc - In order to normalize the relationship between event subscribers and
mcdonc authored
391
392 registry.notify(context, event)
393
f700d37 @mcdonc garden
mcdonc authored
394 You won't be able to take advantage of the event-only feature. It will
395 "work", but the object received by your event handler won't be the event
396 object, it will be the context object, which won't be very useful::
28fc3d5 @mcdonc - In order to normalize the relationship between event subscribers and
mcdonc authored
397
398 @subscriber([SomeContextType, SomeEvent])
f700d37 @mcdonc garden
mcdonc authored
399 def asubscriber(event):
24c9326 @blaflamme added bug fix to changes
blaflamme authored
400 # bzzt! you'll be getting the context here as ``event``, and it'll
28fc3d5 @mcdonc - In order to normalize the relationship between event subscribers and
mcdonc authored
401 # be useless
402
403 Existing multiple-argument subscribers continue to work without issue, so you
404 should continue use those if your system notifies using multiple interfaces
405 and the first interface is not the event interface. For example::
406
407 @subscriber([SomeContextType, SomeEvent])
f700d37 @mcdonc garden
mcdonc authored
408 def asubscriber(context, event):
28fc3d5 @mcdonc - In order to normalize the relationship between event subscribers and
mcdonc authored
409 # this will still work!
410
411 The event-only feature makes it possible to use a subscriber predicate that
412 accepts only a request argument within both multiple-interface subscriber
f700d37 @mcdonc garden
mcdonc authored
413 registrations and single-interface subscriber registrations. You needn't
414 make slightly different variations of predicates depending on the
415 subscription type arguments. Instead, just write all your subscriber
416 predicates so they only accept ``event`` in their ``__call__`` and they'll be
417 useful across all registrations for subscriptions that use an event as their
418 first argument, even ones which accept more than just ``event``.
419
420 However, the same caveat applies to predicates as to subscriber callables: if
421 you're subscribing to a multi-interface event, and the first interface is not
422 the event interface, the predicate won't work properly. In such a case,
423 you'll need to match the predicate ``__call__`` argument ordering and
424 composition to the ordering of the interfaces. For example, if the
425 registration for the subscription uses ``[SomeContext, SomeEvent]``, you'll
426 need to reflect that in the ordering of the parameters of the predicate's
427 ``__call__`` method::
28fc3d5 @mcdonc - In order to normalize the relationship between event subscribers and
mcdonc authored
428
429 def __call__(self, context, event):
430 return event.request.path.startswith(self.val)
431
f700d37 @mcdonc garden
mcdonc authored
432 tl;dr: 1) When using multi-interface subscriptions, always use the event type
433 as the first subscription registration argument and 2) When 1 is true, use
434 only ``event`` in your subscriber and subscriber predicate parameter lists,
435 no matter how many interfaces the subscriber is notified with. This
436 combination will result in the maximum amount of reusability of subscriber
437 predicates and the least amount of thought on your part. Drink responsibly.
28fc3d5 @mcdonc - In order to normalize the relationship between event subscribers and
mcdonc authored
438
0ccdc23 @mcdonc - A failure when trying to locate the attribute ``__text__`` on route an...
mcdonc authored
439 Bug Fixes
440 ---------
441
442 - A failure when trying to locate the attribute ``__text__`` on route and view
443 predicates existed when the ``debug_routematch`` setting was true or when the
444 ``pviews`` command was used. See https://github.com/Pylons/pyramid/pull/727
445
b5e4443 @mcdonc garden
mcdonc authored
446 Documentation
447 -------------
448
449 - Sync up tutorial source files with the files that are rendered by the
450 scaffold that each uses.
451
9480686 @mcdonc prep for release
mcdonc authored
452 1.4a4 (2012-11-14)
453 ==================
c7337ba @mcdonc - Added an ``effective_principals`` route and view predicate.
mcdonc authored
454
455 Features
456 --------
457
19b8207 @mmerickel merged SHA512AuthTktAuthenticationPolicy into AuthTktAuthenticationPolic...
mmerickel authored
458 - ``pyramid.authentication.AuthTktAuthenticationPolicy`` has been updated to
459 support newer hashing algorithms such as ``sha512``. Existing applications
39ef68d @mcdonc rearrange deck chairs
mcdonc authored
460 should consider updating if possible for improved security over the default
461 md5 hashing.
19b8207 @mmerickel merged SHA512AuthTktAuthenticationPolicy into AuthTktAuthenticationPolic...
mmerickel authored
462
c7337ba @mcdonc - Added an ``effective_principals`` route and view predicate.
mcdonc authored
463 - Added an ``effective_principals`` route and view predicate.
464
07c9ee0 @mcdonc - Do not allow the userid returned from the ``authenticated_userid`` or ...
mcdonc authored
465 - Do not allow the userid returned from the ``authenticated_userid`` or the
466 userid that is one of the list of principals returned by
467 ``effective_principals`` to be either of the strings ``system.Everyone`` or
468 ``system.Authenticated`` when any of the built-in authorization policies that
469 live in ``pyramid.authentication`` are in use. These two strings are
470 reserved for internal usage by Pyramid and they will not be accepted as valid
471 userids.
472
ca46568 @mmerickel garden
mmerickel authored
473 - Slightly better debug logging from
474 ``pyramid.authentication.RepozeWho1AuthenticationPolicy``.
47146eb @mcdonc garden
mcdonc authored
475
39ef68d @mcdonc rearrange deck chairs
mcdonc authored
476 - ``pyramid.security.view_execution_permitted`` used to return ``True`` if no
926fb68 @mcdonc resolve merge conflict
mcdonc authored
477 view could be found. It now raises a ``TypeError`` exception in that case, as
478 it doesn't make sense to assert that a nonexistent view is
479 execution-permitted. See https://github.com/Pylons/pyramid/issues/299.
6099144 @mmerickel updated changes
mmerickel authored
480
a8d71ca @mcdonc - Allow a ``_depth`` argument to ``pyramid.view.view_config``, which wil...
mcdonc authored
481 - Allow a ``_depth`` argument to ``pyramid.view.view_config``, which will
482 permit limited composition reuse of the decorator by other software that
483 wants to provide custom decorators that are much like view_config.
484
1701243 @mmerickel update changelog, close #627
mmerickel authored
485 - Allow an iterable of decorators to be passed to
486 ``pyramid.config.Configurator.add_view``. This allows views to be wrapped
487 by more than one decorator without requiring combining the decorators
488 yourself.
489
a007a4f @mcdonc - In the past if a renderer returned ``None``, the body of the resulting
mcdonc authored
490 Bug Fixes
491 ---------
492
493 - In the past if a renderer returned ``None``, the body of the resulting
494 response would be set explicitly to the empty string. Instead, now, the body
495 is left unchanged, which allows the renderer to set a body itself by using
496 e.g. ``request.response.body = b'foo'``. The body set by the renderer will
497 be unmolested on the way out. See
498 https://github.com/Pylons/pyramid/issues/709
499
34d4cd0 @mcdonc - In uncommon cases, the ``pyramid_excview_tween_factory`` might have
mcdonc authored
500 - In uncommon cases, the ``pyramid_excview_tween_factory`` might have
501 inadvertently raised a ``KeyError`` looking for ``request_iface`` as an
502 attribute of the request. It no longer fails in this case. See
503 https://github.com/Pylons/pyramid/issues/700
504
267dbd2 @mcdonc - Be more tolerant of potential error conditions in ``match_param`` and
mcdonc authored
505 - Be more tolerant of potential error conditions in ``match_param`` and
506 ``physical_path`` predicate implementations; instead of raising an exception,
507 return False.
508
39ef68d @mcdonc rearrange deck chairs
mcdonc authored
509 - ``pyramid.view.render_view`` was not functioning properly under Python 3.x
510 due to a byte/unicode discrepancy. See
cd8ac80 @tshepang update some links and fix others
tshepang authored
511 https://github.com/Pylons/pyramid/issues/721
f89cfcd @mmerickel updated changelog
mmerickel authored
512
ca3df80 @mmerickel emit a warning if a user is using the default hashalg to AuthTkt
mmerickel authored
513 Deprecations
514 ------------
515
39ef68d @mcdonc rearrange deck chairs
mcdonc authored
516 - ``pyramid.authentication.AuthTktAuthenticationPolicy`` will emit a warning if
517 an application is using the policy without explicitly passing a ``hashalg``
518 argument. This is because the default is "md5" which is considered
519 theoretically subject to collision attacks. If you really want "md5" then you
520 must specify it explicitly to get rid of the warning.
521
522 Documentation
523 -------------
524
525 - All of the tutorials that use
526 ``pyramid.authentication.AuthTktAuthenticationPolicy`` now explicitly pass
527 ``sha512`` as a ``hashalg`` argument.
528
ca3df80 @mmerickel emit a warning if a user is using the default hashalg to AuthTkt
mmerickel authored
529
66fe1d0 @mcdonc - Move ``TopologicalSorter`` from ``pyramid.config.util`` to ``pyramid.u...
mcdonc authored
530 Internals
531 ---------
532
533 - Move ``TopologicalSorter`` from ``pyramid.config.util`` to ``pyramid.util``,
534 move ``CyclicDependencyError`` from ``pyramid.config.util`` to
535 ``pyramid.exceptions``, rename ``Singleton`` to ``Sentinel`` and move from
ca46568 @mmerickel garden
mmerickel authored
536 ``pyramid.config.util`` to ``pyramid.util``; this is in an effort to
0487545 @mcdonc fix docs, upgrade tutorials, add change note, deprecate using zope.depre...
mcdonc authored
537 move that stuff that may be an API one day out of ``pyramid.config.util``,
66fe1d0 @mcdonc - Move ``TopologicalSorter`` from ``pyramid.config.util`` to ``pyramid.u...
mcdonc authored
538 because that package should never be imported from non-Pyramid code.
539 TopologicalSorter is still not an API, but may become one.
540
39ef68d @mcdonc rearrange deck chairs
mcdonc authored
541 - Get rid of shady monkeypatching of ``pyramid.request.Request`` and
542 ``pyramid.response.Response`` done within the ``__init__.py`` of Pyramid.
543 Webob no longer relies on this being done. Instead, the ResponseClass
544 attribute of the Pyramid Request class is assigned to the Pyramid response
545 class; that's enough to satisfy WebOb and behave as it did before with the
546 monkeypatching.
547
4a6cca6 @mcdonc prep for 1.4a3
mcdonc authored
548 1.4a3 (2012-10-26)
549 ==================
d6fb001 @mcdonc - 1.4a ``pyramid.scripting.prepare`` behaved differently than 1.3 series
mcdonc authored
550
551 Bug Fixes
552 ---------
553
06a904f @mcdonc add docs and changelog note
mcdonc authored
554 - The match_param predicate's text method was fixed to sort its values.
555 Part of https://github.com/Pylons/pyramid/pull/705
556
d6fb001 @mcdonc - 1.4a ``pyramid.scripting.prepare`` behaved differently than 1.3 series
mcdonc authored
557 - 1.4a ``pyramid.scripting.prepare`` behaved differently than 1.3 series
558 function of same name. In particular, if passed a request, it would not
559 set the ``registry`` attribute of the request like 1.3 did. A symptom
560 would be that passing a request to ``pyramid.paster.bootstrap`` (which uses
561 the function) that did not have a ``registry`` attribute could assume that
562 the registry would be attached to the request by Pyramid. This assumption
563 could be made in 1.3, but not in 1.4. The assumption can now be made in
564 1.4 too (a registry is attached to a request passed to bootstrap or
565 prepare).
566
66d277a @mcdonc garden
mcdonc authored
567 - When registering a view configuration that named a Chameleon ZPT renderer
568 with a macro name in it (e.g. ``renderer='some/template#somemacro.pt``) as
043ccdd @tshepang eliminate other repeated words
tshepang authored
569 well as a view configuration without a macro name in it that pointed to the
9937a4e @chrisrossi Fix rst syntax error which prevented Sphinx docs from building.
chrisrossi authored
570 same template (e.g. ``renderer='some/template.pt'``), internal caching could
66d277a @mcdonc garden
mcdonc authored
571 confuse the two, and your code might have rendered one instead of the
572 other.
573
1273d56 @mcdonc - The Configurator ``testing_securitypolicy`` method now returns the pol...
mcdonc authored
574 Features
575 --------
576
c25a8fd @mcdonc - New ``physical_path`` view predicate. If specified, this value should...
mcdonc authored
577 - Allow multiple values to be specified to the ``request_param`` view/route
578 predicate as a sequence. Previously only a single string value was allowed.
579 See https://github.com/Pylons/pyramid/pull/705
580
581 - Comments with references to documentation sections placed in scaffold
582 ``.ini`` files.
583
584 - Added an HTTP Basic authentication policy
585 at ``pyramid.authentication.BasicAuthAuthenticationPolicy``.
586
1273d56 @mcdonc - The Configurator ``testing_securitypolicy`` method now returns the pol...
mcdonc authored
587 - The Configurator ``testing_securitypolicy`` method now returns the policy
588 object it creates.
589
590 - The Configurator ``testing_securitypolicy`` method accepts two new
591 arguments: ``remember_result`` and ``forget_result``. If supplied, these
592 values influence the result of the policy's ``remember`` and ``forget``
593 methods, respectively.
594
595 - The DummySecurityPolicy created by ``testing_securitypolicy`` now sets a
596 ``forgotten`` value on the policy (the value ``True``) when its ``forget``
597 method is called.
598
599 - The DummySecurityPolicy created by ``testing_securitypolicy`` now sets a
600 ``remembered`` value on the policy, which is the value of the ``principal``
601 argument it's called with when its ``remember`` method is called.
602
c25a8fd @mcdonc - New ``physical_path`` view predicate. If specified, this value should...
mcdonc authored
603 - New ``physical_path`` view predicate. If specified, this value should be a
604 string or a tuple representing the physical traversal path of the context
605 found via traversal for this predicate to match as true. For example:
606 ``physical_path='/'`` or ``physical_path='/a/b/c'`` or ``physical_path=('',
607 'a', 'b', 'c')``. This is not a path prefix match or a regex, it's a
608 whole-path match. It's useful when you want to always potentially show a
609 view when some object is traversed to, but you can't be sure about what kind
610 of object it will be, so you can't use the ``context`` predicate. The
611 individual path elements inbetween slash characters or in tuple elements
612 should be the Unicode representation of the name of the resource and should
613 not be encoded in any way.
614
072cbf7 @mcdonc prep for 1.4a2
mcdonc authored
615 1.4a2 (2012-09-27)
616 ==================
68c25d3 @mcdonc garden
mcdonc authored
617
d27bc79 @mcdonc garden
mcdonc authored
618 Bug Fixes
619 ---------
620
4388d31 @mcdonc mirror john's change for chameleon, better changelog message
mcdonc authored
621 - When trying to determine Mako defnames and Chameleon macro names in asset
622 specifications, take into account that the filename may have a hyphen in
623 it. See https://github.com/Pylons/pyramid/pull/692
d27bc79 @mcdonc garden
mcdonc authored
624
68c25d3 @mcdonc garden
mcdonc authored
625 Features
626 --------
627
628 - A new ``pyramid.session.check_csrf_token`` convenience function was added.
629
80cd0b1 @mcdonc garden
mcdonc authored
630 - A ``check_csrf`` view predicate was added. For example, you can now do
631 ``config.add_view(someview, check_csrf=True)``. When the predicate is
632 checked, if the ``csrf_token`` value in ``request.params`` matches the CSRF
633 token in the request's session, the view will be permitted to execute.
634 Otherwise, it will not be permitted to execute.
68c25d3 @mcdonc garden
mcdonc authored
635
098599b @mcdonc - Add ``Base.metadata.bind = engine`` to alchemy template, so that table...
mcdonc authored
636 - Add ``Base.metadata.bind = engine`` to alchemy template, so that tables
637 defined imperatively will work.
638
639 Documentation
640 -------------
641
642 - update wiki2 SQLA tutorial with the changes required after inserting
643 ``Base.metadata.bind = engine`` into the alchemy scaffold.
644
ce1e86c @mcdonc prep for 1.4a1
mcdonc authored
645 1.4a1 (2012-09-16)
646 ==================
f6bd88e @mcdonc trivial change to poke jenkins (im in on an untrusted network and cant u...
mcdonc authored
647
a39dd2f @mcdonc - Add ``REMOTE_ADDR`` to the ``prequest`` WSGI environ dict for benefit ...
mcdonc authored
648 Bug Fixes
649 ---------
650
1794b4b @mcdonc note that this is a forward port
mcdonc authored
651 - Forward port from 1.3 branch: When no authentication policy was configured,
652 a call to ``pyramid.security.effective_principals`` would unconditionally
653 return the empty list. This was incorrect, it should have unconditionally
654 returned ``[Everyone]``, and now does.
8782def @mcdonc - When no authentication policy was configured, a call to
mcdonc authored
655
3074e78 @mcdonc garden
mcdonc authored
656 - Explicit url dispatch regexes can now contain colons.
657 https://github.com/Pylons/pyramid/issues/629
658
e652518 @mcdonc - On at least one 64-bit Ubuntu system under Python 3.2, using the
mcdonc authored
659 - On at least one 64-bit Ubuntu system under Python 3.2, using the
660 ``view_config`` decorator caused a ``RuntimeError: dictionary changed size
661 during iteration`` exception. It no longer does. See
662 https://github.com/Pylons/pyramid/issues/635 for more information.
663
8b26752 @blaflamme added entry to changes.txt for mako fix
blaflamme authored
664 - In Mako Templates lookup, check if the uri is already adjusted and bring
665 it back to an asset spec. Normally occurs with inherited templates or
666 included components.
667 https://github.com/Pylons/pyramid/issues/606
668 https://github.com/Pylons/pyramid/issues/607
669
24c9326 @blaflamme added bug fix to changes
blaflamme authored
670 - In Mako Templates lookup, check for absolute uri (using mako directories)
7853bc0 @blaflamme garden
blaflamme authored
671 when mixing up inheritance with asset specs.
672 https://github.com/Pylons/pyramid/issues/662
673
75a8ff4 @mmerickel updated CHANGES with accept-header bug fix
mmerickel authored
674 - HTTP Accept headers were not being normalized causing potentially
675 conflicting view registrations to go unnoticed. Two views that only
676 differ in the case ('text/html' vs. 'text/HTML') will now raise an error.
677 https://github.com/Pylons/pyramid/pull/620
678
a9289d9 @mcdonc - Forward-port from 1.3 branch: when registering multiple views with an
mcdonc authored
679 - Forward-port from 1.3 branch: when registering multiple views with an
680 ``accept`` predicate in a Pyramid application runing under Python 3, you
681 might have received a ``TypeError: unorderable types: function() <
682 function()`` exception.
683
de797c4 @mcdonc - Coverage and docs updates for custom JSON class.
mcdonc authored
684 Features
685 --------
a39dd2f @mcdonc - Add ``REMOTE_ADDR`` to the ``prequest`` WSGI environ dict for benefit ...
mcdonc authored
686
d246597 @mcdonc reclassify bug as feature
mcdonc authored
687 - Configurator.add_directive now accepts arbitrary callables like partials or
688 objects implementing ``__call__`` which dont have ``__name__`` and
689 ``__doc__`` attributes. See https://github.com/Pylons/pyramid/issues/621
690 and https://github.com/Pylons/pyramid/pull/647.
691
95f766b @mcdonc Subscriber predicates:
mcdonc authored
692 - Third-party custom view, route, and subscriber predicates can now be added
693 for use by view authors via
694 ``pyramid.config.Configurator.add_view_predicate``,
695 ``pyramid.config.Configurator.add_route_predicate`` and
696 ``pyramid.config.Configurator.add_subscriber_predicate``. So, for example,
0196b2a @mcdonc add docs for third-party view predicates
mcdonc authored
697 doing this::
698
699 config.add_view_predicate('abc', my.package.ABCPredicate)
700
701 Might allow a view author to do this in an application that configured that
702 predicate::
703
704 @view_config(abc=1)
705
95f766b @mcdonc Subscriber predicates:
mcdonc authored
706 Similar features exist for ``add_route``, and ``add_subscriber``. See
707 "Adding A Third Party View, Route, or Subscriber Predicate" in the Hooks
708 chapter for more information.
0196b2a @mcdonc add docs for third-party view predicates
mcdonc authored
709
735abf4 @mcdonc note conflict behavior change
mcdonc authored
710 Note that changes made to support the above feature now means that only
711 actions registered using the same "order" can conflict with one another.
712 It used to be the case that actions registered at different orders could
713 potentially conflict, but to my knowledge nothing ever depended on this
714 behavior (it was a bit silly).
715
de797c4 @mcdonc - Coverage and docs updates for custom JSON class.
mcdonc authored
716 - Custom objects can be made easily JSON-serializable in Pyramid by defining
717 a ``__json__`` method on the object's class. This method should return
718 values natively serializable by ``json.dumps`` (such as ints, lists,
719 dictionaries, strings, and so forth).
077fa3a @mcdonc add change note
mcdonc authored
720
e012aa1 @mcdonc allow __json__ and custom adapters to accept request arg
mcdonc authored
721 - The JSON renderer now allows for the definition of custom type adapters to
722 convert unknown objects to JSON serializations.
723
360f251 @mcdonc - As of this release, the ``request_method`` predicate, when used, will ...
mcdonc authored
724 - As of this release, the ``request_method`` predicate, when used, will also
725 imply that ``HEAD`` is implied when you use ``GET``. For example, using
726 ``@view_config(request_method='GET')`` is equivalent to using
561a443 @mcdonc fix example
mcdonc authored
727 ``@view_config(request_method=('GET', 'HEAD'))``. Using
360f251 @mcdonc - As of this release, the ``request_method`` predicate, when used, will ...
mcdonc authored
728 ``@view_config(request_method=('GET', 'POST')`` is equivalent to using
729 ``@view_config(request_method=('GET', 'HEAD', 'POST')``. This is because
730 HEAD is a variant of GET that omits the body, and WebOb has special support
731 to return an empty body when a HEAD is used.
15c40a1 @mcdonc readme
mcdonc authored
732
023c88b @mcdonc rename set_request_method to add_request_method. closes #683
mcdonc authored
733 - ``config.add_request_method`` has been introduced to support extending
2c25342 @mmerickel docs-deprecated set_request_property
mmerickel authored
734 request objects with arbitrary callables. This method expands on the
735 previous ``config.set_request_property`` by supporting methods as well as
736 properties. This method now causes less code to be executed at
737 request construction time than ``config.set_request_property`` in
738 version 1.3.
739
740 - Don't add a ``?`` to URLs generated by ``request.resource_url`` if the
fcb2095 @mcdonc garden
mcdonc authored
741 ``query`` argument is provided but empty.
742
2c25342 @mmerickel docs-deprecated set_request_property
mmerickel authored
743 - Don't add a ``?`` to URLs generated by ``request.route_url`` if the
fcb2095 @mcdonc garden
mcdonc authored
744 ``_query`` argument is provided but empty.
988035a @mcdonc add a change note
mcdonc authored
745
746 - The static view machinery now raises (rather than returns) ``HTTPNotFound``
747 and ``HTTPMovedPermanently`` exceptions, so these can be caught by the
cec2b05 @tshepang consistency
tshepang authored
748 Not Found View (and other exception views).
ea009a6 @blaflamme added docs and changes for using defs in mako renderer
blaflamme authored
749
54d3e3e @mcdonc add a whatsnew-1.4 document
mcdonc authored
750 - The Mako renderer now supports a def name in an asset spec. When the def
8b55a68 @mcdonc garden
mcdonc authored
751 name is present in the asset spec, the system will render the template def
752 within the template and will return the result. An example asset spec is
753 ``package:path/to/template#defname.mako``. This will render the def named
54d3e3e @mcdonc add a whatsnew-1.4 document
mcdonc authored
754 ``defname`` inside the ``template.mako`` template instead of rendering the
755 entire template. The old way of returning a tuple in the form
756 ``('defname', {})`` from the view is supported for backward compatibility,
8b55a68 @mcdonc garden
mcdonc authored
757
758 - The Chameleon ZPT renderer now accepts a macro name in an asset spec. When
759 the macro name is present in the asset spec, the system will render the
760 macro listed as a ``define-macro`` and return the result instead of
761 rendering the entire template. An example asset spec:
762 ``package:path/to/template#macroname.pt``. This will render the macro
763 defined as ``macroname`` within the ``template.pt`` template instead of the
764 entire templae.
61a57ea @mcdonc - When there is a predicate mismatch exception (seen when no view matche...
mcdonc authored
765
766 - When there is a predicate mismatch exception (seen when no view matches for
767 a given request due to predicates not working), the exception now contains
768 a textual description of the predicate which didn't match.
6b180cb @mcdonc - An ``add_permission`` directive method was added to the Configurator. ...
mcdonc authored
769
770 - An ``add_permission`` directive method was added to the Configurator. This
771 directive registers a free-standing permission introspectable into the
772 Pyramid introspection system. Frameworks built atop Pyramid can thus use
08c2217 @tshepang eliminate repeated "the" words
tshepang authored
773 the ``permissions`` introspectable category data to build a
6b180cb @mcdonc - An ``add_permission`` directive method was added to the Configurator. ...
mcdonc authored
774 comprehensive list of permissions supported by a running system. Before
775 this method was added, permissions were already registered in this
776 introspectable category as a side effect of naming them in an ``add_view``
777 call, this method just makes it possible to arrange for a permission to be
778 put into the ``permissions`` introspectable category without naming it
779 along with an associated view. Here's an example of usage of
780 ``add_permission``::
781
782 config = Configurator()
783 config.add_permission('view')
2c25342 @mmerickel docs-deprecated set_request_property
mmerickel authored
784
45b6e19 @mmerickel added cookie session changes to CHANGES.txt
mmerickel authored
785 - The ``UnencryptedCookieSessionFactoryConfig`` now accepts
786 ``signed_serialize`` and ``signed_deserialize`` hooks which may be used
787 to influence how the sessions are marshalled (by default this is done
788 with HMAC+pickle).
789
28dba04 @mcdonc - ``pyramid.testing.DummyRequest`` now supports methods supplied by the
mcdonc authored
790 - ``pyramid.testing.DummyRequest`` now supports methods supplied by the
791 ``pyramid.util.InstancePropertyMixin`` class such as ``set_property``.
792
7359873 @mcdonc - Request properties and methods added via ``config.set_request_property...
mcdonc authored
793 - Request properties and methods added via ``config.set_request_property`` or
794 ``config.add_request_method`` are now available to tweens.
795
796 - Request properties and methods added via ``config.set_request_property`` or
797 ``config.add_request_method`` are now available in the request object
798 returned from ``pyramid.paster.bootstrap``.
799
dc8b49f @mcdonc garden
mcdonc authored
800 - ``request.context`` of environment request during ``bootstrap`` is now the
801 root object if a context isn't already set on a provided request.
802
07cb8f0 @mcdonc add pyramid.decorator.reify as an API. Closes #682
mcdonc authored
803 - The ``pyramid.decorator.reify`` function is now an API, and was added to
804 the API documentation.
805
97150cc @mcdonc merge jinty's testConfig code
mcdonc authored
806 - Added the ``pyramid.testing.testConfig`` context manager, which can be used
807 to generate a configurator in a test, e.g. ``with testing.testConfig(...):``.
808
64452ed @mcdonc rename subrequest to invoke_subrequest
mcdonc authored
809 - Users can now invoke a subrequest from within view code using a new
810 ``request.invoke_subrequest`` API.
37d2c22 @mcdonc docs and test
mcdonc authored
811
2c25342 @mmerickel docs-deprecated set_request_property
mmerickel authored
812 Deprecations
813 ------------
814
9cdb286 @mcdonc readd set_request_property to docs (just so when people run across it in...
mcdonc authored
815 - The ``pyramid.config.Configurator.set_request_property`` has been
816 documentation-deprecated. The method remains usable but the more
023c88b @mcdonc rename set_request_method to add_request_method. closes #683
mcdonc authored
817 featureful ``pyramid.config.Configurator.add_request_method`` should be
9cdb286 @mcdonc readd set_request_property to docs (just so when people run across it in...
mcdonc authored
818 used in its place (it has all of the same capabilities but can also extend
819 the request object with methods).
ebcdc7c @mcdonc - It is no longer possible to pass an environ dictionary directly to
mcdonc authored
820
821 Backwards Incompatibilities
822 ---------------------------
823
25d3ddf @mcdonc garden
mcdonc authored
824 - The Pyramid router no longer adds the values ``bfg.routes.route`` or
ebcdc7c @mcdonc - It is no longer possible to pass an environ dictionary directly to
mcdonc authored
825 ``bfg.routes.matchdict`` to the request's WSGI environment dictionary.
826 These values were docs-deprecated in ``repoze.bfg`` 1.0 (effectively seven
827 minor releases ago). If your code depended on these values, use
828 request.matched_route and request.matchdict instead.
829
830 - It is no longer possible to pass an environ dictionary directly to
831 ``pyramid.traversal.ResourceTreeTraverser.__call__`` (aka
832 ``ModelGraphTraverser.__call__``). Instead, you must pass a request
833 object. Passing an environment instead of a request has generated a
834 deprecation warning since Pyramid 1.1.
835
836 - Pyramid will no longer work properly if you use the
837 ``webob.request.LegacyRequest`` as a request factory. Instances of the
838 LegacyRequest class have a ``request.path_info`` which return a string.
839 This Pyramid release assumes that ``request.path_info`` will
840 unconditionally be Unicode.
841
3d42722 @mcdonc - The functions from ``pyramid.chameleon_zpt`` and ``pyramid.chameleon_t...
mcdonc authored
842 - The functions from ``pyramid.chameleon_zpt`` and ``pyramid.chameleon_text``
843 named ``get_renderer``, ``get_template``, ``render_template``, and
844 ``render_template_to_response`` have been removed. These have issued a
845 deprecation warning upon import since Pyramid 1.0. Use
846 ``pyramid.renderers.get_renderer()``,
847 ``pyramid.renderers.get_renderer().implementation()``,
848 ``pyramid.renderers.render()`` or ``pyramid.renderers.render_to_response``
849 respectively instead of these functions.
850
94a6f35 @mcdonc - The ``pyramid.configuration`` module was removed. It had been depreca...
mcdonc authored
851 - The ``pyramid.configuration`` module was removed. It had been deprecated
852 since Pyramid 1.0 and printed a deprecation warning upon its use. Use
853 ``pyramid.config`` instead.
854
b274d05 @mcdonc - The ``pyramid.paster.PyramidTemplate`` API was removed. It had been
mcdonc authored
855 - The ``pyramid.paster.PyramidTemplate`` API was removed. It had been
856 deprecated since Pyramid 1.1 and issued a warning on import. If your code
857 depended on this, adjust your code to import
858 ``pyramid.scaffolds.PyramidTemplate`` instead.
859
ef2e517 @mcdonc - The ``pyramid.settings.get_settings()`` API was removed. It had been
mcdonc authored
860 - The ``pyramid.settings.get_settings()`` API was removed. It had been
861 printing a deprecation warning since Pyramid 1.0. If your code depended on
862 this API, use ``pyramid.threadlocal.get_current_registry().settings``
863 instead or use the ``settings`` attribute of the registry available from
864 the request (``request.registry.settings``).
865
69e0aad @mcdonc - These APIs from the ``pyramid.testing`` module were removed. They hav...
mcdonc authored
866 - These APIs from the ``pyramid.testing`` module were removed. They have
867 been printing deprecation warnings since Pyramid 1.0:
868
869 * ``registerDummySecurityPolicy``, use
870 ``pyramid.config.Configurator.testing_securitypolicy`` instead.
871
872 * ``registerResources`` (aka ``registerModels``, use
873 ``pyramid.config.Configurator.testing_resources`` instead.
874
875 * ``registerEventListener``, use
876 ``pyramid.config.Configurator.testing_add_subscriber`` instead.
877
878 * ``registerTemplateRenderer`` (aka `registerDummyRenderer``), use
879 ``pyramid.config.Configurator.testing_add_template`` instead.
880
881 * ``registerView``, use ``pyramid.config.Configurator.add_view`` instead.
882
883 * ``registerUtility``, use
884 ``pyramid.config.Configurator.registry.registerUtility`` instead.
885
886 * ``registerAdapter``, use
887 ``pyramid.config.Configurator.registry.registerAdapter`` instead.
888
24c9326 @blaflamme added bug fix to changes
blaflamme authored
889 * ``registerSubscriber``, use
69e0aad @mcdonc - These APIs from the ``pyramid.testing`` module were removed. They hav...
mcdonc authored
890 ``pyramid.config.Configurator.add_subscriber`` instead.
891
24c9326 @blaflamme added bug fix to changes
blaflamme authored
892 * ``registerRoute``, use
69e0aad @mcdonc - These APIs from the ``pyramid.testing`` module were removed. They hav...
mcdonc authored
893 ``pyramid.config.Configurator.add_route`` instead.
894
24c9326 @blaflamme added bug fix to changes
blaflamme authored
895 * ``registerSettings``, use
69e0aad @mcdonc - These APIs from the ``pyramid.testing`` module were removed. They hav...
mcdonc authored
896 ``pyramid.config.Configurator.add_settings`` instead.
897
64452ed @mcdonc rename subrequest to invoke_subrequest
mcdonc authored
898 - In Pyramid 1.3 and previous, the ``__call__`` method of a Response object
899 was invoked before any finished callbacks were executed. As of this
900 release, the ``__call__`` method of a Response object is invoked *after*
901 finished callbacks are executed. This is in support of the
902 ``request.invoke_subrequest`` feature.
903
b72ba1a @mcdonc add upgrading chapter, make docs render again
mcdonc authored
904 Documentation
905 -------------
906
907 - Added an "Upgrading Pyramid" chapter to the narrative documentation. It
07cb8f0 @mcdonc add pyramid.decorator.reify as an API. Closes #682
mcdonc authored
908 describes how to cope with deprecations and removals of Pyramid APIs and
909 how to show Pyramid-generated deprecation warnings while running tests and
910 while running a server.
b72ba1a @mcdonc add upgrading chapter, make docs render again
mcdonc authored
911
37d2c22 @mcdonc docs and test
mcdonc authored
912 - Added a "Invoking a Subrequest" chapter to the documentation. It describes
64452ed @mcdonc rename subrequest to invoke_subrequest
mcdonc authored
913 how to use the new ``request.invoke_subrequest`` API.
37d2c22 @mcdonc docs and test
mcdonc authored
914
ebcdc7c @mcdonc - It is no longer possible to pass an environ dictionary directly to
mcdonc authored
915 Dependencies
916 ------------
917
918 - Pyramid now requires WebOb 1.2b3+ (the prior Pyramid release only relied on
919 1.2dev+). This is to ensure that we obtain a version of WebOb that returns
920 ``request.path_info`` as text.
921
Something went wrong with that request. Please try again.