Pylons 0.9.4 Released
It’s with great pleasure that I announce the release of Pylons 0.9.4.
This release has quite a few bug fixes and enhancements, the most since
the 0.9 milestone. It’s also likely one of the last big updates before a
1.0 release candidate (there will be some small changes in 0.9.5 and
possibly a 0.9.6).
First, the most important changes for those upgrading from an existing
Pylons application:
- WARNING: Removed the lang_extract and lang_compile commands. They
used
pygettext.py and its associated msgfmt.py, which lacked the ability to
extract ngettext style function calls and had issues with unicode
strings. The new I18NToolBox project aims to provide this functionality
(and more) via the gettext command line utilities.
http://i18ntoolbox.ufsoft.org
- WARNING: Myghty’s allow_globals config var has changed, causing the
following when running pre-compiled templates: Error(TypeError):
do_run_component() takes exactly 13 non-keyword arguments (5 given)
Delete the compiled Myghty templates directory (specified by cache_dir
or myghty_data_dir in the config file) to resolve the error.
- WARNING: The localization function ‘_’ now uses ugettext (returns
unicode
strings) instead of gettext. To preserve the old behavior, append the
following line to your project’s lib.base and lib.helpers imports: from
pylons.helpers import gettext as _
- WARNING: Removed 0.8.x legacy code and backwards compatibility
functions.
Please note that since some i18n functions have moved, your helpers.py
will need to be updated to import _, and ungettext from pylons.i18n.
Also:
- The XMLRPC Controller got a significant update so that it now provides
the full range of XML-RPC Introspection facilities for your service
methods.
- SQLAlchemy convenience functions have been added to pylons.database
for use with the SessionContext plugin, and to create and retain SA
engines.
- Paste dependency was updated to 1.1.1, Routes to 1.6.1 (important
update for map.resource functionality)
- Pylons special objects (g, c, h, request, session) now available in
interactive debugger without _attach_globals.
- Controller actions can now be generators
- Pylons base WSGI app uses wsgi.org routing_args spec for easier
swapping of URL resolvers.
Full Changelog
- WARNING: Removed the lang_extract and lang_compile commands. They
used pygettext.py and its associated msgfmt.py, which lacked the
ability to extract ngettext style function calls and had issues with
unicode strings. The new I18NToolBox project aims to provide this
functionality (and more) via the gettext command line utilities.
http://i18ntoolbox.ufsoft.org
- All Pylons special objects are now available within paster shell (not
just h and g).
- WARNING: Myghty’s allow_globals config var has changed, causing the
following when running pre-compiled templates:
Error(TypeError): do_run_component() takes exactly 13 non-keyword
arguments (5 given) Delete the compiled Myghty templates directory
(specified by cache_dir or myghty_data_dir in the config file) to
resolve the error.
- Changed i18n functions in templates to use proxy objects so that
using set_lang in a template works right. Fixes #153.
- Now allowing any template plugin to overwrite global PYLONS_VARS
(such as c, g), not just pylonsmyghty.
- Adding SQLAlchemy support to the database.py file. Saves the session
engine to g to maintain it during the apps lifetime. Uses
SessionContext plugin for management of the current session.
- Updated config object so that init_app can take an optional template
engine argument to declare the default template engine.
- Updated Myghty plugin to use extra_vars_func when passed in.
- Fixed Buffet to use extra_vars_func properly.
- Fixed the validate decorator when there are validation errors and
variable_decode=True: now passing the original params to
htmlfill.render instead of the varable_decode’d version. Patch by
FlimFlamMan.
- Added ungettext function for use with pluralized i18n, and the N_
function (gettext_noop) to mark global strings for translation.
Added ungettext, N_ and translator objects to be globals for
templates. Refs #126.
- WARNING: The localization function ‘_’ now uses ugettext (returns
unicode strings) instead of gettext. To preserve the old behavior,
append the following line to your project’s lib.base and lib.helpers
imports:
from pylons.helpers import gettext as _
- Pylons special objects are now available within the interactive
debugger (deprecating _attach_locals).
- Added setup-app run before unit tests run so that webapp has proper
setup tasks handled. Fixes #113.
- Added paste.deploy.CONFIG setup to middleware.py, websetup.py and
testing files in the Pylons project templates. Closes #112.
- Added security policy doc to index for use as Pylons security policy.
Closes #91.
- Improved the repr() of the c context object to show attributes.
- Set environ[‘paste.testing_variables’] whenever that key is
available, not just in testing mode.
- Added capability to have an action be a generator function.
- Added introspection capability to XMLRPCController and signature
checking.
- Updated Controller to use additional arg lookup scheme so that the
source of the function args for _inspect_call can be easily
overridden.
- Updated RPCController, renamed to XMLRPCController. XMLRPCController
now functions properly and will automatically return proper xmlrpc
responses.
- Added test configuration ini file to default template. Closes #114.
- Fixed problem with pylons.database.PackageHub.*get* raising errors
other than AttributeError when the database isn’t configured. Added
new UnconfiguredConnectionError exception, instead of just KeyError
or TypeError (depending on what part of the configuration failed).
- Fixed default g init, since bare object has no init method. Reported
by Ian Bicking.
- Fixed issue with SQLObject method override having wrong name.
Reported by climbus with patch. Fixes #133.
- Moved log function to pylons.helpers and translation functions to
pylons.i18n. using pylons.util purely for Pylons internal util
functions.
- WARNING: Removed 0.8.x legacy code and backwards compatibility
functions.
- PylonsApp now has option to not use Routes middleware, default
resolving uses new wsgi.org routing_args spec.
- Refactored routes dispatching to use new Routes middleware.
- Fixed paster shell command to properly acquire mapper object without
relying on the template being configured in a specific manner.
- Added keyword argument pool_connection to
pylons.database.PackageHub; if set to false then SQLObject
connections won’t use pooled database connections (a new connection
will be opened for each request).
Many thanks to Phil Jenvey, Ian Bicking, James Gardner, and all the
other active members of the Pylons community!
Cheers,
Ben