Chris McDonough
2012-02-19 51919e05d9c251f7f80a4736be2b822eafc5d189
commit | author | age
51919e 1 1.3a8 (2012-02-19)
CM 2 ==================
e4b8fa 3
CM 4 Features
5 --------
6
7 - The ``scan`` method of a ``Configurator`` can be passed an ``ignore``
8   argument, which can be a string, a callable, or a list consisting of
9   strings and/or callables.  This feature allows submodules, subpackages, and
10   global objects from being scanned.  See
11   http://readthedocs.org/docs/venusian/en/latest/#ignore-scan-argument for
12   more information about how to use the ``ignore`` argument to ``scan``.
13
af24f7 14 - Better error messages when a view callable returns a value that cannot be
CM 15   converted to a response (for example, when a view callable returns a
16   dictionary without a renderer defined, or doesn't return any value at all).
17   The error message now contains information about the view callable itself
18   as well as the result of calling it.
19
5ad401 20 - Better error message when a .pyc-only module is ``config.include`` -ed.
CM 21   This is not permitted due to error reporting requirements, and a better
22   error message is shown when it is attempted.  Previously it would fail with
23   something like "AttributeError: 'NoneType' object has no attribute
24   'rfind'".
25
c51896 26 - Add ``pyramid.config.Configurator.add_traverser`` API method.  See the
748aad 27   Hooks narrative documentation section entitled "Changing the Traverser" for
CM 28   more information.  This is not a new feature, it just provides an API for
29   adding a traverser without needing to use the ZCA API.
c51896 30
CM 31 - Add ``pyramid.config.Configurator.add_resource_url_adapter`` API method.
32   See the Hooks narrative documentation section entitled "Changing How
33   pyramid.request.Request.resource_url Generates a URL" for more information.
34   This is not a new feature, it just provides an API for adding a resource
35   url adapter without needing to use the ZCA API.
748aad 36
b2ea4c 37 - The system value ``req`` is now supplied to renderers as an alias for
4786ca 38   ``request``.  This means that you can now, for example, in a template, do
b2ea4c 39   ``req.route_url(...)`` instead of ``request.route_url(...)``.  This is
CM 40   purely a change to reduce the amount of typing required to use request
41   methods and attributes from within templates.  The value ``request`` is
42   still available too, this is just an alternative.
4786ca 43
c51896 44 - A new interface was added: ``pyramid.interfaces.IResourceURL``.  An adapter
CM 45   implementing its interface can be used to override resource URL generation
46   when ``request.resource_url`` is called.  This interface replaces the
47   now-deprecated ``pyramid.interfaces.IContextURL`` interface.
48
49 - The dictionary passed to a resource's ``__resource_url__`` method (see
50   "Overriding Resource URL Generation" in the "Resources" chapter) now
51   contains an ``app_url`` key, representing the application URL generated
52   during ``request.resource_url``.  It represents a potentially customized
53   URL prefix, containing potentially custom scheme, host and port information
54   passed by the user to ``request.resource_url``.  It should be used instead
55   of ``request.application_url`` where necessary.
56
57 - The ``request.resource_url`` API now accepts these arguments: ``app_url``,
58   ``scheme``, ``host``, and ``port``.  The app_url argument can be used to
59   replace the URL prefix wholesale during url generation.  The ``scheme``,
60   ``host``, and ``port`` arguments can be used to replace the respective
61   default values of ``request.application_url`` partially.
62
63 - A new API named ``request.resource_path`` now exists.  It works like
64   ``request.resource_url`` but produces a relative URL rather than an
65   absolute one.
66
67 - The ``request.route_url`` API now accepts these arguments: ``_app_url``,
68   ``_scheme``, ``_host``, and ``_port``.  The ``_app_url`` argument can be
69   used to replace the URL prefix wholesale during url generation.  The
70   ``_scheme``, ``_host``, and ``_port`` arguments can be used to replace the
71   respective default values of ``request.application_url`` partially.
72
73 Backwards Incompatibilities
74 ---------------------------
75
76 - The ``pyramid.interfaces.IContextURL`` interface has been deprecated.
77   People have been instructed to use this to register a resource url adapter
78   in the "Hooks" chapter to use to influence ``request.resource_url`` URL
79   generation for resources found via custom traversers since Pyramid 1.0.
80
81   The interface still exists and registering such an adapter still works, but
82   this interface will be removed from the software after a few major Pyramid
83   releases.  You should replace it with an equivalent
84   ``pyramid.interfaces.IResourceURL`` adapter, registered using the new
85   ``pyramid.config.Configurator.add_resource_url_adapter`` API.  A
86   deprecation warning is now emitted when a
87   ``pyramid.interfaces.IContextURL`` adapter is found when
88   ``request.resource_url`` is called.
89
c6a299 90 Documentation
CM 91 -------------
92
93 - Don't create a ``session`` instance in SQLA Wiki tutorial, use raw
94   ``DBSession`` instead (this is more common in real SQLA apps).
95
d21ba4 96 Scaffolding
CM 97 -----------
98
99 - Put ``pyramid.includes`` targets within ini files in scaffolds on separate
100   lines in order to be able to tell people to comment out only the
101   ``pyramid_debugtoolbar`` line when they want to disable the toolbar.
102
e4b8fa 103 Dependencies
CM 104 ------------
105
106 - Depend on ``venusian`` >= 1.0a3 to provide scan ``ignore`` support.
107
d679fa 108 Internal
CM 109 --------
110
111 - Create a "MakoRendererFactoryHelper" that provides customizable settings
112   key prefixes.  Allows settings prefixes other than "mako." to be used to
113   create different factories that don't use the global mako settings.  This
114   will be useful for the debug toolbar, which can currently be sabotaged by
115   someone using custom mako configuration settings.
116
e3f9d0 117 1.3a7 (2012-02-07)
CM 118 ==================
ea68d2 119
f8bfc6 120 Features
CM 121 --------
122
123 - More informative error message when a ``config.include`` cannot find an
124   ``includeme``.  See https://github.com/Pylons/pyramid/pull/392.
125
22e0aa 126 - Internal: catch unhashable discriminators early (raise an error instead of
CM 127   allowing them to find their way into resolveConflicts).
128
835d48 129 - The `match_param` view predicate now accepts a string or a tuple.
MM 130   This replaces the broken behavior of accepting a dict. See
131   https://github.com/Pylons/pyramid/issues/425 for more information.
132
ea68d2 133 Bug Fixes
CM 134 ---------
135
136 - The process will now restart when ``pserve`` is used with the ``--reload``
a3a711 137   flag when the ``development.ini`` file (or any other .ini file in use) is
ea68d2 138   changed.  See https://github.com/Pylons/pyramid/issues/377 and
CM 139   https://github.com/Pylons/pyramid/pull/411
140
8a3621 141 - The ``prequest`` script would fail when used against URLs which did not
CM 142   return HTML or text.  See https://github.com/Pylons/pyramid/issues/381
143
835d48 144 Backwards Incompatibilities
MM 145 ---------------------------
146
147 - The `match_param` view predicate no longer accepts a dict. This will
148   have no negative affect because the implementation was broken for
149   dict-based arguments.
150
7cf063 151 Documentation
CM 152 -------------
153
154 - Add a traversal hello world example to the narrative docs.
155
a41c8c 156 1.3a6 (2012-01-20)
CM 157 ==================
6c2e8f 158
MM 159 Features
160 --------
161
162 - New API: ``pyramid.config.Configurator.set_request_property``. Add lazy
163   property descriptors to a request without changing the request factory.
164   This method provides conflict detection and is the suggested way to add
165   properties to a request.
166
830864 167 - Responses generated by Pyramid's ``static_view`` now use
CM 168   a ``wsgi.file_wrapper`` (see
169   http://www.python.org/dev/peps/pep-0333/#optional-platform-specific-file-handling)
170   when one is provided by the web server.
171
87233a 172 Bug Fixes
CM 173 ---------
174
175 - Views registered with an ``accept`` could not be overridden correctly with
176   a different view that had the same predicate arguments.  See
177   https://github.com/Pylons/pyramid/pull/404 for more information.
178
134388 179 - When using a dotted name for a ``view`` argument to
CM 180   ``Configurator.add_view`` that pointed to a class with a ``view_defaults``
181   decorator, the view defaults would not be applied.  See
182   https://github.com/Pylons/pyramid/issues/396 .
183
05f462 184 - Static URL paths were URL-quoted twice.  See
CM 185   https://github.com/Pylons/pyramid/issues/407 .
186
cf3a11 187 1.3a5 (2012-01-09)
CM 188 ==================
4c29ef 189
CM 190 Bug Fixes
191 ---------
192
193 - The ``pyramid.view.view_defaults`` decorator did not work properly when
194   more than one view relied on the defaults being different for configuration
195   conflict resolution.  See https://github.com/Pylons/pyramid/issues/394.
196
a5d994 197 Backwards Incompatibilities
CM 198 ---------------------------
199
200 - The ``path_info`` route and view predicates now match against
201   ``request.upath_info`` (Unicode) rather than ``request.path_info``
202   (indeterminate value based on Python 3 vs. Python 2).  This has to be done
203   to normalize matching on Python 2 and Python 3.
204
683941 205 1.3a4 (2012-01-05)
CM 206 ==================
b73edc 207
MM 208 Features
209 --------
210
211 - New API: ``pyramid.request.Request.set_property``. Add lazy property
212   descriptors to a request without changing the request factory. New
213   properties may be reified, effectively caching the value for the lifetime
6c2e8f 214   of the instance. Common use-cases for this would be to get a database
b73edc 215   connection for the request or identify the current user.
MM 216
030d10 217 - Use the ``waitress`` WSGI server instead of ``wsgiref`` in scaffolding.
CM 218
52a948 219 Bug Fixes
CM 220 ---------
221
222 - The documentation of ``pyramid.events.subscriber`` indicated that using it
223   as a decorator with no arguments like this::
224
225     @subscriber()
226     def somefunc(event):
227         pass
228
229   Would register ``somefunc`` to receive all events sent via the registry,
230   but this was untrue.  Instead, it would receive no events at all.  This has
231   now been fixed and the code matches the documentation.  See also
232   https://github.com/Pylons/pyramid/issues/386
233
ad9807 234 - Literal portions of route patterns were not URL-quoted when ``route_url``
c52c92 235   or ``route_path`` was used to generate a URL or path.
ad9807 236
CM 237 - The result of ``route_path`` or ``route_url`` might have been ``unicode``
238   or ``str`` depending on the input.  It is now guaranteed to always be
239   ``str``.
240
241 - URL matching when the pattern contained non-ASCII characters in literal
242   parts was indeterminate.  Now the pattern supplied to ``add_route`` is
243   assumed to be either: a ``unicode`` value, or a ``str`` value that contains
244   only ASCII characters.  If you now want to match the path info from a URL
245   that contains high order characters, you can pass the Unicode
246   representation of the decoded path portion in the pattern.
247
248 - When using a ``traverse=`` route predicate, traversal would fail with a
249   URLDecodeError if there were any high-order characters in the traversal
250   pattern or in the matched dynamic segments.
251
92dcb5 252 - Using a dynamic segment named ``traverse`` in a route pattern like this::
CM 253
254     config.add_route('trav_route', 'traversal/{traverse:.*}')
255
256   Would cause a ``UnicodeDecodeError`` when the route was matched and the
c52c92 257   matched portion of the URL contained any high-order characters.  See
92dcb5 258   https://github.com/Pylons/pyramid/issues/385 .
CM 259
c52c92 260 - When using a ``*traverse`` stararg in a route pattern, a URL that matched
CM 261   that possessed a ``@@`` in its name (signifying a view name) would be
262   inappropriately quoted by the traversal machinery during traversal,
263   resulting in the view not being found properly. See
264   https://github.com/Pylons/pyramid/issues/382 and
265   https://github.com/Pylons/pyramid/issues/375 .
266
ad9807 267 Backwards Incompatibilities
CM 268 ---------------------------
269
270 - String values passed to ``route_url`` or ``route_path`` that are meant to
271   replace "remainder" matches will now be URL-quoted except for embedded
272   slashes. For example::
273
274      config.add_route('remain', '/foo*remainder')
275      request.route_path('remain', remainder='abc / def')
276      # -> '/foo/abc%20/%20def'
277
278   Previously string values passed as remainder replacements were tacked on
279   untouched, without any URL-quoting.  But this doesn't really work logically
280   if the value passed is Unicode (raw unicode cannot be placed in a URL or in
281   a path) and it is inconsistent with the rest of the URL generation
282   machinery if the value is a string (it won't be quoted unless by the
283   caller).
284
285   Some folks will have been relying on the older behavior to tack on query
286   string elements and anchor portions of the URL; sorry, you'll need to
287   change your code to use the ``_query`` and/or ``_anchor`` arguments to
288   ``route_path`` or ``route_url`` to do this now.
289
290 - If you pass a bytestring that contains non-ASCII characters to
291   ``add_route`` as a pattern, it will now fail at startup time.  Use Unicode
292   instead.
293
d394da 294 1.3a3 (2011-12-21)
CM 295 ==================
c8061e 296
CM 297 Features
298 --------
299
300 - Added a ``prequest`` script (along the lines of ``paster request``).  It is
301   documented in the "Command-Line Pyramid" chapter in the section entitled
302   "Invoking a Request".
303
ba2a3f 304 - Add undocumented ``__discriminator__`` API to derived view callables.
CM 305   e.g. ``adapters.lookup(...).__discriminator__(context, request)``.  It will
306   be used by superdynamic systems that require the discriminator to be used
307   for introspection after manual view lookup.
308
d58614 309 Bug Fixes
CM 310 ---------
311
312 - Normalized exit values and ``-h`` output for all ``p*`` scripts
313   (``pviews``, ``proutes``, etc).
314
61838b 315 Documentation
CM 316 -------------
317
318 - Added a section named "Making Your Script into a Console Script" in the
319   "Command-Line Pyramid" chapter.
320
9003a8 321 - Removed the "Running Pyramid on Google App Engine" tutorial from the main
CM 322   docs.  It survives on in the Cookbook
323   (http://docs.pylonsproject.org/projects/pyramid_cookbook/en/latest/gae.html).
324   Rationale: it provides the correct info for the Python 2.5 version of GAE
325   only, and this version of Pyramid does not support Python 2.5.
326
9dce50 327 1.3a2 (2011-12-14)
CM 328 ==================
4375cf 329
CM 330 Features
331 --------
332
333 - New API: ``pyramid.view.view_defaults``. If you use a class as a view, you
334   can use the new ``view_defaults`` class decorator on the class to provide
335   defaults to the view configuration information used by every
336   ``@view_config`` decorator that decorates a method of that class.  It also
337   works against view configurations involving a class made imperatively.
338
78d1e4 339 - Added a backwards compatibility knob to ``pcreate`` to emulate ``paster
CM 340   create`` handling for the ``--list-templates`` option.
341
bfd4b3 342 - Changed scaffolding machinery around a bit to make it easier for people who
CM 343   want to have extension scaffolds that can work across Pyramid 1.0.X, 1.1.X,
344   1.2.X and 1.3.X.  See the new "Creating Pyramid Scaffolds" chapter in the
345   narrative documentation for more info.
346
4375cf 347 Documentation
CM 348 -------------
349
350 - Added documentation to "View Configuration" narrative documentation chapter
351   about ``view_defaults`` class decorator.
352
353 - Added API docs for ``view_defaults`` class decorator.
354
bfd4b3 355 - Added an API docs chapter for ``pyramid.scaffolds``.
CM 356
357 - Added a narrative docs chapter named "Creating Pyramid Scaffolds".
358
359 Backwards Incompatibilities
360 ---------------------------
361
362 - The ``template_renderer`` method of ``pyramid.scaffolds.PyramidScaffold``
363   was renamed to ``render_template``.  If you were overriding it, you're a
364   bad person, because it wasn't an API before now.  But we're nice so we're
365   letting you know.
366
5f1cf3 367 1.3a1 (2011-12-09)
CM 368 ==================
0dde01 369
9b9004 370 Features
CM 371 --------
372
a1bf6a 373 - Python 3.2 compatibility.
e04cbb 374
5cf9fc 375 - New ``pyramid.compat`` module and API documentation which provides Python
CM 376   2/3 straddling support for Pyramid add-ons and development environments.
377
63fced 378 - A ``mako.directories`` setting is no longer required to use Mako templates
CM 379   Rationale: Mako template renderers can be specified using an absolute asset
380   spec.  An entire application can be written with such asset specs,
381   requiring no ordered lookup path.
382
8a5db4 383 - ``bpython`` interpreter compatibility in ``pshell``.  See the "Command-Line
CM 384   Pyramid" narrative docs chapter for more information.
385
596495 386 - Added ``get_appsettings`` API function to the ``pyramid.paster`` module.
CM 387   This function returns the settings defined within an ``[app:...]`` section
388   in a PasteDeploy ini file.
389
390 - Added ``setup_logging`` API function to the ``pyramid.paster`` module.
391   This function sets up Python logging according to the logging configuration
392   in a PasteDeploy ini file.
38e4c7 393
35ad08 394 - Configuration conflict reporting is reported in a more understandable way
CM 395   ("Line 11 in file..." vs. a repr of a tuple of similar info).
396
d83b39 397 - A configuration introspection system was added; see the narrative
9d97b6 398   documentation chapter entitled "Pyramid Configuration Introspection" for
7d109d 399   more information.  New APIs: ``pyramid.registry.Introspectable``,
57a0d7 400   ``pyramid.config.Configurator.introspector``,
CM 401   ``pyramid.config.Configurator.introspectable``,
7d109d 402   ``pyramid.registry.Registry.introspector``.
CM 403
404 - Allow extra keyword arguments to be passed to the
405   ``pyramid.config.Configurator.action`` method.
57a0d7 406
56df90 407 - New APIs: ``pyramid.path.AssetResolver`` and
CM 408   ``pyramid.path.DottedNameResolver``.  The former can be used to resolve
409   asset specifications, the latter can be used to resolve dotted names to
410   modules or packages.
411
b54b2c 412 Bug Fixes
CM 413 ---------
414
a4b82c 415 - Make test suite pass on 32-bit systems; closes #286.  closes #306.
b54b2c 416   See also https://github.com/Pylons/pyramid/issues/286
CM 417
206a7f 418 - The ``pryamid.view.view_config`` decorator did not accept a ``match_params``
CM 419   predicate argument.  See https://github.com/Pylons/pyramid/pull/308
420
876fb6 421 - The AuthTktCookieHelper could potentially generate Unicode headers
CM 422   inappropriately when the ``tokens`` argument to remember was used.  See 
423   https://github.com/Pylons/pyramid/pull/314.
424
6e4c2d 425 - The AuthTktAuthenticationPolicy did not use a timing-attack-aware string
CM 426   comparator.  See https://github.com/Pylons/pyramid/pull/320 for more info.
427
9e7c11 428 - The DummySession in ``pyramid.testing`` now generates a new CSRF token if
CM 429   one doesn't yet exist.
430
1c39ae 431 - ``request.static_url`` now generates URL-quoted URLs when fed a ``path``
a5512e 432   argument which contains characters that are unsuitable for URLs.  See
CM 433   https://github.com/Pylons/pyramid/issues/349 for more info.
1c39ae 434
ea814b 435 - Prevent a scaffold rendering from being named ``site`` (conflicts with
CM 436   Python internal site.py).
437
c753fc 438 - Support for using instances as targets of the ``pyramid.wsgi.wsgiapp`` and
CM 439   ``pryramid.wsgi.wsgiapp2`` functions.
440   See https://github.com/Pylons/pyramid/pull/370 for more info.
441
e04cbb 442 Backwards Incompatibilities
CM 443 ---------------------------
444
445 - Pyramid no longer runs on Python 2.5 (which includes the most recent
9ffa36 446   release of Jython and the Python 2.5 version of GAE as of this writing).
9b9004 447
75f05a 448 - The ``paster`` command is no longer the documented way to create projects,
CM 449   start the server, or run debugging commands.  To create projects from
450   scaffolds, ``paster create`` is replaced by the ``pcreate`` console script.
451   To serve up a project, ``paster serve`` is replaced by the ``pserve``
452   console script.  New console scripts named ``pshell``, ``pviews``,
453   ``proutes``, and ``ptweens`` do what their ``paster <commandname>``
454   equivalents used to do.  Rationale: the Paste and PasteScript packages do
455   not run under Python 3.
456
457 - The default WSGI server run as the result of ``pserve`` from newly rendered
458   scaffolding is now the ``wsgiref`` WSGI server instead of the
459   ``paste.httpserver`` server.  Rationale: Rationale: the Paste and
460   PasteScript packages do not run under Python 3.
461
4c6fa2 462 - The ``pshell`` command (see "paster pshell") no longer accepts a
8a5db4 463   ``--disable-ipython`` command-line argument.  Instead, it accepts a ``-p``
CM 464   or ``--python-shell`` argument, which can be any of the values ``python``,
465   ``ipython`` or ``bpython``.
466
e307fc 467 - Removed the ``pyramid.renderers.renderer_from_name`` function.  It has been
CM 468   deprecated since Pyramid 1.0, and was never an API.
469
b74abe 470 - To use ZCML with versions of Pyramid >= 1.3, you will need ``pyramid_zcml``
CM 471   version >= 0.8 and ``zope.configuration`` version >= 3.8.0.  The
472   ``pyramid_zcml`` package version 0.8 is backwards compatible all the way to
473   Pyramid 1.0, so you won't be warned if you have older versions installed
474   and upgrade Pyramid "in-place"; it may simply break instead.
475
0dde01 476 Dependencies
CM 477 ------------
478
8fe021 479 - Pyramid no longer depends on the ``zope.component`` package, except as a
0dde01 480   testing dependency.
CM 481
e04cbb 482 - Pyramid now depends on a zope.interface>=3.8.0, WebOb>=1.2dev,
CM 483   repoze.lru>=0.4, zope.deprecation>=3.5.0, translationstring>=0.4 (for
484   Python 3 compatibility purposes).  It also, as a testing dependency,
485   depends on WebTest>=1.3.1 for the same reason.
1939d0 486
75f05a 487 - Pyramid no longer depends on the Paste or PasteScript packages.
CM 488
5edd54 489 Documentation
CM 490 -------------
491
492 - The SQLAlchemy Wiki tutorial has been updated.  It now uses
493   ``@view_config`` decorators and an explicit database population script.
75f05a 494
14e5fa 495 - Minor updates to the ZODB Wiki tutorial.
CM 496
9d97b6 497 - A narrative documentation chapter named "Extending Pyramid Configuration"
CM 498   was added; it describes how to add a new directive, and how use the
499   ``pyramid.config.Configurator.action`` method within custom directives.  It
500   also describes how to add introspectable objects.
501
8fe021 502 - A narrative documentation chapter named "Pyramid Configuration
CM 503   Introspection" was added.  It describes how to query the introspection
504   system.
505
818f8c 506 Scaffolds
CM 507 ---------
508
509 - Rendered scaffolds have now been changed to be more relocatable (fewer
510   mentions of the package name within files in the package).
511
8a5db4 512 - The ``routesalchemy`` scaffold has been renamed ``alchemy``, replacing the
CM 513   older (traversal-based) ``alchemy`` scaffold (which has been retired).
818f8c 514
8fe021 515 - The ``starter`` scaffold now uses URL dispatch by default.
CM 516