Skip to content

HTTPS clone URL

Subversion checkout URL

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