Skip to content

HTTPS clone URL

Subversion checkout URL

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