Chris McDonough
2012-08-11 f57625ff04c11d9a56b58055130454c5af7cbd6a
commit | author | age
f57625 1 1.3.3 (2012-08-10)
CM 2 ==================
29a7c6 3
CM 4 - Backport bug fix from master: Explicit url dispatch regexes can now contain
5   colons.  https://github.com/Pylons/pyramid/issues/629
6
3d7c54 7 - Backport bug fix from master: On at least one 64-bit Ubuntu system under
CM 8   Python 3.2, using the ``view_config`` decorator caused a ``RuntimeError:
9   dictionary changed size during iteration`` exception.  It no longer does.
10   See https://github.com/Pylons/pyramid/issues/635 for more information.
11
560e36 12 - Backport bug fix from master: - In Mako Templates lookup, check if the uri
BL 13   is already adjusted and bring it back to an asset spec. Normally occurs with
14   inherited templates or included components.
15   https://github.com/Pylons/pyramid/issues/606
16   https://github.com/Pylons/pyramid/issues/607
17
815beb 18 1.3.2 (2012-05-19)
CM 19 ==================
20
21 - Version 1.3.1 was a brownbag release, at very least on Windows and possibly
22   on other operating systems, due to the existence of a stray ``"package``
23   directory (quote included) in the root directory of the 1.3.1 tarball.
24   This directory and its contents was present because the tarball was created
25   using a release version of ``setuptools-git`` rather than a
26   ``setuptools-git`` installed from a checkout.  The only change in this
27   release is to correct the packaging error in 1.3.1.
28
c75128 29 1.3.1 (2012-05-19)
CM 30 ==================
a39dd2 31
CM 32 Bug Fixes
33 ---------
34
35 - Add ``REMOTE_ADDR`` to the ``prequest`` WSGI environ dict for benefit of
36   the debug toolbar, which effectively requires it to be present to work
37   properly.
38
077fa3 39 - When an asset specification was used as a Mako ``renderer=`` argument and a
CM 40   ``mako.modules_directory`` was specified, Pyramid would fail to render the
41   template and instead would raise an error when attempting to write the file
42   to the modules directory.  Example symptom: ``WindowsError: [Error 267] The
43   directory name is invalid:
44   'c:\\docume~1\\chrism\\locals~1\\temp\\tmp9jtjix\\pyramid.tests:fixtures'``.
45   We now replace the colon in the Mako module filename with a dollar sign, so
46   it can work on Windows. See https://github.com/Pylons/pyramid/issues/512
47   for more information.
48
8782de 49 - When no authentication policy was configured, a call to
CM 50   ``pyramid.security.effective_principals`` would unconditionally return the
51   empty list.  This was incorrect, it should have unconditionally returned
52   ``[Everyone]``, and now does.
53
147215 54 - Fix incompatibility with recently released zope.interface 4.0.  Symptom:
CM 55   ``TypeError: Class advice impossible in Python3. Use the @provider class
56   decorator instead.``
57
7c88fe 58 1.3 (2012-03-21)
CM 59 ================
2b4134 60
CM 61 Bug Fixes
62 ---------
63
5cccad 64 - When ``pyramid.wsgi.wsgiapp2`` calls the downstream WSGI app, the app's
CM 65   environ will no longer have (deprecated and potentially misleading)
66   ``bfg.routes.matchdict`` or ``bfg.routes.route`` keys in it.  A symptom of
67   this bug would be a ``wsgiapp2``-wrapped Pyramid app finding the wrong view
68   because it mistakenly detects that a route was matched when, in fact, it
69   was not.
2b4134 70
6c1597 71 - The fix for issue https://github.com/Pylons/pyramid/issues/461 (which made
CM 72   it possible for instance methods to be used as view callables) introduced a
73   backwards incompatibility when methods that declared only a request
74   argument were used.  See https://github.com/Pylons/pyramid/issues/503
75
6fa4b6 76 - Fix an incompatibility under Python 3.X with ``zope.interface`` 4.0.
CM 77   ``Symptom: TypeError: Class advice impossible in Python3.  Use the
78   @provider class decorator instead.``
79
58d149 80 1.3b3 (2012-03-17)
CM 81 ==================
4a6f53 82
CM 83 Bug Fixes
84 ---------
85
86 - ``config.add_view(<aninstancemethod>)`` raised AttributeError involving
87   ``__text__``.  See https://github.com/Pylons/pyramid/issues/461
88
343fb5 89 - Remove references to do-nothing ``pyramid.debug_templates`` setting in all
CM 90   Pyramid-provided ``.ini`` files.  This setting previously told Chameleon to
91   render better exceptions; now Chameleon always renders nice exceptions
92   regardless of the value of this setting.
93
a67838 94 Scaffolds
CM 95 ---------
96
97 - The ``alchemy`` scaffold now shows an informative error message in the
98   browser if the person creating the project forgets to run the
99   initialization script.
100
101 - The ``alchemy`` scaffold initialization script is now called
102   ``initialize_<projectname>_db`` instead of ``populate_<projectname>``.
103
ae1648 104 Documentation
CM 105 -------------
106
107 - Wiki tutorials improved due to collaboration at PyCon US 2012 sprints.
108
3a1420 109 1.3b2 (2012-03-02)
CM 110 ==================
5b1e2a 111
CM 112 Bug Fixes
113 ---------
114
115 - The method ``pyramid.request.Request.partial_application_url`` is no longer
116   in the API docs.  It was meant to be a private method; its publication in
117   the documentation as an API method was a mistake, and it has been renamed
118   to something private.
119
28c313 120 - When a static view was registered using an absolute filesystem path on
CM 121   Windows, the ``request.static_url`` function did not work to generate URLs
122   to its resources.  Symptom: "No static URL definition matching
caebdf 123   c:\\foo\\bar\\baz".
28c313 124
CM 125 - Make all tests pass on Windows XP.
126
52ca12 127 - Bug in ACL authentication checking on Python 3: the ``permits`` and
CM 128   ``principals_allowed_by_permission`` method of
129   ``pyramid.authorization.ACLAuthenticationPolicy`` could return an
130   inappropriate ``True`` value when a permission on an ACL was a string
131   rather than a sequence, and then only if the ACL permission string was a
132   substring of the ``permission`` value passed to the function.
133
134   This bug effects no Pyramid deployment under Python 2; it is a bug that
135   exists only in deployments running on Python 3.  It has existed since
136   Pyramid 1.3a1.
137
138   This bug was due to the presence of an ``__iter__`` attribute on strings
45ddd8 139   under Python 3 which is not present under strings in Python 2.
52ca12 140
cf973d 141 1.3b1 (2012-02-26)
CM 142 ==================
b0ebdf 143
CM 144 Bug Fixes
145 ---------
146
147 - ``pyramid.config.Configurator.with_package`` didn't work if the
148   Configurator was an old-style ``pyramid.configuration.Configurator``
149   instance.
150
1b7342 151 - Pyramid authorization policies did not show up in the introspector.
CM 152
01eac9 153 Deprecations
CM 154 ------------
155
156 - All references to the ``tmpl_context`` request variable were removed from
157   the docs.  Its existence in Pyramid is confusing for people who were never
158   Pylons users.  It was added as a porting convenience for Pylons users in
159   Pyramid 1.0, but it never caught on because the Pyramid rendering system is
160   a lot different than Pylons' was, and alternate ways exist to do what it
161   was designed to offer in Pylons.  It will continue to exist "forever" but
162   it will not be recommended or mentioned in the docs.
163
662d6e 164 1.3a9 (2012-02-22)
CM 165 ==================
844ed9 166
CM 167 Features
168 --------
169
170 - Add an ``introspection`` boolean to the Configurator constructor.  If this
171   is ``True``, actions registered using the Configurator will be registered
172   with the introspector.  If it is ``False``, they won't.  The default is
173   ``True``.  Setting it to ``False`` during action processing will prevent
174   introspection for any following registration statements, and setting it to
175   ``True`` will start them up again.  This addition is to service a
176   requirement that the debug toolbar's own views and methods not show up in
177   the introspector.
178
0db4a1 179 - New API: ``pyramid.config.Configurator.add_notfound_view``.  This is a
CM 180   wrapper for ``pyramid.Config.configurator.add_view`` which provides easy
a7fe30 181   append_slash support and does the right thing about permissions.  It should
CM 182   be preferred over calling ``add_view`` directly with
183   ``context=HTTPNotFound`` as was previously recommended.
0db4a1 184
CM 185 - New API: ``pyramid.view.notfound_view_config``.  This is a decorator
186   constructor like ``pyramid.view.view_config`` that calls
187   ``pyramid.config.Configurator.add_notfound_view`` when scanned.  It should
188   be preferred over using ``pyramid.view.view_config`` with
189   ``context=HTTPNotFound`` as was previously recommended.
a7fe30 190
CM 191 - New API: ``pyramid.config.Configurator.add_forbidden_view``.  This is a
192   wrapper for ``pyramid.Config.configurator.add_view`` which does the right
193   thing about permissions.  It should be preferred over calling ``add_view``
194   directly with ``context=HTTPForbidden`` as was previously recommended.
195
196 - New API: ``pyramid.view.forbidden_view_config``.  This is a decorator
197   constructor like ``pyramid.view.view_config`` that calls
198   ``pyramid.config.Configurator.add_forbidden_view`` when scanned.  It should
199   be preferred over using ``pyramid.view.view_config`` with
200   ``context=HTTPForbidden`` as was previously recommended.
0db4a1 201
6b3cca 202 - New APIs: ``pyramid.response.FileResponse`` and
CM 203   ``pyramid.response.FileIter``, for usage in views that must serve files
204   "manually".
205
844ed9 206 Backwards Incompatibilities
CM 207 ---------------------------
208
209 - Remove ``pyramid.config.Configurator.with_context`` class method.  It was
210   never an API, it is only used by ``pyramid_zcml`` and its functionality has
211   been moved to that package's latest release.  This means that you'll need
40301d 212   to use the 0.9.2 or later release of ``pyramid_zcml`` with this release of
5ca6a9 213   Pyramid.
844ed9 214
CM 215 - The ``introspector`` argument to the ``pyramid.config.Configurator``
216   constructor API has been removed.  It has been replaced by the boolean
217   ``introspection`` flag.
218
219 - The ``pyramid.registry.noop_introspector`` API object has been removed.
220
0db4a1 221 - The older deprecated ``set_notfound_view`` Configurator method is now an
a7fe30 222   alias for the new ``add_notfound_view`` Configurator method.  Likewise, the
CM 223   older deprecated ``set_forbidden_view`` is now an alias for the new
224   ``add_forbidden_view``. This has the following impact: the ``context`` sent
225   to views with a ``(context, request)`` call signature registered via the
226   ``set_notfound_view`` or ``set_forbidden_view`` will now be an exception
227   object instead of the actual resource context found.  Use
0db4a1 228   ``request.context`` to get the actual resource context.  It's also
CM 229   recommended to disuse ``set_notfound_view`` in favor of
a7fe30 230   ``add_notfound_view``, and disuse ``set_forbidden_view`` in favor of
CM 231   ``add_forbidden_view`` despite the aliasing.
0db4a1 232
CM 233 Deprecations
234 ------------
235
236 - The API documentation for ``pyramid.view.append_slash_notfound_view`` and
237   ``pyramid.view.AppendSlashNotFoundViewFactory`` was removed.  These names
238   still exist and are still importable, but they are no longer APIs.  Use
239   ``pyramid.config.Configurator.add_notfound_view(append_slash=True)`` or
240   ``pyramid.view.notfound_view_config(append_slash=True)`` to get the same
241   behavior.
242
a7fe30 243 - The ``set_forbidden_view`` and ``set_notfound_view`` methods of the
CM 244   Configurator were removed from the documentation.  They have been
245   deprecated since Pyramid 1.1.
0db4a1 246
22bae9 247 Bug Fixes
CM 248 ---------
249
250 - The static file response object used by ``config.add_static_view`` opened
251   the static file twice, when it only needed to open it once.
252
0db4a1 253 - The AppendSlashNotFoundViewFactory used request.path to match routes.  This
CM 254   was wrong because request.path contains the script name, and this would
255   cause it to fail in circumstances where the script name was not empty.  It
256   should have used request.path_info, and now does.
257
258 Documentation
259 -------------
260
a7fe30 261 - Updated the "Creating a Not Found View" section of the "Hooks" chapter,
0db4a1 262   replacing explanations of registering a view using ``add_view`` or
CM 263   ``view_config`` with ones using ``add_notfound_view`` or
264   ``notfound_view_config``.
a7fe30 265
CM 266 - Updated the "Creating a Not Forbidden View" section of the "Hooks" chapter,
267   replacing explanations of registering a view using ``add_view`` or
268   ``view_config`` with ones using ``add_forbidden_view`` or
269   ``forbidden_view_config``.
0db4a1 270
CM 271 - Updated the "Redirecting to Slash-Appended Routes" section of the "URL
272   Dispatch" chapter, replacing explanations of registering a view using
273   ``add_view`` or ``view_config`` with ones using ``add_notfound_view`` or
274   ``notfound_view_config``
275
a7fe30 276 - Updated all tutorials to use ``pyramid.view.forbidden_view_config`` rather
CM 277   than ``pyramid.view.view_config`` with an HTTPForbidden context.
278
51919e 279 1.3a8 (2012-02-19)
CM 280 ==================
e4b8fa 281
CM 282 Features
283 --------
284
285 - The ``scan`` method of a ``Configurator`` can be passed an ``ignore``
286   argument, which can be a string, a callable, or a list consisting of
287   strings and/or callables.  This feature allows submodules, subpackages, and
288   global objects from being scanned.  See
289   http://readthedocs.org/docs/venusian/en/latest/#ignore-scan-argument for
290   more information about how to use the ``ignore`` argument to ``scan``.
291
af24f7 292 - Better error messages when a view callable returns a value that cannot be
CM 293   converted to a response (for example, when a view callable returns a
294   dictionary without a renderer defined, or doesn't return any value at all).
295   The error message now contains information about the view callable itself
296   as well as the result of calling it.
297
5ad401 298 - Better error message when a .pyc-only module is ``config.include`` -ed.
CM 299   This is not permitted due to error reporting requirements, and a better
300   error message is shown when it is attempted.  Previously it would fail with
301   something like "AttributeError: 'NoneType' object has no attribute
302   'rfind'".
303
c51896 304 - Add ``pyramid.config.Configurator.add_traverser`` API method.  See the
748aad 305   Hooks narrative documentation section entitled "Changing the Traverser" for
CM 306   more information.  This is not a new feature, it just provides an API for
307   adding a traverser without needing to use the ZCA API.
c51896 308
CM 309 - Add ``pyramid.config.Configurator.add_resource_url_adapter`` API method.
310   See the Hooks narrative documentation section entitled "Changing How
311   pyramid.request.Request.resource_url Generates a URL" for more information.
312   This is not a new feature, it just provides an API for adding a resource
313   url adapter without needing to use the ZCA API.
748aad 314
b2ea4c 315 - The system value ``req`` is now supplied to renderers as an alias for
4786ca 316   ``request``.  This means that you can now, for example, in a template, do
b2ea4c 317   ``req.route_url(...)`` instead of ``request.route_url(...)``.  This is
CM 318   purely a change to reduce the amount of typing required to use request
319   methods and attributes from within templates.  The value ``request`` is
320   still available too, this is just an alternative.
4786ca 321
c51896 322 - A new interface was added: ``pyramid.interfaces.IResourceURL``.  An adapter
CM 323   implementing its interface can be used to override resource URL generation
324   when ``request.resource_url`` is called.  This interface replaces the
325   now-deprecated ``pyramid.interfaces.IContextURL`` interface.
326
327 - The dictionary passed to a resource's ``__resource_url__`` method (see
328   "Overriding Resource URL Generation" in the "Resources" chapter) now
329   contains an ``app_url`` key, representing the application URL generated
330   during ``request.resource_url``.  It represents a potentially customized
331   URL prefix, containing potentially custom scheme, host and port information
332   passed by the user to ``request.resource_url``.  It should be used instead
333   of ``request.application_url`` where necessary.
334
335 - The ``request.resource_url`` API now accepts these arguments: ``app_url``,
336   ``scheme``, ``host``, and ``port``.  The app_url argument can be used to
337   replace the URL prefix wholesale during url generation.  The ``scheme``,
338   ``host``, and ``port`` arguments can be used to replace the respective
339   default values of ``request.application_url`` partially.
340
341 - A new API named ``request.resource_path`` now exists.  It works like
342   ``request.resource_url`` but produces a relative URL rather than an
343   absolute one.
344
345 - The ``request.route_url`` API now accepts these arguments: ``_app_url``,
346   ``_scheme``, ``_host``, and ``_port``.  The ``_app_url`` argument can be
347   used to replace the URL prefix wholesale during url generation.  The
348   ``_scheme``, ``_host``, and ``_port`` arguments can be used to replace the
349   respective default values of ``request.application_url`` partially.
350
351 Backwards Incompatibilities
352 ---------------------------
353
354 - The ``pyramid.interfaces.IContextURL`` interface has been deprecated.
355   People have been instructed to use this to register a resource url adapter
356   in the "Hooks" chapter to use to influence ``request.resource_url`` URL
357   generation for resources found via custom traversers since Pyramid 1.0.
358
359   The interface still exists and registering such an adapter still works, but
360   this interface will be removed from the software after a few major Pyramid
361   releases.  You should replace it with an equivalent
362   ``pyramid.interfaces.IResourceURL`` adapter, registered using the new
363   ``pyramid.config.Configurator.add_resource_url_adapter`` API.  A
364   deprecation warning is now emitted when a
365   ``pyramid.interfaces.IContextURL`` adapter is found when
366   ``request.resource_url`` is called.
367
c6a299 368 Documentation
CM 369 -------------
370
371 - Don't create a ``session`` instance in SQLA Wiki tutorial, use raw
372   ``DBSession`` instead (this is more common in real SQLA apps).
373
d21ba4 374 Scaffolding
CM 375 -----------
376
377 - Put ``pyramid.includes`` targets within ini files in scaffolds on separate
378   lines in order to be able to tell people to comment out only the
379   ``pyramid_debugtoolbar`` line when they want to disable the toolbar.
380
e4b8fa 381 Dependencies
CM 382 ------------
383
384 - Depend on ``venusian`` >= 1.0a3 to provide scan ``ignore`` support.
385
d679fa 386 Internal
CM 387 --------
388
389 - Create a "MakoRendererFactoryHelper" that provides customizable settings
390   key prefixes.  Allows settings prefixes other than "mako." to be used to
391   create different factories that don't use the global mako settings.  This
392   will be useful for the debug toolbar, which can currently be sabotaged by
393   someone using custom mako configuration settings.
394
e3f9d0 395 1.3a7 (2012-02-07)
CM 396 ==================
ea68d2 397
f8bfc6 398 Features
CM 399 --------
400
401 - More informative error message when a ``config.include`` cannot find an
402   ``includeme``.  See https://github.com/Pylons/pyramid/pull/392.
403
22e0aa 404 - Internal: catch unhashable discriminators early (raise an error instead of
CM 405   allowing them to find their way into resolveConflicts).
406
835d48 407 - The `match_param` view predicate now accepts a string or a tuple.
MM 408   This replaces the broken behavior of accepting a dict. See
409   https://github.com/Pylons/pyramid/issues/425 for more information.
410
ea68d2 411 Bug Fixes
CM 412 ---------
413
414 - The process will now restart when ``pserve`` is used with the ``--reload``
a3a711 415   flag when the ``development.ini`` file (or any other .ini file in use) is
ea68d2 416   changed.  See https://github.com/Pylons/pyramid/issues/377 and
CM 417   https://github.com/Pylons/pyramid/pull/411
418
8a3621 419 - The ``prequest`` script would fail when used against URLs which did not
CM 420   return HTML or text.  See https://github.com/Pylons/pyramid/issues/381
421
835d48 422 Backwards Incompatibilities
MM 423 ---------------------------
424
425 - The `match_param` view predicate no longer accepts a dict. This will
426   have no negative affect because the implementation was broken for
427   dict-based arguments.
428
7cf063 429 Documentation
CM 430 -------------
431
432 - Add a traversal hello world example to the narrative docs.
433
a41c8c 434 1.3a6 (2012-01-20)
CM 435 ==================
6c2e8f 436
MM 437 Features
438 --------
439
440 - New API: ``pyramid.config.Configurator.set_request_property``. Add lazy
441   property descriptors to a request without changing the request factory.
442   This method provides conflict detection and is the suggested way to add
443   properties to a request.
444
830864 445 - Responses generated by Pyramid's ``static_view`` now use
CM 446   a ``wsgi.file_wrapper`` (see
447   http://www.python.org/dev/peps/pep-0333/#optional-platform-specific-file-handling)
448   when one is provided by the web server.
449
87233a 450 Bug Fixes
CM 451 ---------
452
453 - Views registered with an ``accept`` could not be overridden correctly with
454   a different view that had the same predicate arguments.  See
455   https://github.com/Pylons/pyramid/pull/404 for more information.
456
134388 457 - When using a dotted name for a ``view`` argument to
CM 458   ``Configurator.add_view`` that pointed to a class with a ``view_defaults``
459   decorator, the view defaults would not be applied.  See
460   https://github.com/Pylons/pyramid/issues/396 .
461
05f462 462 - Static URL paths were URL-quoted twice.  See
CM 463   https://github.com/Pylons/pyramid/issues/407 .
464
cf3a11 465 1.3a5 (2012-01-09)
CM 466 ==================
4c29ef 467
CM 468 Bug Fixes
469 ---------
470
471 - The ``pyramid.view.view_defaults`` decorator did not work properly when
472   more than one view relied on the defaults being different for configuration
473   conflict resolution.  See https://github.com/Pylons/pyramid/issues/394.
474
a5d994 475 Backwards Incompatibilities
CM 476 ---------------------------
477
478 - The ``path_info`` route and view predicates now match against
479   ``request.upath_info`` (Unicode) rather than ``request.path_info``
480   (indeterminate value based on Python 3 vs. Python 2).  This has to be done
481   to normalize matching on Python 2 and Python 3.
482
683941 483 1.3a4 (2012-01-05)
CM 484 ==================
b73edc 485
MM 486 Features
487 --------
488
489 - New API: ``pyramid.request.Request.set_property``. Add lazy property
490   descriptors to a request without changing the request factory. New
491   properties may be reified, effectively caching the value for the lifetime
6c2e8f 492   of the instance. Common use-cases for this would be to get a database
b73edc 493   connection for the request or identify the current user.
MM 494
030d10 495 - Use the ``waitress`` WSGI server instead of ``wsgiref`` in scaffolding.
CM 496
52a948 497 Bug Fixes
CM 498 ---------
499
500 - The documentation of ``pyramid.events.subscriber`` indicated that using it
501   as a decorator with no arguments like this::
502
503     @subscriber()
504     def somefunc(event):
505         pass
506
507   Would register ``somefunc`` to receive all events sent via the registry,
508   but this was untrue.  Instead, it would receive no events at all.  This has
509   now been fixed and the code matches the documentation.  See also
510   https://github.com/Pylons/pyramid/issues/386
511
ad9807 512 - Literal portions of route patterns were not URL-quoted when ``route_url``
c52c92 513   or ``route_path`` was used to generate a URL or path.
ad9807 514
CM 515 - The result of ``route_path`` or ``route_url`` might have been ``unicode``
516   or ``str`` depending on the input.  It is now guaranteed to always be
517   ``str``.
518
519 - URL matching when the pattern contained non-ASCII characters in literal
520   parts was indeterminate.  Now the pattern supplied to ``add_route`` is
521   assumed to be either: a ``unicode`` value, or a ``str`` value that contains
522   only ASCII characters.  If you now want to match the path info from a URL
523   that contains high order characters, you can pass the Unicode
524   representation of the decoded path portion in the pattern.
525
526 - When using a ``traverse=`` route predicate, traversal would fail with a
527   URLDecodeError if there were any high-order characters in the traversal
528   pattern or in the matched dynamic segments.
529
92dcb5 530 - Using a dynamic segment named ``traverse`` in a route pattern like this::
CM 531
532     config.add_route('trav_route', 'traversal/{traverse:.*}')
533
534   Would cause a ``UnicodeDecodeError`` when the route was matched and the
c52c92 535   matched portion of the URL contained any high-order characters.  See
92dcb5 536   https://github.com/Pylons/pyramid/issues/385 .
CM 537
c52c92 538 - When using a ``*traverse`` stararg in a route pattern, a URL that matched
CM 539   that possessed a ``@@`` in its name (signifying a view name) would be
540   inappropriately quoted by the traversal machinery during traversal,
541   resulting in the view not being found properly. See
542   https://github.com/Pylons/pyramid/issues/382 and
543   https://github.com/Pylons/pyramid/issues/375 .
544
ad9807 545 Backwards Incompatibilities
CM 546 ---------------------------
547
548 - String values passed to ``route_url`` or ``route_path`` that are meant to
549   replace "remainder" matches will now be URL-quoted except for embedded
550   slashes. For example::
551
552      config.add_route('remain', '/foo*remainder')
553      request.route_path('remain', remainder='abc / def')
554      # -> '/foo/abc%20/%20def'
555
556   Previously string values passed as remainder replacements were tacked on
557   untouched, without any URL-quoting.  But this doesn't really work logically
558   if the value passed is Unicode (raw unicode cannot be placed in a URL or in
559   a path) and it is inconsistent with the rest of the URL generation
560   machinery if the value is a string (it won't be quoted unless by the
561   caller).
562
563   Some folks will have been relying on the older behavior to tack on query
564   string elements and anchor portions of the URL; sorry, you'll need to
565   change your code to use the ``_query`` and/or ``_anchor`` arguments to
566   ``route_path`` or ``route_url`` to do this now.
567
568 - If you pass a bytestring that contains non-ASCII characters to
569   ``add_route`` as a pattern, it will now fail at startup time.  Use Unicode
570   instead.
571
d394da 572 1.3a3 (2011-12-21)
CM 573 ==================
c8061e 574
CM 575 Features
576 --------
577
578 - Added a ``prequest`` script (along the lines of ``paster request``).  It is
579   documented in the "Command-Line Pyramid" chapter in the section entitled
580   "Invoking a Request".
581
ba2a3f 582 - Add undocumented ``__discriminator__`` API to derived view callables.
CM 583   e.g. ``adapters.lookup(...).__discriminator__(context, request)``.  It will
584   be used by superdynamic systems that require the discriminator to be used
585   for introspection after manual view lookup.
586
d58614 587 Bug Fixes
CM 588 ---------
589
590 - Normalized exit values and ``-h`` output for all ``p*`` scripts
591   (``pviews``, ``proutes``, etc).
592
61838b 593 Documentation
CM 594 -------------
595
596 - Added a section named "Making Your Script into a Console Script" in the
597   "Command-Line Pyramid" chapter.
598
9003a8 599 - Removed the "Running Pyramid on Google App Engine" tutorial from the main
CM 600   docs.  It survives on in the Cookbook
601   (http://docs.pylonsproject.org/projects/pyramid_cookbook/en/latest/gae.html).
602   Rationale: it provides the correct info for the Python 2.5 version of GAE
603   only, and this version of Pyramid does not support Python 2.5.
604
9dce50 605 1.3a2 (2011-12-14)
CM 606 ==================
4375cf 607
CM 608 Features
609 --------
610
611 - New API: ``pyramid.view.view_defaults``. If you use a class as a view, you
612   can use the new ``view_defaults`` class decorator on the class to provide
613   defaults to the view configuration information used by every
614   ``@view_config`` decorator that decorates a method of that class.  It also
615   works against view configurations involving a class made imperatively.
616
78d1e4 617 - Added a backwards compatibility knob to ``pcreate`` to emulate ``paster
CM 618   create`` handling for the ``--list-templates`` option.
619
bfd4b3 620 - Changed scaffolding machinery around a bit to make it easier for people who
CM 621   want to have extension scaffolds that can work across Pyramid 1.0.X, 1.1.X,
622   1.2.X and 1.3.X.  See the new "Creating Pyramid Scaffolds" chapter in the
623   narrative documentation for more info.
624
4375cf 625 Documentation
CM 626 -------------
627
628 - Added documentation to "View Configuration" narrative documentation chapter
629   about ``view_defaults`` class decorator.
630
631 - Added API docs for ``view_defaults`` class decorator.
632
bfd4b3 633 - Added an API docs chapter for ``pyramid.scaffolds``.
CM 634
635 - Added a narrative docs chapter named "Creating Pyramid Scaffolds".
636
637 Backwards Incompatibilities
638 ---------------------------
639
640 - The ``template_renderer`` method of ``pyramid.scaffolds.PyramidScaffold``
641   was renamed to ``render_template``.  If you were overriding it, you're a
642   bad person, because it wasn't an API before now.  But we're nice so we're
643   letting you know.
644
5f1cf3 645 1.3a1 (2011-12-09)
CM 646 ==================
0dde01 647
9b9004 648 Features
CM 649 --------
650
a1bf6a 651 - Python 3.2 compatibility.
e04cbb 652
5cf9fc 653 - New ``pyramid.compat`` module and API documentation which provides Python
CM 654   2/3 straddling support for Pyramid add-ons and development environments.
655
63fced 656 - A ``mako.directories`` setting is no longer required to use Mako templates
CM 657   Rationale: Mako template renderers can be specified using an absolute asset
658   spec.  An entire application can be written with such asset specs,
659   requiring no ordered lookup path.
660
8a5db4 661 - ``bpython`` interpreter compatibility in ``pshell``.  See the "Command-Line
CM 662   Pyramid" narrative docs chapter for more information.
663
596495 664 - Added ``get_appsettings`` API function to the ``pyramid.paster`` module.
CM 665   This function returns the settings defined within an ``[app:...]`` section
666   in a PasteDeploy ini file.
667
668 - Added ``setup_logging`` API function to the ``pyramid.paster`` module.
669   This function sets up Python logging according to the logging configuration
670   in a PasteDeploy ini file.
38e4c7 671
35ad08 672 - Configuration conflict reporting is reported in a more understandable way
CM 673   ("Line 11 in file..." vs. a repr of a tuple of similar info).
674
d83b39 675 - A configuration introspection system was added; see the narrative
9d97b6 676   documentation chapter entitled "Pyramid Configuration Introspection" for
7d109d 677   more information.  New APIs: ``pyramid.registry.Introspectable``,
57a0d7 678   ``pyramid.config.Configurator.introspector``,
CM 679   ``pyramid.config.Configurator.introspectable``,
7d109d 680   ``pyramid.registry.Registry.introspector``.
CM 681
682 - Allow extra keyword arguments to be passed to the
683   ``pyramid.config.Configurator.action`` method.
57a0d7 684
56df90 685 - New APIs: ``pyramid.path.AssetResolver`` and
CM 686   ``pyramid.path.DottedNameResolver``.  The former can be used to resolve
687   asset specifications, the latter can be used to resolve dotted names to
688   modules or packages.
689
b54b2c 690 Bug Fixes
CM 691 ---------
692
a4b82c 693 - Make test suite pass on 32-bit systems; closes #286.  closes #306.
b54b2c 694   See also https://github.com/Pylons/pyramid/issues/286
CM 695
206a7f 696 - The ``pryamid.view.view_config`` decorator did not accept a ``match_params``
CM 697   predicate argument.  See https://github.com/Pylons/pyramid/pull/308
698
876fb6 699 - The AuthTktCookieHelper could potentially generate Unicode headers
560e36 700   inappropriately when the ``tokens`` argument to remember was used.  See
876fb6 701   https://github.com/Pylons/pyramid/pull/314.
CM 702
6e4c2d 703 - The AuthTktAuthenticationPolicy did not use a timing-attack-aware string
CM 704   comparator.  See https://github.com/Pylons/pyramid/pull/320 for more info.
705
9e7c11 706 - The DummySession in ``pyramid.testing`` now generates a new CSRF token if
CM 707   one doesn't yet exist.
708
1c39ae 709 - ``request.static_url`` now generates URL-quoted URLs when fed a ``path``
a5512e 710   argument which contains characters that are unsuitable for URLs.  See
CM 711   https://github.com/Pylons/pyramid/issues/349 for more info.
1c39ae 712
ea814b 713 - Prevent a scaffold rendering from being named ``site`` (conflicts with
CM 714   Python internal site.py).
715
c753fc 716 - Support for using instances as targets of the ``pyramid.wsgi.wsgiapp`` and
CM 717   ``pryramid.wsgi.wsgiapp2`` functions.
718   See https://github.com/Pylons/pyramid/pull/370 for more info.
719
e04cbb 720 Backwards Incompatibilities
CM 721 ---------------------------
722
723 - Pyramid no longer runs on Python 2.5 (which includes the most recent
9ffa36 724   release of Jython and the Python 2.5 version of GAE as of this writing).
9b9004 725
75f05a 726 - The ``paster`` command is no longer the documented way to create projects,
CM 727   start the server, or run debugging commands.  To create projects from
728   scaffolds, ``paster create`` is replaced by the ``pcreate`` console script.
729   To serve up a project, ``paster serve`` is replaced by the ``pserve``
730   console script.  New console scripts named ``pshell``, ``pviews``,
731   ``proutes``, and ``ptweens`` do what their ``paster <commandname>``
732   equivalents used to do.  Rationale: the Paste and PasteScript packages do
733   not run under Python 3.
734
735 - The default WSGI server run as the result of ``pserve`` from newly rendered
736   scaffolding is now the ``wsgiref`` WSGI server instead of the
737   ``paste.httpserver`` server.  Rationale: Rationale: the Paste and
738   PasteScript packages do not run under Python 3.
739
4c6fa2 740 - The ``pshell`` command (see "paster pshell") no longer accepts a
8a5db4 741   ``--disable-ipython`` command-line argument.  Instead, it accepts a ``-p``
CM 742   or ``--python-shell`` argument, which can be any of the values ``python``,
743   ``ipython`` or ``bpython``.
744
e307fc 745 - Removed the ``pyramid.renderers.renderer_from_name`` function.  It has been
CM 746   deprecated since Pyramid 1.0, and was never an API.
747
b74abe 748 - To use ZCML with versions of Pyramid >= 1.3, you will need ``pyramid_zcml``
CM 749   version >= 0.8 and ``zope.configuration`` version >= 3.8.0.  The
750   ``pyramid_zcml`` package version 0.8 is backwards compatible all the way to
751   Pyramid 1.0, so you won't be warned if you have older versions installed
752   and upgrade Pyramid "in-place"; it may simply break instead.
753
0dde01 754 Dependencies
CM 755 ------------
756
8fe021 757 - Pyramid no longer depends on the ``zope.component`` package, except as a
0dde01 758   testing dependency.
CM 759
e04cbb 760 - Pyramid now depends on a zope.interface>=3.8.0, WebOb>=1.2dev,
CM 761   repoze.lru>=0.4, zope.deprecation>=3.5.0, translationstring>=0.4 (for
762   Python 3 compatibility purposes).  It also, as a testing dependency,
763   depends on WebTest>=1.3.1 for the same reason.
1939d0 764
75f05a 765 - Pyramid no longer depends on the Paste or PasteScript packages.
CM 766
5edd54 767 Documentation
CM 768 -------------
769
770 - The SQLAlchemy Wiki tutorial has been updated.  It now uses
771   ``@view_config`` decorators and an explicit database population script.
75f05a 772
14e5fa 773 - Minor updates to the ZODB Wiki tutorial.
CM 774
9d97b6 775 - A narrative documentation chapter named "Extending Pyramid Configuration"
CM 776   was added; it describes how to add a new directive, and how use the
777   ``pyramid.config.Configurator.action`` method within custom directives.  It
778   also describes how to add introspectable objects.
779
8fe021 780 - A narrative documentation chapter named "Pyramid Configuration
CM 781   Introspection" was added.  It describes how to query the introspection
782   system.
783
818f8c 784 Scaffolds
CM 785 ---------
786
787 - Rendered scaffolds have now been changed to be more relocatable (fewer
788   mentions of the package name within files in the package).
789
8a5db4 790 - The ``routesalchemy`` scaffold has been renamed ``alchemy``, replacing the
CM 791   older (traversal-based) ``alchemy`` scaffold (which has been retired).
818f8c 792
8fe021 793 - The ``starter`` scaffold now uses URL dispatch by default.
CM 794