Skip to content

HTTPS clone URL

Subversion checkout URL

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