Log message for revision 110188: Merge c105589 from 2.12 branch, adding IPubBeforeAbort event
Changed: U Zope/trunk/doc/CHANGES.rst U Zope/trunk/src/ZPublisher/Publish.py U Zope/trunk/src/ZPublisher/interfaces.py U Zope/trunk/src/ZPublisher/pubevents.py U Zope/trunk/src/ZPublisher/tests/testpubevents.py -=- Modified: Zope/trunk/doc/CHANGES.rst =================================================================== --- Zope/trunk/doc/CHANGES.rst 2010-03-26 13:14:46 UTC (rev 110187) +++ Zope/trunk/doc/CHANGES.rst 2010-03-26 13:25:09 UTC (rev 110188) @@ -2,92 +2,115 @@ ========= This file contains change information for the current Zope release. -Change information for previous versions of Zope can be found at -http://docs.zope.org/zope2/releases/. +Change information for previous versions of Zope can be found in the +file HISTORY.txt. -Trunk (unreleased) ------------------- +Zope 2.12.2 (unreleased) +------------------------ -Restructuring -+++++++++++++ +Features Added +++++++++++++++ -- Finished the move of five.formlib to an extra package and removed it from - Zope 2 itself. Upgrade notes have been added to the news section of the - release notes. +- Added IPubBeforeAbort event to mirror IPubBeforeCommit in failure scenarios. + This event is fired just before IPubFailure, but, crucially, while the + transaction is still open. -- Moved Products.Sessions APIs from ``SessionInterfaces`` to ``interfaces``, - leaving behind the old module / names for backward compatibility. +- Include bytes limited cache size in the cache parameters ZMI screen. -- Moved ``cmf.*`` permissions into Products.CMFCore. +- Officially supporting Python 2.6 only (with inofficial support for + Python 2.5) but dropping any support and responsibility for + Python 2.4. -- Moved general OFS related ZCML directives from Products.Five into the OFS - package itself. +Bugs Fixed +++++++++++ -- Ported the lazy expression into zope.tales and require a new version of it. +- Avoid possible errors on test tear-down in Products.Five.fiveconfigure's + cleanUp() function if Products.meta_types has not been set -- Updated Five documentation to clarify its role in regard to Zope packages. +Zope 2.12.1 (2009/11/02) +------------------------ -- Removed the deprecated ``five:containerEvents`` directive, which had been - a no-op for quite a while. +Features Added +++++++++++++++ -- Removed Products.Five.fivedirectives.IBridgeDirective - a leftover from the - Interface to zope.interface bridging code. +- Updated packages: -- Marked the ``<five:implements />`` as officially deprecated. The standard - ``<class />`` directive allows the same. + - ZODB3 = 3.9.3 (fixes bug where blob conflict errors hung commits) + - Acquisition = 2.12.4 (fixes problems with iteration support) + - setuptools = 0.6c11 -- Reuse IInclude from zope.configuration.xmlconfig. +- LP #411732: Silence security declaration warnings for context and request + on views protected by an interface. -- Reuse IMenuItemType from zope.browsermenu. +- Assorted documentation cleanups, including a script to rebuild HTML + documentation on Windows. -- Moved TaintedString from ZPublisher to Shared. - This resolves a circular import issue. +- Refactored Windows Service support to not need or use zopeservice.py + in instances. This makes buildout-based instances work on Windows. -- Moved zope.formlib / zope.app.form integration into a separate package - called five.formlib. +Bugs Fixed +++++++++++ -- We no longer depend on the ``zope-functional-testing`` extra of - zope.testbrowser. +- LP #440490: zopectl fg|adduser|run|debug now work on Windows. -- Removed the dependency on zope.app.publication in favor of new versions of - zope.publisher and zope.traversing. +- LP #443005: zopectl stop works once more on Windows. -- Requiring Python 2.6 officially +- LP #453723: zopectl start works again on non-Windows platforms. -- Changed startup server tests in Zope2 to use a randomized port number, to - allow the nightly buildbot to run the tests at the same time for multiple - configurations without the port being already in use. +Zope 2.12.0 final (2009/10/01) +------------------------------- -- Cloned ``ZopeVocabularyRegistry`` from ``zope.app.schema``, and added - sane registration of it during initialization of Five. +Features Added +++++++++++++++ -- Removed experimental support for configuring the Twisted HTTP server - as an alternative to ``ZServer``. +- Updated packages: -- Moved ``Products/Five/security.py`` and security related ZCML configuration - into the AccessControl package. + - ZODB3 = 3.9.0 -- Moved ``Products/Five/traversing.zcml`` directly into the configure.zcml. +- Backported clone of ``ZopeVocabularyRegistry`` from ``zope.app.schema``, and + sane registration of it during initialization of Five product. -- Moved zope.security-style permission registrations from Products.Five into - the AccessControl package. +Bugs Fixed +++++++++++ -- Moved ``Products/Five/i18n.zcml`` into the ZPublisher package. +- Backported removal of experimental support for configuring the Twisted HTTP + server as an alternative to ``ZServer``. -- Moved ``Products/Five/publisher.zcml`` into the ZPublisher package. +- Backported fix for timezone issues in date index tests from trunk. -- Moved ``Products/Five/event.zcml`` into the OFS package. +- LP #414757 (backported from Zope trunk): don't emit a IEndRequestEvent when + clearing a cloned request. -- Removed no longer maintained ``configure, make, make install`` related - installation files. Zope2 can only be installed via its setup.py. +Zope 2.12.0 c1 (2009/09/04) +--------------------------- -- Centralize interfaces defined in Products.ZCTextIndex, leaving BBB - imports behind in old locations. +Features Added +++++++++++++++ -- Integrated zLOG package back into this distribution. +- Updated packages: -- Updated documentation to new version number. + - Acquisition = 2.12.3 + - pytz = 2009l + - tempstorage = 2.11.2 + - transaction = 1.0.0 + - ZODB3 = 3.9.0c3 + - zope.app.basicskin = 3.4.1 + - zope.app.form = 3.8.1 + - zope.component = 3.7.1 + - zope.copypastemove = 3.5.2 + - zope.i18n = 3.7.1 + - zope.security = 3.7.1 +Bugs Fixed +++++++++++ + +- Made the version information show up again, based on pkg_resources + distribution information instead of the no longer existing version.txt. + + +Zope 2.12.0 b4 (2008/08/06) +--------------------------------- + Features Added ++++++++++++++ @@ -98,84 +121,539 @@ - Updated packages: - - Acquisition = 2.13.1 - - ExtensionClass = 2.13.0 - - Persistence = 2.13.0 - - zope.annotation = 3.5.0 - - zope.app.form = 3.12.1 - - zope.broken = 3.6.0 - - zope.browsermenu = 3.9.0 - - zope.browserpage = 3.11.0 - - zope.browserresource = 3.10.2 - - zope.component = 3.8.0 - - zope.configuration = 3.7.0 - - zope.container = 3.11.0 - - zope.contentprovider = 3.6.1 - - zope.contenttype = 3.5.0 - - zope.copypastemove = 3.6.0 - - zope.dublincore = 3.6.0 - - zope.filerepresentation = 3.6.0 - - zope.formlib = 3.10.0 - - zope.i18nmessageid = 3.5.0 - - zope.location = 3.9.0 - - zope.lifecycleevent = 3.6.0 - - zope.ptresource = 3.9.0 - - zope.publisher = 3.12.0 - - zope.schema = 3.6.0 - - zope.securitypolicy = 3.6.1 - - zope.sendmail = 3.6.1 - - zope.site = 3.9.0 - - zope.testbrowser = 3.7.0 - - zope.testing = 3.8.3 - - zope.traversing = 3.12.0 - - zope.viewlet = 3.7.0 + - ZODB3 = 3.9.0b5 + - zope.testing = 3.7.7 -- ZCTextIndex query parser treats fullwidth space characters defined - in Unicode as valid white space. +- scripts: Added 'runzope' and 'zopectl' as entry points for instance scripts. Bugs Fixed ++++++++++ -- LP #195761: fixed ZMI XML export / import and restored it to the UI. +- LP #418454: FTP server did not work with Python 2.6.X -- LP #491224: proper escaping of rendered error message +- PythonScript: Fixed small Python 2.6 compatibility issue. -- LP #246983: Enabled unicode conflict resolution on variables inside "string:" - expressions in TALES. +- mkzopeinstance: Made instance scripts more suitable for egg based installs. + If you are using a customized skel, it has to be updated. -- Also look for ZEXP imports within the clienthome directory. This - provides a place to put imports that won't be clobbered by buildout - in a buildout-based Zope instance. +- Five: Fixed the permissions creation feature added in Zope 2.12.0a2. -- LP #143444: add labels to checkboxes / radio buttons on import / export - form. +- LP #399633: fixed interpreter paths -- LP #496961: Remove all mention of ``standard_html_header`` and - ``standard_html_footer`` from default DTML content. +- MailHost manage form no longer interprets the value None as a string + in user and password fields. -- LP #491249: fix tabindex on ZRDB connection test form. -- LP #490514: preserve tainting when calling into DTML from ZPT. +Zope 2.12.0 b3 (2009/07/15) +--------------------------- -- LP #414757: Don't send a request closed event from a cloned request. +Features Added +++++++++++++++ -- LP #418454: FTP server did not work with Python 2.6.X +- Updated packages: -- Fixed issue with sending text containing ':' from MailHost. + - ZConfig = 2.7.1 + - ZODB = 3.9.0b2 + - pytz = 2009j + - zope.app.component = 3.8.3 + - zope.app.pagetemplate = 3.7.1 + - zope.app.publisher = 3.8.3 + - zope.app.zcmlfiles = 3.5.5 + - zope.contenttype = 3.4.2 + - zope.dublincore = 3.4.3 + - zope.index = 3.5.2 + - zope.interface = 3.5.2 + - zope.testing = 3.7.6 + - zope.traversing = 3.7.1 -- MailHost will now ensure the headers it sets are 7bit. +- Added support to indexing datetime values to the PluginIndexes + DateRangeIndex. The DateIndex already had this feature. -- MailHost no longer generates garbage when given unicode input. +Restructuring ++++++++++++++ -- MailHost manage form no longer interprets the value None as a string - in user and password fields. +- PluginIndexes: Removed deprecated TextIndex. -- Made C extensions work for 64-bit Python 2.5.x / 2.6.x. +- HelpSys now uses ZCTextIndex instead of the deprecated TextIndex. Please + update your Zope databases by deleting the Product registrations in the + Control Panel and restarting Zope. -- Unfutzed test failures due to use of naive timezones with ``datetime`` - instances. +Bugs Fixed +++++++++++ - LP #397861: exporting $PYTHON in generated 'zopectl' for fixing import issue with "bin/zopectl adduser" -- LP #399633: fixed interpreter paths +- PluginIndexes: Added 'indexSize' to IPluggableIndex. + +- HelpSys: ProductHelp no longer depends on PluginIndexes initialization. + +- App.Product: ProductHelp was broken since Zope 2.12.0a1. + +- ObjectManagerNameChooser now also works with BTreeFolder2. + +- Correctly handle exceptions in the ZPublisherExceptionHook. + +Zope 2.12.0 b2 (2009/05/27) +--------------------------- + +Restructuring ++++++++++++++ + +- Removed all use of ``zope.app.pagetemplate`` by cloning / simplifying + client code. + +- Use ``zope.pagetemplate.engine`` instead of ``zope.app.pagetemplate.engine``. + (update to versions 3.5.0 and 3.7.0, respectively, along with version 3.8.1 + of ``zope.app.publisher``). + +- Use ``IBrowserView`` interface from ``zope.browser.interfaces``, rather than + ``zope.publisher.interfaces.browser``. + +- Use ``IAdding`` interface from ``zope.browser.interfaces``, rather than + ``zope.app.container``. + +- No longer depend on ``zope.app.appsetup``; use the event implementations + from ``zope.processlifetime`` instead. + +Features Added +++++++++++++++ + +- zExceptions.convertExceptionType: new API, breaking out conversion of + exception names to exception types from 'upgradeException'. + +- Launchpad #374719: introducing new ZPublisher events: + PubStart, PubSuccess, PubFailure, PubAfterTraversal and PubBeforeCommit. + +- Testing.ZopeTestCase: Include a copy of ZODB.tests.warnhook to silence + a DeprecationWarning under Python 2.6. + +- Updated packages: + + * python-gettext 1.0 + * pytz 2009g + * zope.app.applicationcontrol = 3.5.0 + * zope.app.appsetup 3.11 + * zope.app.component 3.8.2 + * zope.app.container 3.8.0 + * zope.app.form 3.8.0 + * zope.app.http 3.6.0 + * zope.app.interface 3.5.0 + * zope.app.pagetemplate 3.6.0 + * zope.app.publication 3.7.0 + * zope.app.publisher 3.8.0 + * zope.browser 1.2 + * zope.component 3.7.0 + * zope.componentvocabulary 1.0 + * zope.container 3.8.2 + * zope.formlib 3.6.0 + * zope.lifecycleevent 3.5.2 + * zope.location 3.5.4 + * zope.processlifetime 1.0 + * zope.publisher 3.8.0 + * zope.security 3.7.0 + * zope.testing 3.7.4 + * zope.traversing 3.7.0 + +Bugs Fixed +++++++++++ + +- Launchpad #374729: Encoding cookie values to avoid issues with + firewalls and security proxies. + +- Launchpad #373583: ZODBMountPoint - fixed broken mount support and + extended the test suite. + +- Launchpad #373621: catching and logging exceptions that could cause + leaking of worker threads. + +- Launchpad #373577: setting up standard logging earlier within the startup + phase for improving the analysis of startup errors. + +- Launchpad #373601: abort transaction before connection close in order to + prevent connection leaks in case of persistent changes after the main + transaction is closed. + +- Fix BBB regression which prevented setting browser ID cookies from + browser ID managers created before the ``HTTPOnly`` feature landed. + https://bugs.launchpad.net/bugs/374816 + +- RESPONSE.handle_errors was wrongly set (to debug, should have been + ``not debug``). Also, the check for exception constructor arguments + didn't account for exceptions that didn't override the ``__init__`` + (which are most of them). The combination of those two problems + caused the ``standard_error_message`` not to be called. Fixes + https://bugs.launchpad.net/zope2/+bug/372632 . + +- DocumentTemplate.DT_Raise: use new 'zExceptions.convertExceptionType' + API to allow raising non-builtin exceptions. + Fixes https://bugs.launchpad.net/zope2/+bug/372629 , which prevented + viewing the "Try" tab of a script with no parameters. + +Zope 2.12.0b1 (2009/05/06) +-------------------------- + +Restructuring ++++++++++++++ + +- No longer depend on ``zope.app.locales``. Zope2 uses almost none of the + translations provided in the package and is not required for most projects. + The decision to include locales is left to the application developer now. + +- Removed the dependency on ``zope.app.testing`` in favor of providing a more + minimal placeless setup as part of ZopeTestCase for our own tests. + +- updated to ZODB 3.9.0b1 + +Features Added +++++++++++++++ +- zExceptions.convertExceptionType: new API, breaking out conversion of + exception names to exception types from ``upgradeException``. + +- Extended BrowserIdManager to expose the ``HTTPOnly`` attribute for its + cookie. Also via https://bugs.launchpad.net/zope2/+bug/367393 . + +- Added support for an optional ``HTTPOnly`` attribute of cookies (see + http://www.owasp.org/index.php/HTTPOnly). Patch from Stephan Hofmockel, + via https://bugs.launchpad.net/zope2/+bug/367393 . + +Bugs Fixed +++++++++++ + +- ZPublisher response.setBody: don't append Accept-Encoding to Vary header if + it is already present - this can make cache configuration difficult. + +2.12.0a4 (2009-04-24) +--------------------- + +Bugs Fixed +++++++++++ + +- fixed versions.cfg in order to support zope.z2release for + creating a proper index structure + +2.12.0a3 (2009-04-19) +--------------------- + +The generated tarball for the 2.12.0a2 source release was incomplete, due to +a setuptools and Subversion 1.6 incompatibility. + +Restructuring ++++++++++++++ + +- Added automatic inline migration for databases created with older Zope + versions. The ``Versions`` screen from the ``Control_Panel`` is now + automatically removed on Zope startup. + +- Removed more unused code of the versions support feature including the + Globals.VersionNameName constant. + +2.12.0a2 (2009-04-19) +--------------------- + +Restructuring ++++++++++++++ + +- If the <permission /> ZCML directive is used to declare a permission that + does not exist, the permission will now be created automatically, defaulting + to being granted to the Manager role only. This means it is possible to + create new permissions using ZCML only. The permission will Permissions that + already exist will not be changed. + +- Using <require set_schema="..." /> or <require set_attributes="..." /> in + the <class /> directive now emits a warning rather than an error. The + concept of protecting attribute 'set' does not exist in Zope 2, but it + should be possible to re-use packages that do declare such protection. + +- Updated to Acquisition 2.12.1. + +- Updated to DateTime 2.12.0. + +- Updated to ZODB 3.9.0a12. + +- Removed the ``getPackages`` wrapper from setup.py which would force all + versions to an exact requirement. This made it impossible to require + newer versions of the dependencies. This kind of KGS information needs + to be expressed in a different way. + +- removed ``extras_require`` section from setup.py (this might possibly + break legacy code). + +Bugs Fixed +++++++++++ + +- Launchpad #348223: optimize catalog query by breaking out early from loop + over indexes if the result set is already empty. + +- Launchpad #344098: in ``skel/etc/zope.conf.ing``, replaced commented-out + ``read-only-database`` option, which is deprecated, with pointers to the + appropos sections of ZODB's ``component.xml``. Updated the description + of the ``zserver-read-only-mode`` directive to indicate its correct + semantics (suppressing log / pid / lock files). Added deprecation to the + ``read-only-database`` option, which has had no effect since Zope 2.6. + +- "Permission tab": correct wrong form parameter for + the user-permission report + +- PageTemplates: Made PreferredCharsetResolver work with new kinds of contexts + that are not acquisition wrapped. + +- Object managers should evaluate to True in a boolean test. + +2.12.0a1 (2009-02-26) +--------------------- + +Restructuring ++++++++++++++ + +- Switched Products.PageTemplates to directly use zope.i18n.translate and + removed the GlobalTranslationService hook. + +- Removed bridging code from Product.Five for PlacelessTranslationService + and Localizer. Neither of the two is actually using this anymore. + +- Removed the specification of ``SOFTWARE_HOME`` and ``ZOPE_HOME`` from the + standard instance scripts. + [hannosch] + +- Made the specification of ``SOFTWARE_HOME`` and ``ZOPE_HOME`` optional. In + addition ``INSTANCE_HOME`` is no longer required to run the tests of a + source checkout of Zope. + +- Removed the ``test`` command from zopectl. The test.py script it was relying + on does no longer exist. + +- Updated to ZODB 3.9.0a11. ZODB-level version support has been + removed and ZopeUndo now is part of Zope2. + +- The Zope2 SVN trunk is now a buildout pulling in all dependencies as + actual released packages and not SVN externals anymore. + +- Make use of the new zope.container and zope.site packages. + +- Updated to newer versions of zope packages. Removed long deprecated + layer and skin ZCML directives. + +- Disabled the XML export on the UI level - the export functionality + however is still available on the Python level. + +- No longer show the Help! links in the ZMI, if there is no help + available. The help system depends on the product registry. + +- Updated the quick start page and simplified the standard content. + The default index_html is now a page template. + +- Removed deprecated Draft and Version support from Products.OFSP. + Also removed version handling from the control panel. Versions are + no longer supported on the ZODB level. + +- Removed left-overs of the deprecated persistent product distribution + mechanism. + +- The persistent product registry is not required for starting Zope + anymore. ``enable-product-installation`` can be set to off if you don't + rely on the functionality provided by the registry. + +- ZClasses have been deprecated for two major releases. They have been + removed in this version of Zope. + +- Avoid deprecation warnings for the md5 and sha modules in Python 2.6 + by adding conditional imports for the hashlib module. + +- Replaced imports from the 'Globals' module throughout the + tree with imports from the actual modules; the 'Globals' module + was always intended to be an area for shared data, rather than + a "facade" for imports. Added zope.deferred.deprecation entries + to 'Globals' for all symbols / modules previously imported directly. + +- Protect against non-existing zope.conf path and products directories. + This makes it possible to run a Zope instance without a Products or + lib/python directory. + +- Moved exception MountedStorageError from ZODB.POSExceptions + to Products.TemporaryFolder.mount (now its only client). + +- Moved Zope2-specific module, ZODB/Mount.py, to + Products/TemporaryFolder/mount.py (its only client is + Products/TemporaryFolder/TemporaryFolder.py). + +- Removed spurious import-time dependencies from + Products/ZODBMountPoint/MountedObject.py. + +- Removed Examples.zexp from the skeleton. The TTW shopping cart isn't + any good example of Zope usage anymore. + +- Removed deprecated ZTUtil.Iterator module + +- Removed deprecated StructuredText module + +- Removed deprecated TAL module + +- Removed deprecated modules from Products.PageTemplates. + +- Removed deprecated ZCML directives from Five including the whole + Five.site subpackage. + +Features added +++++++++++++++ + +- OFS.ObjectManager now fully implements the zope.container.IContainer + interface. For the last Zope2 releases it already claimed to implement the + interface, but didn't actually full-fill the interface contract. This means + you can start using more commonly used Python idioms to access objects + inside object managers. Complete dictionary-like access and container + methods including iteration are now supported. For each class derived from + ObjectManager you can use for any instance om: ``om.keys()`` instead of + ``om.objectIds()``, ``om.values()`` instead of ``om.objectValues()``, but + also ``om.items()``, ``ob.get('id')``, ``ob['id']``, ``'id' in om``, + ``iter(om)``, ``len(om)``, ``om['id'] = object()`` instead of + ``om._setObject('id', object())`` and ``del ob['id']``. Should contained + items of the object manager have ids equal to any of the new method names, + the objects will override the method, as expected in Acquisition enabled + types. Adding new objects into object managers by those new names will no + longer work, though. The added methods call the already existing methods + internally, so if a derived type overwrote those, the new interface will + provide the same functionality. + +- Acquisition has been made aware of ``__parent__`` pointers. This allows + direct access to many Zope 3 classes without the need to mixin + Acquisition base classes for the security to work. + +- MailHost: now uses zope.sendmail for delivering the mail. With this + change MailHost integrates with the Zope transaction system (avoids + sending dupe emails in case of conflict errors). In addition + MailHost now provides support for asynchronous mail delivery. The + 'Use queue' configuration option will create a mail queue on the + filesystem (under 'Queue directory') and start a queue thread that + checks the queue every three seconds. This decouples the sending of + mail from its delivery. In addition MailHosts now supports + encrypted connections through TLS/SSL. + +- SiteErrorLog now includes the entry id in the information copied to + the event log. This allowes you to correlate a user error report with + the event log after a restart, or let's you find the REQUEST + information in the SiteErrorLog when looking at a traceback in the + event log. + +Bugs Fixed +++++++++++ + +- Launchpad #332168: Connection.py: do not expose DB connection strings + through exceptions + +- Specified height/width of icons in ZMI listings so the table doesn't + jump around while loading. + +- After the proper introduction of parent-pointers, it's now + wrong to acquisition-wrap content providers. We will now use + the "classic" content provider expression from Zope 3. + +- Ported c69896 to Five. This fix makes it possible to provide a + template using Python, and not have it being set to ``None`` by + the viewlet manager directive. + +- Made Five.testbrowser compatible with mechanize 0.1.7b. + +- Launchpad #280334: Fixed problem with 'timeout' + argument/attribute missing in testbrowser tests. + +- Launchpad #267834: proper separation of HTTP header fields + using CRLF as requested by RFC 2616. + +- Launchpad #257276: fix for possible denial-of-service attack + in PythonScript when passing an arbitrary module to the encode() + or decode() of strings. + +- Launchpad #257269: 'raise SystemExit' with a PythonScript could shutdown + a complete Zope instance + +- Switch to branch of 'zope.testbrowser' external which suppresses + over-the-wire tests. + +- Launchpad #143902: Fixed App.ImageFile to use a stream iterator to + output the file. Avoid loading the file content when guessing the + mimetype and only load the first 1024 bytes of the file when it cannot + be guessed from the filename. + +- Changed PageTemplateFile not to load the file contents on Zope startup + anymore but on first access instead. This brings them inline with the + zope.pagetemplate version and speeds up Zope startup. + +- Collector #2278: form ':record' objects did not implement enough + of the mapping protocol. + +- "version.txt" file was being written to the wrong place by the + Makefile, causing Zope to report "unreleased version" even for + released versions. + +- Five.browser.metaconfigure.page didn't protect names from interface + superclasses (http://www.zope.org/Collectors/Zope/2333) + +- DAV: litmus "notowner_modify" tests warn during a MOVE request + because we returned "412 Precondition Failed" instead of "423 + Locked" when the resource attempting to be moved was itself + locked. Fixed by changing Resource.Resource.MOVE to raise the + correct error. + +- DAV: litmus props tests 19: propvalnspace and 20: + propwformed were failing because Zope did not strip off the + xmlns: attribute attached to XML property values. We now strip + off all attributes that look like xmlns declarations. + +- DAV: When a client attempted to unlock a resource with a token + that the resource hadn't been locked with, in the past we + returned a 204 response. This was incorrect. The "correct" + behavior is to do what mod_dav does, which is return a '400 + Bad Request' error. This was caught by litmus + locks.notowner_lock test #10. See + http://lists.w3.org/Archives/Public/w3c-dist-auth/2001JanMar/0099.html + for further rationale. + +- When Zope properties were set via DAV in the "null" namespace + (xmlns="") a subsequent PROPFIND for the property would cause the + XML representation for that property to show a namespace of + xmlns="None". Fixed within OFS.PropertySheets.dav__propstat. + +- integrated theuni's additional test from 2.11 (see r73132) + +- Relaxed requirements for context of + Products.Five.browser.pagetemplatefile.ZopeTwoPageTemplateFile, + to reduce barriers for testing renderability of views which + use them. + (http://www.zope.org/Collectors/Zope/2327) + +- PluginIndexes: Fixed 'parseIndexRequest' for false values. + +- Collector #2263: 'field2ulines' did not convert empty string + correctly. + +- Collector #2198: Zope 3.3 fix breaks Five 1.5 test_getNextUtility + +- Prevent ZPublisher from insering incorrect <base/> tags into the + headers of plain html files served from Zope3 resource directories. + +- Changed the condition checking for setting status of + HTTPResponse from to account for new-style classes. + +- The Wrapper_compare function from tp_compare to tp_richcompare. + Also another function Wrapper_richcompare is added. + +- The doc test has been slightly changed in ZPublisher to get + the error message extracted correctly. + +- The changes made in Acquisition.c in Implicit Acquisition + comparison made avail to Explicit Acquisition comparison also. + +- zopedoctest no longer breaks if the URL contains more than one + question mark. It broke even when the second question mark was + correctly quoted. + +Other Changes ++++++++++++++ + +- Added lib/python/webdav/litmus-results.txt explaining current + test results from the litmus WebDAV torture test. + +- DocumentTemplate.DT_Var.newline_to_br(): Simpler, faster + implementation. + Modified: Zope/trunk/src/ZPublisher/Publish.py =================================================================== --- Zope/trunk/src/ZPublisher/Publish.py 2010-03-26 13:14:46 UTC (rev 110187) +++ Zope/trunk/src/ZPublisher/Publish.py 2010-03-26 13:25:09 UTC (rev 110188) @@ -27,7 +27,7 @@ from zope.event import notify from pubevents import PubStart, PubSuccess, PubFailure, \ - PubBeforeCommit, PubAfterTraversal + PubBeforeCommit, PubAfterTraversal, PubBeforeAbort class Retry(Exception): """Raise this to retry a request @@ -173,8 +173,12 @@ ) retry = True finally: + # Note: 'abort's can fail. Nevertheless, we want end request handling try: + + notify(PubBeforeAbort(request, exc_info, retry)) + if transactions_manager: transactions_manager.abort() finally: @@ -196,6 +200,9 @@ else: # Note: 'abort's can fail. Nevertheless, we want end request handling try: + + notify(PubBeforeAbort(request, exc_info, False)) + if transactions_manager: transactions_manager.abort() finally: Modified: Zope/trunk/src/ZPublisher/interfaces.py =================================================================== --- Zope/trunk/src/ZPublisher/interfaces.py 2010-03-26 13:14:46 UTC (rev 110187) +++ Zope/trunk/src/ZPublisher/interfaces.py 2010-03-26 13:25:09 UTC (rev 110188) @@ -41,5 +41,12 @@ class IPubBeforeCommit(IPubEvent): """notified immediately before the transaction commit (i.e. after the main - request processing is finished. + request processing is finished). """ + +class IPubBeforeAbort(IPubEvent): + """notified immediately before the transaction abort (i.e. after the main + request processing is finished, and there was an error). + """ + exc_info = Attribute('''The exception info as returned by 'sys.exc_info()'.''') + retry = Attribute('Whether the request will be retried') Modified: Zope/trunk/src/ZPublisher/pubevents.py =================================================================== --- Zope/trunk/src/ZPublisher/pubevents.py 2010-03-26 13:14:46 UTC (rev 110187) +++ Zope/trunk/src/ZPublisher/pubevents.py 2010-03-26 13:25:09 UTC (rev 110188) @@ -10,7 +10,7 @@ from zope.interface import implements from interfaces import IPubStart, IPubSuccess, IPubFailure, \ - IPubAfterTraversal, IPubBeforeCommit + IPubAfterTraversal, IPubBeforeCommit, IPubBeforeAbort class _Base(object): """PubEvent base class.""" @@ -42,3 +42,10 @@ class PubBeforeCommit(_Base): """notified immediately before the commit.""" implements(IPubBeforeCommit) + +class PubBeforeAbort(_Base): + """notified immediately before an abort.""" + implements(IPubBeforeAbort) + + def __init__(self, request, exc_info, retry): + self.request, self.exc_info, self.retry = request, exc_info, retry Modified: Zope/trunk/src/ZPublisher/tests/testpubevents.py =================================================================== --- Zope/trunk/src/ZPublisher/tests/testpubevents.py 2010-03-26 13:14:46 UTC (rev 110187) +++ Zope/trunk/src/ZPublisher/tests/testpubevents.py 2010-03-26 13:25:09 UTC (rev 110188) @@ -8,7 +8,7 @@ from ZPublisher.Publish import publish, Retry from ZPublisher.BaseRequest import BaseRequest from ZPublisher.pubevents import PubStart, PubSuccess, PubFailure, \ - PubAfterTraversal, PubBeforeCommit + PubAfterTraversal, PubBeforeCommit, PubBeforeAbort from ZPublisher.interfaces import \ IPubStart, IPubEnd, IPubSuccess, IPubFailure, \ IPubAfterTraversal, IPubBeforeCommit @@ -74,40 +74,58 @@ r = self.request; r.action = 'fail_return' publish(r, PUBMODULE, [None]) events = self.reporter.events - self.assertEqual(len(events), 2) + self.assertEqual(len(events), 3) self.assert_(isinstance(events[0], PubStart)) self.assertEqual(events[0].request, r) - self.assert_(isinstance(events[1], PubFailure)) + self.assert_(isinstance(events[1], PubBeforeAbort)) self.assertEqual(events[1].request, r) self.assertEqual(events[1].retry, False) - self.assertEqual(len(events[1].exc_info), 3) + self.assert_(isinstance(events[2], PubFailure)) + self.assertEqual(events[2].request, r) + self.assertEqual(events[2].retry, False) + self.assertEqual(len(events[2].exc_info), 3) def testFailureException(self): r = self.request; r.action = 'fail_exception' self.assertRaises(Exception, publish, r, PUBMODULE, [None]) events = self.reporter.events - self.assertEqual(len(events), 2) + self.assertEqual(len(events), 3) self.assert_(isinstance(events[0], PubStart)) self.assertEqual(events[0].request, r) - self.assert_(isinstance(events[1], PubFailure)) + self.assert_(isinstance(events[1], PubBeforeAbort)) self.assertEqual(events[1].request, r) self.assertEqual(events[1].retry, False) self.assertEqual(len(events[1].exc_info), 3) + self.assert_(isinstance(events[2], PubFailure)) + self.assertEqual(events[2].request, r) + self.assertEqual(events[2].retry, False) + self.assertEqual(len(events[2].exc_info), 3) def testFailureConflict(self): r = self.request; r.action = 'conflict' publish(r, PUBMODULE, [None]) events = self.reporter.events - self.assertEqual(len(events), 6) + self.assertEqual(len(events), 7) + self.assert_(isinstance(events[0], PubStart)) self.assertEqual(events[0].request, r) - self.assert_(isinstance(events[1], PubFailure)) + + self.assert_(isinstance(events[1], PubBeforeAbort)) self.assertEqual(events[1].request, r) self.assertEqual(events[1].retry, True) self.assertEqual(len(events[1].exc_info), 3) self.assert_(isinstance(events[1].exc_info[1], ConflictError)) - self.assert_(isinstance(events[2], PubStart)) - self.assert_(isinstance(events[5], PubSuccess)) + + self.assert_(isinstance(events[2], PubFailure)) + self.assertEqual(events[2].request, r) + self.assertEqual(events[2].retry, True) + self.assertEqual(len(events[2].exc_info), 3) + self.assert_(isinstance(events[2].exc_info[1], ConflictError)) + + self.assert_(isinstance(events[3], PubStart)) + self.assert_(isinstance(events[4], PubAfterTraversal)) + self.assert_(isinstance(events[5], PubBeforeCommit)) + self.assert_(isinstance(events[6], PubSuccess)) # Auxiliaries def _succeed(): _______________________________________________ Zope-Checkins maillist - Zope-Checkins@zope.org https://mail.zope.org/mailman/listinfo/zope-checkins