Skip to content

HTTPS clone URL

Subversion checkout URL

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