Zope History

  This file contains change information for previous versions of
  Zope. Change information for the current release can be found
  in the file CHANGES.txt.

  Zope 2.10.0 beta 2 (unreleased)

    Bugs Fixed

      - Acquisition wrappers now correctly proxy __contains__.

      - Collector #2116: sequence.sort() did not work properly
        locale related comparison methods

  Zope 2.10.0 beta 1 (2006/05/30)

    Restructuring

      - Zope 2.10+ now includes site.zcml as part of its instance 
        creation skel directory.  As a consequence Five now requires 
        this file to exist in every instance.  If upgrading a site 
        from Zope 2.9 to 2.10, you will need to copy site.zcml and 
        package-includes/ from your installed Zope installation 
        location (skel/etc/) into the etc/ directory of your upgraded 
        instance.
  
        The rationale for requiring this new file is to bring Zope 2 
        instances closer in consistency to Zope 3 instances.  It also 
        eases use of Zope 3 coding techniques in Zope 2 and removes 
        some confusion when trying to run pure Zope 3 applications on 
        Zope 2.

      - Products.PageTemplates now uses the Zope 3 ZPT implementation
        in zope.pagetemplate.

      - The TAL package has been deprecated in favour of the TAL
        engine from zope.tal.

      - Products.PageTemplates.TALES has been deprecated in favour of
        the TALES engine from zope.tales.

      - ZTUtils.Iterator has been deprecated in favour of the TALES
        iterator implementation in zope.tales.tales.

      - ZCatalog: removed manage_deleteIndex(), manage_delColumns()
        which were deprecated since Zope 2.4

      - deprecated the zLOG module. Use Pythons 'logging' module instead.

      - replaced all zLOG occurences (expect the zLOG module itself) with 
        the 'logging' module

      - PluginIndexes/TextIndex is deprecated. Use ZCTextIndex instead

      - the 'StructuredText' module is deprecated. Use zope.structuredtext
        instead

      - removed ZopeTutorial (Elvis is now really dead)

      - ZClasses are deprecated and should no longer be used. In addition
        any code related to the ZClasses (re)distribution mechanism is
        removed.

      - ZGadyFlyDA/Gadfly is deprecated

      - deprecated OFS.content_types (to be removed in Zope 2.11) and
        replaced all occurences with zope.app.content_types 

      - OFS.content_types: moved code to zope.app.content_types and added
        method aliases

      - Using FastCGI is offically deprecated.

    Features added

      - Included Zope 3.3 and corresponding Five 1.5 release.

      - There is now a default favicon.ico.
    
      - Experimental WSGI and Twisted support for http.
        Zope now has a WSGI interface for integration with other
        web-servers than ZServer. Most notably Twisted is supported.
        The WSGI application is ZPublisher.WSGIPublisher.publish_module
        
        You can make ZServer use the twisted interface with the 
        "use-wsgi on" keyword in the http-server section in zope.conf.
        
        You can run Twisted by installing Twisted (2.1 recommended) and
        replacing the http-server section with a server section in 
        zope.conf. It is not possible to run a Twisted server together with
        a ZServer at the same time.
        
          <server>
            address 8080
            type Zope2-HTTP
          </server>
        
        WSGI: http://www.python.org/dev/peps/pep-0333/
        Twisted: http://twistedmatrix.com/

      - The traversal has been refactored to take heed of Zope3s 
        IPublishTraverse adapter interfaces. The ZCML directives 
        five:traversable and five:defaultViewable are therefore no
        longer needed, as everything now is five:traversable and
        five:defaultViewable. 

        There was a bug in earlier versions of Five that allowed you 
        to do custom publishing traversal with ITraversable adapters.
        This bug has been corrected. Anybody using ITraversable 
        adapters need to convert them to IPublishTraversal adapters.

      - Testing.makerequest: Added an 'environ' argument so
        clients can use mappings other than os.environ.

      - Updated to Docutils 0.4.0 

      - reStructuredText: The default value for the 'stylesheet'
        property has been changed from 'default.css' to None because
        there is no 'default.css' file by default. 

      - ZReST: rewritten render() method to integrate it smoothly
        with Docutils 0.4.0. The default value for the 'stylesheet'
        property has been changed from 'default.css' to None because
        there is no 'default.css' file by default. 

      - Added a "clock server" servertype which allows users to
        configure methods that should be called periodically as if
        they were being called by a remote user agent on one of Zope's
        HTTP ports.  This is meant to replace wget+cron for some class
        of periodic callables.

        To use, create a "clock-server" directive section anywhere
        in your zope.conf file, like so:

         <clock-server>
            method /do_stuff
            period 60
            user admin
            password 123
            host localhost
         </clock-server>

        Any number of clock-server sections may be defined within a
        single zope.conf.  Note that you must specify a
        username/password combination with the appropriate level of
        access to call the method you've defined.  You can omit the
        username and password if the method is anonymously callable.
        Obviously the password is stored in the clear in the config
        file, so you need to protect the config file with filesystem
        security if the Zope account is privileged and those who have
        filesystem access should not see the password.

        Descriptions of the values within the clock-server section
        follow::

          method -- the traversal path (from the Zope root) to an
          executable Zope method (Python Script, external method,
          product method, etc).  The method must take no arguments or
          must obtain its arguments from a query string.

          period -- the number of seconds between each clock "tick" (and
          thus each call to the above "method").  The lowest number
          providable here is typically 30 (this is the asyncore mainloop
          "timeout" value).

          user -- a zope username.

          password -- the password for the zope username provided above.

          host -- the hostname passed in via the "Host:" header in the
          faux request.  Could be useful if you have virtual host rules
          set up inside Zope itself.

        To make sure the clock is working, examine your Z2.log file.  It
        should show requests incoming via a "Zope Clock Server"
        useragent.

      - Added a 'conflict-error-log-level' directive to zope.conf, to set
        the level at which conflict errors (which are normally retried
        automatically) are logged. The default is 'info'.

      - The SiteErrorLog now copies exceptions to the event log by default.

      - ObjectManager now has an hasObject method to test presence. This
        brings it in line with BTreeFolder.

      - Improved logging of ConflictErrors. All conflict errors are
        logged at INFO, with counts of how many occurred and how many
        were resolved. Tracebacks for all conflicts are logged a DEBUG
        level, although these won't help anyone much. If a conflict
        error is unresolved, it will now bubble up to error_log and
        standard_error_message.

      - Use new-style security declarations everywhere possible. This
        means remove the use of __ac_permissions__, foo__roles__ and
        default__class_init__. A few corner cases can't be converted
        because of circular imports.

      - Fixed unclear security declarations. Warn when an attempt is
        made to have a security declaration on a nonexistent method.

      - updated to ZPL 2.1

      - interfaces: Added 'Interfaces' tab to basic core objects.
        This is a Five feature and only available if the classes are made
        five:traversable. It allows to inspect interfaces and to assign
        marker interfaces through the ZMI.

      - webdav: Added support for the z3 WriteLock interface.
        It is no longer necessary to have the WriteLockInterface in the
        __implements__ list of lockable objects. All classes inheriting from
        LockableItem inherit also the IWriteLock interface. Note that this
        enables webdav locking for all subclasses by default even if they
        don't specify the WriteLockInterface explicitly.

      - App ProductContext: Made registerClass aware of z3 interfaces.
        Z2 and z3 interfaces are registered side by side in the same tuple in
        Products.meta_types. IFAwareObjectManagers like the ZCatalog work now
        with z3 interfaces as well.

      - Zope now sends Zope 3 events when objects are added or removed
        from standard containers. manage_afterAdd, manage_beforeDelete
        and manage_afterClone are now deprecated. See
        lib/python/Products/Five/tests/event.txt for details.

      - Zope now utilizes ZODB 3.6.  It had previously used
        ZODB 3.4.  As a result, the DBTab package was removed, as
        ZODB 3.6 has multidatabase support that makes DBTab
        unnecessary.

      - Added a 'product-config' section type to zope.conf, allowing
        arbitrary key-value mappings.  Products can look for such
        confgiurations to set product-specific options.  Products mwy
        also register their own section types, extending the
        'zope.product.base' type. (see the example '<product-config>'
        section in skel/etc/zope.conf.in for sample usage).

      - Collector #1490: Added a new zope.conf option to control the
        character set used to encode unicode data that reaches
        ZPublisher without any specified encoding.

      - AccessControl, Acquisition, App, OFS, webdav, PluginIndexes,
        ZCatalog and ZCTextIndex: Added some Zope 3 style interfaces.
        This makes the bridged interfaces shipped with Five obsolete.

      - ZConfig extension, address now also accepts symbolic port names
        from etc/services (unix) or etc\services (win32)

      - ZPublisher.HTTPRequest.FileUpload now supports full file
        object interface.  This means Iterator support was added. (for
        line in fileobject: ..., as well as fileobject.next() and
        fileobject.xreadlines() ) Collector #1837

      - Switched the bundled Zope 3 to release 3.2 and upgraded the
        Five product to version 1.3 (see Products/Five/CHANGES.txt).

      - The PageTemplate implementation now uses Zope 3 message
        catalogs by default for translation.  Old-style translation
        services such as Localizer or PlacelessTranslationService are
        still supported as fall-backs.  See Products/Five/doc/i18n.txt
        for more information.

      - Switched to the new improved test runner from Zope 3.  Run
        test.py with -h to find out more.

      - lib/python/docutils is now a reference to docutils package
        from the Zope 3 source tree (to get rid of redundant packages)

    Bugs Fixed

      - Collector #1447: When editing content on a virtual-hosted zope,
        AcceleratedHTTPCacheManager now purges the correct URL.

      - When you add roles in manage_access, roles are now stripped of
        any leading or trailing spaces.

      - Collector #2062: Fix manage_historyCopy, which was broken, and write
        tests for it.

      - Collector #2061: Fix problems where windows line endings are passed
        to restricted code compilers.

      - Collector #2051: Applied patch by Yoshinori Okuji to fix some
        XML export/import problems, including tests for that feature.

      - Collector #2037: fixed broken ACTUAL_URL for '/'

      - Missing import of NotFound in webdav.Resource

      - Collector #1819: fixed method signature of
        MountedObject.SimpleTrailblazer._construct()

      - Collector #2019: removed validateValue() from cAccessControl (already
        removed in former Zope versions from the AccessControl Python
        implementation)

      - Collector #1991: ZPublisher did not deal properly with a trailing
        %20 in the URL

      - zope.app.introspector was not included with the source archive

      - Collector #2013: improved XHTML conformance of error messages,
        some of which did not close '<p>' tags.

      - Collector #2002: fixed broken 'ls -R' functionality (didn't
        recurse properly subclasses of OFS.Folder)

      - Collector #1992: unified the visible hostnames of the FTP and
        HTTP servers

      - Collector #1999: fixed broken FTP rename functionality
        (RNFR now returns 350 as status code instead 250)

      - HTTPResponse: for XML content the encoding specified within
        the XML preamble is adjusted to the real encoding of the content
        as specified through the 'charset' within the content-type
        property.

      - Collector #1939: When running as a service, Zope could
        potentially collect too much log output filling the NT Event
        Log. When that happened, a 'print' during exception handling
        would cause an IOError in the restart code causing the service
        not to restart automatically.

        Problem is that a service/pythonw.exe process *always* has an
        invalid sys.stdout.  But due to the magic of buffering, small
        "print" statements would not fail - but once the file actually
        got written to, the error happened.  Never a problem when
        debugging, as the process has a console, and hence a valid
        stdout.

      - For content-type HTTP headers starting with 'text/' or 'application/'
        the 'charset' field is automatically if not specified by the
        application. The 'charset' is determined by the content-type header
        specified by the application (if available) or from the
        zpublisher_default_encoding value as configured in etc/zope.conf

      - Collector #1976: FTP STOR command would load the file being
        uploaded in memory. Changed to use a TemporaryFile.

      - OFS ObjectManager: Fixed list_imports() to tolerate missing
        import directories.

      - Collector #1621, 1894:  Removed support for use of long-deprecated
        'whrandom' module.

      - OFS PropertySheets / webdav: Fixed dav__resourcetype.
        __dav_collection__ with a false value was overridden by
        isAnObjectManager.

      - added missing Zope 3 imports: zope.app.intid, zope.app.keyreference, 
        zope.app.session, zope.contentprovider, zope.viewlet

    Other

      - AccessControl.User: Use a better __repr__.

      - ZSQLMethod.manage_main: Moved the error message that warns of a
        non-existing or closed database connection next to the Connection ID
        dropdown and present it using red to increase its visibility.

      - The ImageFile module has finally been deprecated for good and
        will be removed in Zope 2.11.  Use App.ImageFile instead.
