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