I'm thrilled to announce a new release of Pylons, with one of the largest ticket fix counts of any Pylons release thus far. This release and its associated updates have only been possible with the growing and active Pylons community. A big shout-out to the many contributions by Phil Jenvey, Ian Bicking, James Gardner, Mike Orr, Shannon -jj Behrens, David Smith, Graham Higgins, and Wyatt Baldwin for their work on Pylons, Routes the mail list, and the documentation. Many thanks to the numerous others that have reported bugs and helped out on IRC and the mail list over the past few months.
Also, as Pylons uses so many contributed projects, there's work going on to better integrate documentation across the smaller projects that make up the whole. A first stab at this is being taken with the Python Web Documentation effort which we realize not every single 'python web' project will be using; but its our hope that smaller WSGI based web components will put their docs up so they can all be utilized in a single place. The new documentation wiki: http://docs.pythonweb.org/ And onto update news for 0.9.5! There's big change logs for both Pylons and Routes, with some important updates in WebHelpers and Paste as well. First, the big improvements in 0.9.5, Unicode and i18n: - Routes now translates utf-8 characters during both URL generation, and URL recognition, many thanks to David Smith for numerous patches - The Request now has an option so that all GET/POST arguments come in as unicode, with the decoding you prefer - i18n now uses code contributed from Aquarium by Shannon -jj Behrens for translation fall-backs and has browser language matching code - Optional lazy translation options contributed by David Smith - Routes implicit defaults (action=index, id=None) can be turned off per route with _explicit=True - Routes memory can also be disabled by setting the mapper to explicit=True, which will also disable the implicit defaults Next, some backward compatibility changes: Webhelpers: * WARNING: paginate now takes arguments intended for the collection object as query_args. This could affect backwards compatibility. This fixes a common issue that non-keyword arguments passed into paginate get eaten by paginate's keyword arguments instead of being in *args to go on to the collection. * WARNING: Due to a typo, the Text helper highlight function no longer highlights text with the CSS class name 'hilight' by default: it now uses the CSS class name 'highlight' instead. The function's 'hilighter' keyword argument has also been deprecated, use 'highlighter' instead. Pylons: * WARNING: Pylons now requires the decorator module: it no longer packages it as pylons.decorator. Code relying on the pylons.decorator.decorator function will trigger a deprecation warning and should be changed to use decorator.decorator. * WARNING: pylons.h was deprecated for using projects' lib.helpers module directly in 0.9.3. pylons.h is now formally deprecated (emits DeprecationWarnings). Projects still accessing pylons.h must change the following import: from pylons import h to: import MYPROJ.lib.helpers as h And finally, the full changelog of the various parts that make Pylons what it is: PYLONS * Fixed paster shell breaking for projects where the base package was not the first package listed in top_level.txt. Patch from Alberto Valverde. Fixes #229. * Fixed doc references to config['app_conf']. Fixes #116. * Changed `get_engine_conf` to properly evaluate sqlalchemy echo statement when its 'debug'. Fixes #226. * make_session and create_engine now accept keyword arguments to pass to SQLAlchemy's create_engine. * make_session now accepts the keyword argument 'session_kwargs' to pass to SQLAlchemy's create_session. * Fixed _inspect_call to call function with keyword arguments instead of list args. Corrects issue with action defaults that caused the value for the latter args to be in the wrong spots. Spotted by Topher. Fixes #223. * Added the allow_none option (passed to xmlrpc.dumps) to XMLRPCController. Suggested by Jaroslaw Zabiello. * Updated XMLRPC Controller with patch for name lookup and additional unit tests for the patch. Fixes #216. * Updated docs for validate decorator to more clearly illustrate what the post_only args apply to. Fixes #221. * Added ability to return strings in the WSGIController. Fixes #218. * Added lazy i18n translation functions. Patch from David Smith. Fixes #181. * Added fix for XMLRPCController system.methodHelp function and unit test. Patch and unit test submitted by Graham Higgins. * Fixed bug in validate decorator with new UnicodeMultiDict response content not properly retaining form content as unicode for formencode's htmlfill. * Fixed bug in XMLRPC Controller with xmlrpclib Faults not being properly transformed into a WSGI response within the controller. * WARNING: Pylons now requires the decorator module: it no longer packages it as pylons.decorator. Code relying on the pylons.decorator.decorator function will trigger a deprecation warning and should be changed to use decorator.decorator. * WARNING: pylons.h was deprecated for using projects' lib.helpers module directly in 0.9.3. pylons.h is now formally deprecated (emits DeprecationWarnings). Projects still accessing pylons.h must change the following import: from pylons import h to: import MYPROJ.lib.helpers as h * pylons.jsonify and pylons.Controller references have been deprecated (they are misplaced references). They continue to be available at pylons.decorators.jsonify and pylons.controllers.Controller, as they always have been. * Updated templating Buffet to recognize format parameter and properly pass it to the template engine. * Updated LICENSE for new year and to indicate license covering templates generated. Fixes #188. * Interactive debugger now supports Mako. After r1780 if you are using a custom theme you will need to change '%(myghty_data)s' to '%(template_data)s' in your template. If you are using JavaScript the tab id is now "template_data". * Fixed bug in WSGIController with private function attempts not returning a valid WSGI response. * Added full unit test coverage of cache decorator. * Adding messages binary file, enabling i18n unit tests. Updating pylons.i18n to import LanguageError. Fixes #193. * Adding i18n tests, not active yet as they're waiting on a binary file from a patch. Refs #193. * Updated tests so that they now work with nose, removing py.test requirement. * Switching config setup to load keys into main config dict with app_conf and global_conf keys set for any code looking for those keys. Fixes #116. * PylonsInstaller is now the default paste.app_install entry point for new projects: this makes Cheetah no longer required for the paster make-config command. (Thanks Alexander Schremmer, Ian Bicking) * Added custom redirect_to function in pylons.helpers that will take an optional _response arg to pull headers and cookies out for preservation during a redirect. Fixes #136. * Changed config.Config.__init__ to take all options as keyword args so unused args can be skipped. Fixes #162. * The request object can now automatically decode GET/POST/params vars to unicode, when its charset attribute is set. * Added a new request_settings keyword arg to Config's constructor. Allows setting the default charset and errors values of of the request object. * Deprecated Config constructor's default_charset keyword arg. Use Config's response_settings keyword arg instead. * Fixed paster controller to test for lib.base and only add that import statement when its present. This fixes the controller template when used with minimal Pylons project templates. Fixes #140 and fixes #139. * Fixed the paster shell error: KeyError: 'pylons.routes_dict' when calling app.get and app.post. * Fixed paster shell not working on projects with names containing hyphens. * Fixed the config directive 'sqlalchemy.echo' set to False being interpreted as True. Patch by Alex Conrad. * Fixed paster shell not restoring CONFIG['global_conf']. ROUTES * Fixed matching so that an attempt to match an empty path raises a RouteException. Fixes #44. * Added ability to use characters in URL's such as '-' and '_' in map.resource. Patch by Wyatt Baldwin. Fixes #45. * Updated Mapper.resource handling with name_prefix and path_prefix checking to specify defaults. Also ensures that should either of them be set, they override the prefixes should parent_resource be specified. Patch by Wyatt Baldwin. Fixes #42. * Added utf-8 decoding of incoming path arguments, with fallback to ignoring them in the very rare cases a malformed request URL is sent. Patch from David Smith. * Fixed treatment of '#' character as something that can be left off and used in route paths. Found by Mike Orr. * Added ability to specify parent resource to map.resource command. Patch from Wyatt Baldwin. * Fixed formatted route issue with map.resource when additional collection methods are specified. Added unit tests to verify the collection methods work properly. * Updated URL parsing to properly use HTTP_HOST for hostname + port info before falling back to SERVER_PORT and SERVER_NAME. Fixes #43. * Added member_name and collection_name setting to Route object when made with map.resource. * Updated routes.middleware to make the Routes matched accessible as environ['routes.route']. * Updating mapper object to use thread local for request data (such as environ) and middleware now deletes environ references at the end of the request. * Added explicit option to Routes and Mapper. Routes _explicit setting will prevent the Route defaults from being implicitly set, while setting Mapper to explicit will prevent Route implicit defaults and stop url_for from using Route memory. Fixes #38. * Updated config object so that the route is attached if possible. * Adding standard logging usage with debug messages. * Added additional test for normal '.' match and fixed new special matching to match it properly. Thanks David Smith. * Fixed hanging special char issue with 'special' URL chars at the end of a URL that are missing the variable afterwards. * Changed Routes generation and recognition to handle other 'special' URL chars , . and ; as if they were /. This lets them be optionally left out of the resulting generated URL. Feature requested by David Smith. * Fixed lookahead assertion in regexp builder to properly handle two grouped patterns in a row. * Applied patch to generation and matching to handle Unicode characters properly. Reported with patch by David Smith. WEBHELPERS * WARNING: paginate now takes arguments intended for the collection object as query_args. This could affect backwards compatibility. This fixes a common issue that non-keyword arguments passed into paginate get eaten by paginate's keyword arguments instead of being in *args to go on to the collection. * Added environ checking with Routes so that page will be automatically pulled out of the query string, or from the Routes match dict if available. * Added ability for paginate to check for objects that had SQLAlchemy's assign_mapper applied to them. * Added better range checking to paginator to require a positive value that is less than the total amount of pages available for a page. * WARNING: Due to a typo, the Text helper highlight function no longer highlights text with the CSS class name 'hilight' by default: it now uses the CSS class name 'highlight' instead. The function's 'hilighter' keyword argument has also been deprecated, use 'highlighter' instead. * Fixed the broken markdown function. * Upgraded markdown from 1.5 to 1.6a. * Sync'd Prototype helper to 6057. * Sync'd Urls helper to 6070. * Sync'd Text helper to 6096. * Sync'd Date helper to 6080. * Sync'd Tags helper to 5857. * Sync'd Asset tag helper to 6057. * Sync'd Rails Number helper to 6045. * Updated Ajax commands to internally use 'with_' to avoid name conflicts with Python 2.5 and beyond. Reported by anilj. Fixes #190. * Applied patch from David Smith to decode URL parts as Routes does. Fixes #186. * Changed pagination to give better response if its passed an invalid object. Patch from Christoph Haas. * Fixed scriptaculous helper docs example. Fixes #178. * Updated scriptaculous/prototype to Prototype 1.5.0 and Scriptaculous 1.7.0. * Updated scriptaculous javascripts to 1.6.5. Fixes #155. * Updated remote_function doc-string to more clearly indicate the arguments it can receive. * Synced Rails Javascript helper to 5245 (escape_javascript now escaping backslashes and allow passing html_options to javascript_tag). PASTE * In ``paste.httpserver`` remove the reverse DNS lookup to set ``REMOTE_HOST`` * In ``paste.fileapp``, if the client sends both If-None-Match and If-Modified-Since, prefer If-None-Match. Make ETags include the size as well as last modified timestamp. Make it possible to override how mimetypes are guessed. * ``HTTPException`` objects now have a ``exc.response(environ)`` method that returns a ``WSGIResponse`` object. * ``egg:Paste#watch_threads`` will show tracebacks of each thread under Python 2.5. * Made ``paste.util.template`` trim whitespace around statements that are on their own line. * ``paste.fileapp.DataApp`` now accepts ``allowed_headers=[...]`` to specify the allowed headers. By default only ``GET`` and ``HEAD`` are allowed. * Added ``paste.util.import_string.try_import_module``, which imports modules and catches ``ImportError``, but only if it's an error importing the specific module, not an uncaught ``ImportError`` in the module being imported. PASTESCRIPT 1.3.3 ----- * Fixed problem with ``paster serve`` on Windows. Also on Windows, fixed issue with executables with spaces in their names (this case requires the ``win32all`` module). * You can use ``+dot+`` in your project template filenames, specifically so that you can use leading dots in the filename. Usually leading dots cause the file to be ignored. So if you want to have new projects contain a ``.cvsignore`` file, you can put a ``+dot+cvsignore`` file in your template. * Relatedly, ``+plus+`` has been added so you can include pluses. 1.3.2 ----- * ``paster`` was largely broken under Windows; fixed. 1.3.1 ----- * Fix related to Python 2.5 (when there are errors creating files, you could get infinite recursion under Python 2.5). * Use ``subprocess`` module in ``paster serve`` command. Added ``--monitor`` option which will restart the server if it exits. * The ``exe`` command now does % substitution in keys (e.g., ``pid_file=%(here)s/paste.pid``). * Some import problems with Cheetah should be improved. 1.3 --- * Fixed an exception being raised when shutting down flup servers using sockets. * Fixed the CherryPy 3 WSGI server entry point's handling of SIGHUP and SIGTERM. * The CherryPy wsgiserver is now available at ``paste.script.wsgiserver`` (no longer requiring CherryPy to be installed). * Added entry point for twisted server. * Made ``paste.script.pluginlib:egg_info_dir`` work with packages that put the ``Package.egg-info/`` directory in a subdirectory (typically ``src/``). * Remove Cheetah requirement. Packages using Cheetah templates should require Cheetah themselves. If you are using ``paster make-config`` and you *don't* want to use Cheetah, you must add ``use_cheetah = False`` to your ``Installer`` subclass (it defaults to true for backward compatibility). * Make scripts work when there is no ``setup.py`` (if you aren't making a Python/setuptools package). * When using ``paste.script.copydir.copy_dir`` (as with most ``paster create`` templates), you can raise ``SkipTemplate`` (or call the ``skip_template()`` function) which will cause the template to be skipped. You can use this to conditionally include files. * When using ``paster serve c:/...``, it should no longer confuse ``c:`` with a scheme (such as ``config:`` or ``egg:``). * More careful about catching import errors in ``websetup``, so if you have a bug in your ``app.websetup`` module it won't swallow it. Cheers, Ben _______________________________________________ Web-SIG mailing list [EMAIL PROTECTED] Web SIG: http://www.python.org/sigs/web-sig Unsubscribe: http://mail.python.org/mailman/options/web-sig/archive%40mail-archive.com