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