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