Zope Changes

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

  For information on future releases, see ROADMAP.txt.

  Zope 3.3.1 (2007-01-14)

    Bugfixes

      - Fixed widget bug in zope.app.form.browser; _getCurrentValue always
        returns an input value now. This fixes a bug in _getFormValue.

        (This required a backport of a small restructuring: Changed internal
        widget API to allow retrieving the current value (from request,
        default or current field value) in addition to the current form
        representation of the value.)

      - Fixed bug #707: "layer" directive was marked as deprecated in a
        confusing way.

      - Fixed bug #728: Able to change-dir into non-existant directories using
        FTP

      - Fixed bug #717: formlib raised FormError when schema fields were
        missing from a request although not required.

      - Fixed bug #738: RestrictedPython was unable to parse
        Unicode expressions correctly (as passed in from e.g. ZPTPages).

      - Fixed bug #723: Testbrowser was handling multiple submit buttons with
        the same name incorrectly.

      - Fixed HTML rendered by ItemsMultiDisplayWidget: The 'name' attribute
        is not allowed in list tags and 'type' has a different meaning.

      - Fileresources now also set the Cache-control headers on 304
        responses. This speeds up page loads a lot on pages with many
        resources.

      - Fixed validate method of schema.Date, now it does not accept
        datetime objects anymore. this is needed because datetime and
        date values are not comparable

      - Fixed issue 730: Subversion 1.4 breaks mkzopeinstance.py

      - Fixed zope.annotation.factory to correctly setup containment for
        objects that do not implement IContained.

      - Fixed encoding of newlines, carriage returns, and tabs when
        encoding attributes for widgets so we're consistent under all
        Python 2.4.x versions (including 2.4.4, which failed tests before).

      - Fixed issue 535: make HTTPInputStream work with Python 2.4.4.

      - Improved fix for issue 599: Made sure i18n Message based Invalid
        exceptions are handled correctly.

      - Fixed a bug in getImageInfo which could cause an
        UnboundLocalError under certain conditions.

      - Fixed ``get/queryNextUtility`` to work with multiple base registries.

      - Fixed zope.app.catalog.attribute.AttributeIndex. It did not
        remove the the previous value/object from the index IF the NEW
        value was None.

      - Fixed zope.index.field.index.FieldIndex. Unindex broke if the value
        somehow dropped out of the forward index.

  Zope 3.3.0 (2006/09/21)

    Bugfixes

      - Fixed issue 706: Session doesn't expire after aborting transaction.

      - Fixed issue 239: Now the default authentication schema (Basic HTTP)
        has better support for logout. The 'Logout' link is still optional.
        You have to register a marker component in ZCML.
        To display the link, add this:

          <adapter factory="zope.app.security.LogoutSupported" />

        to your ``site.zcml`` or ``overrides.zcml``.
        See ``zope/app/security/browser/loginlogout.txt`` for details.

      - Fixed issue 696: No display widget was registered for ISet fields with
        a IChoice(IBaseVocabulary) value type.

      - Fixed issue 691: make formlib javascript to display help texts more
        robust. It can now also display the helptext correctly if a complex
        widget with multiple fields and/or fields with the widget name used as
        a prefix for the form elements is shown.

    Restructuring

      - Removed duplicate declarations of provide* convenience methods in
        zope.component.globalregistry.

  Zope 3.3.0b2 (2006/08/18)

    New features

      - Added two new verbs for zcml:condition, 'not-have' and
        'not-installed', which are the negated counterparts to 'have'
        and 'installed'.

      - Added a new functional test layer,
        zope.app.testing.functional.FunctionalNoDevMode, that is like
        Functional, except that it doesn't have the developer mode
        feature enabled when loading ZCML.

    Bugfixes

      - Fixed bug #721: Handling of empty prefixes in zope.formlib and
        zope.app.form

      - Made zope.testbrowser report the selection state of ItemControls on
        representations.

      - Fixed a bug on unregistering handlers. When multiple handlers for one
        specification where registered, all of them would be removed when only
        a single one was unregistered.

      - Fixed issue 507: Default configuration exposes template code and
        paths. Developer mode is now switched off by default and a warning is
        issued if it is turned on.

      - Fixed issue 383: Twisted and ZServer work the same on any platform.
        Default configuration is to bind servers to all interfaces.
        You find additional information in 'zope.conf' to know
        how to bind to a specific address.

      - Fixed issue 574: Page template traversal adapters were not correctly
        proxied.

      - Fixed issue 682: Quoting of realm in HTTP basic authentication was not
        conforming to RFC 2617.

      - Fixed broken behaviour of Mail Delivery Names vocabulary.

      - Fixed issue 537: zope.conf advertises RecordingHTTP server
        which doesn't ship with the Zope 3 releases.

      - Fixed issue 681: IFormFields is missing declaration for omit()

      - Fixed issue 540, Fix documentation buglet in the zope.app.demo
        package (which is not shipped in the tarball).

      - Fixed issue 683, Globally installed "zope" package breaks
        mkzopeinstance.

      - Fixed issue 676, utilities defined in Zope 3.2 weren't
        converted properly.

      - Fixed issue 675, Pluggable Authentication utilities with group
        folders weren't updated correctly to replect the new database
        format.

      - Fixed issue 663, adding basic auth and session-credential
        plugins didn't work.

      - Fixed issue 650, a test failure on Mac OS X that seemed to
        indicate deeper problems in ZEO's thread handling.  Refactored
        ZEO so that ZEO clients have their own asyncore loop and don't
        need two separate networking modes.

        As part of this, some bugs in connection management that
        weren't tested in asynchronous mode were fixed.

        Added a heart-beat to try to detect lost server connections in
        situations where such disconnections are not reported by the OS. 

      - Fixed issue 644, ClientForm (part of mechanize) which zope.testbrowser
        uses didn't handle stripping a new line immediately after a start tag.

      - Fixed issue 664, apidoc didn't properly handle attributes that
        showed up in dir() but that weren't gettable.

      - Fixed issue 604, Mutable schemas were accidentally included in
        the 3.2 release even though they weren't ready and didn't
        work. They are not included in the 3.3 release.

      - Fixed issue 564: binary set operations didn't work on proxied sets.

      - Fixed issue 572: Dict fields with key_type or value_type set
        didn't handle binding correctly.

      - Fixed issue 576: The icon directive title attribute wasn't implemented.

      - TAL interpreter didn't translate i18n Messages when inserted
        as structure;

      - Fixed issue 667: ZPT repeat "oddness"

      - Fixed issue 646: TAL interpreter doesn't translate i18n
        Messages when inserted as attributes;

      - Fixed issue 665: ZCML swallowing KeyboardInterrupt and SystemExit.

      - Fixed issue 645: zope.testbrowser truncates document content after
        goBack()

      - Upgraded bundled Mechanize and ClientForm to latest versions - include
        several bugfixes.

      - Fixed issue 466: Catalog reindex indexing wrong objects

      - Fixed issue 529: Undo Principal Transactions doesn't work with
        non-root principals

      - Fixed issue 525: DateWidget ru-format.
        Added new Date(time)I18nWidget. Note: if you plan to use
        DatetimeI18nWidget with timezone information take a look
        at the note in the DatetimeI18nWidget docstring;

      - Fixed issue 531: Spurious i18n deprecation warnings;

      - Fixed issue 599: Provided a view for interface.exceptions.Invalid to
        allow formlib to display errors when validating invariants.

      - The 'install' generation was hiding ImportErrors that happen within the
        'install' module; they get re-raised now.

      - Fixed issue 550: Added adapter for datetime.datetime for xmlrpc
        premarshalling;

      - Fixed issue 633: Boston skin has logo slot now

      - Fixed issue 575: Inconsistent raising of TraversalError

      - Fixed issue 592: Made handling of '(no value)' entries for selection
        widgets cleaner and consistent.

        WARNING: This fix includes internal class changes for the
        zope.app.form.browser.itemswidgets.ItemsEditWidgetBase. If you
        subclass this class (directly or indirectly) you have to watch out for
        subtle breakages.

      - Fixed issue 634: Changed lookup for pre-marshallers to use component
        architecture.

      - Fixed issue 565: Verified fix for ObjectWidget's 'error' method and
        provided test coverage.

      - Fixed issue 559: Removed filtering of CGI names when used as form
        fields

      - Fixed issue 517: Bug in intid that doesn't respect that BTrees can not
        handle long.

      - Fixed issue 399: traversal of missing skins now give 404 / NotFound
        instead of 505 / ComponentLookupError

      - Fixed issue 199: macro expansion in ZPT pages now work

      - Fixed issues 648 and 593: uploading files with non-ASCII filenames now
        works.

      - Fixed issue 639: Default ITraverser ignores dict methods

      - Fixed issue 636: Default ITraverser can't traverse old style
        classes

      - Fixed issue 638: TALES PathExpr calls result of alternate
        subexpression

      - Fixed issue 635: TALES PathExpr doesn't call old style classes

      - Fixed issue 543: add 'decimal'-package to
        zope/app/security/globalmodules.zcml

      - Include backward-compatibility packages in zope.app in the
        release.  They were left out in 3.3.0b1 by mistake.

      - Provide ZODB migration script for moved DublinCore classes.

      - Fixed issue 632: "bin/zopectl run" drops into python shell on errors.

      - Fixed issue 679: using a new IHTTPVirtualHostChangedEvent, session's
        cliend id cookies fix up the set cookie path whenever the virtual host
        information changes during a request.

      - Fixed issue 534: changed interface definition to use Tuple instead of
        List for creators, subjects and contributors, to be in line with the
        implementation.

      - Fixed issue 690: removed a javascript call from formlib/pageform.pt
        which depended on a non-existent function. It was a holdover from when
        the library was an external project.

    Notes

      If you register a new default view name for a particular layer, and this
      registration applies to an object that has a nameless view (such as for
      an ISite's /@@/ resource container), then you need to also re-register
      the nameless view for the same layer and object that you registered the
      new default view name for.

      So, if you registered a default view name of 'mainpage.html' for the
      root object on the layer MyLayer, you also need to register the nameless
      view for the layer MyLayer for the root object.  If you don't do this,
      then the /@@/ resource URLs will stop working for MyLayer requests.

      This extra registration is needed because the default view name directive
      registers a no-name adapter providing IDefaultViewName.  Registering a
      view with no name registers a no-name adapter providing Interface.  So,
      unless you re-register the adapter providing Interface, the
      IDefaultViewName adapter will be used instead.

    Much thanks to everyone who contributed to this release:

      Jim Fulton, Stephan Richter, Philipp von Weitershausen, Egon
      Frerich, Benji York, Christian Theune, Dmitry Vasiliev, Rocky
      Burt, Roger Ineichen, Marius Gedminas, Stuart Bishop, Martijn
      Faassen, Steve Alexander, Tres Seaver, Baiju M, Uwe Oestermeier,
      Gary Poster, Brian Sutherland, Florent Xicluna, Lennart Regebro.

  Zope 3.3.0b1 (2006/05/08)

    New features

      - Provided a new component registry API that allows multiple
        component registries to be combined more flexibly than before.
        See zope.component.interfaces.IComponentRegistry for more
        information.

      - Greatly simplified local-component registration.
        See zope.component.interfaces.IComponentRegistry for more
        information.

      - Moved many packages out of zope.app to make them easier to use
        outside of Zope.

      - Added a simple Python id based implementation of IKeyReference for
        testing.

      - Updated Docutils to V 0.4.0

      - Change the session credentials plugin to make it configurable
        in which fields it looks for the credentials.

      - Make the HomeFolderManager allowing the user to change the object to
        create when autocreating the homefolder.

      - The ensureObject, ensureUtility, addConfigureUtility and
        addUtility in zope.app.appsetup.bootstrap now optionally can
        return an object instead of a name.

      - Allow ``zmi_views`` actions like: ``javascript:popup()``,
        ``../parentview.html`` or ``++namespace++foobar`` as first menu items.

      - Added ``-x dirs`` option to i18nextract that allows to exclude
        particular directories from being searched.

      - Added a new API for collating text.  You can now adapt
        a locale to ``zope.i18n.interfaces.ILocales.ICollator``.  You can
        then use that to sort strings, such as menu entries, in a
        locale-specific fashion.

      - By default, persistent logs now contain the same extra
        traceback information that's visible through the web.

      - Declare the "zope" top-level package as a namespace package if
        "pkg_resources" is available. This will enable distribution of
        "zope.*" packages as individual eggs.

      - A new zope.annotation.factory helper function that makes
        it easier to create annotations. Also added a README in
        zope.annotation which explains how to use it.

      - The default browser view for file and image now set the
        "Last-Modified" headers and handles "If-Modified-Since"
        request headers if the file is adaptable to
        IZopeDublinCore. This reduces server traffic a lot when large
        files are served.

      - Added a more complete set of widgets for fields that use
        iterable sources.  These widgets now mirror the set provided
        by vocabulary-based fields.

      - Added a cleaner and more robust API to testbrowser for setting
        file-upload data.

      - Updated pytz to version 2006g

    Restructuring

      - Undeprecated automatic translation of message ids.  This is now
        ok again, both for convenience and to support rendering values
        which may sometimes be Messages and sometimes be non-translatable
        strings.

      - Deprecated several ZCML directives as described in
        http://dev.zope.org/Zope3/ReducingTheAmountOfZCMLDirectives:

        * factory

        * vocabulary

        * content (as an alias to the class directive)

        * modulealias

        * renderer:renderer

      - Removed the ``browser:addview`` ZCML directive as it was
        broken and untested.

      - Removed 'Adding.renderAddButton' method which had been
        deprecated 2 years ago.

      - Removed unused menus and made previous titles, the description,
        since they were awefully long. Then I created new, short titles.

      - The ``browser:layer`` directive and the ``ILayer`` interface
        has been deprecated.  Registering layers has become obsolete,
        layers should be created as interfaces extending
        ``IBrowserRequest``.

      - The ``browser:skin`` directive has been deprecated.  Skins
        should be created as interfaces extending ``IBrowserRequest``
        and can be registered using a simple ``utility`` directive.

      - The ``ISkin`` interface has been renamed to ``IBrowserSkinType``.

    Bug Fixes

      - Fixed issue 697: wrong page template referenced in the traceback if
        an exception occurs inside fill-slot.

      - Fixed issue 551: Sequence widget ignored default values.
      
      - Fix get_rendered in zope.formlib. Make use of get_rendered in
        setUpInputWidget which is used in AddFormBase.

      - Fixed error handling in sequence item input widget. This widget
        was raising a ValidationError instead a WidgetInputError. The formlib
        didn't catch ValidationErrors. Added also ValidationError handling to
        the formlib as a fallback for broken widget implementations.

      - Fixed issue 590: zope.app.mail could send multiple copies of emails on
        ConflictErrors, and it was also rate limited to 1 email per second when
        you used QueuedMailDelivery.

      - SimpleInputWidget used to clear the widget's error as a side effect
        sometimes.

      - Fixed a bug in field prefix handling in formlib's setUp*Widgets.

      - Fixed issue 573: @form.action(failure='name_of_method') didn't work.

      - Fixed two bugs in SequenceWidgets: an exception was raised
        on rendering and the errors of the subwidgets weren't displayed.

      - Fixed issue 560: Bug in default AddView class.

      - Fixed issue 546: non-ASCII docstring cause
        System Error in RootErrorReportingUtility.

      - Fixed issue 547: return 'add_content' for backward-compatibility.
        Removed 'zope.app.container.browser.adding.ContentAdding'.

      - Fixed issue 544: VocabularyRegistryError missing import.

      - Fixed issue 536: ErrorLogUtility has UnboundLocalError.

      - zope.i18n.interpolate:

        + now if the variable wasn't found in the mapping no substitution
          will happens.

        + fixed interpolation in case "$name $$name", only the first variable
          will be substituted.

      - Fixed storage bug reported, fixed and tested by Zhiyun (Simon) Hang.

      - Fixed a Gadfly DB Adapter bug that was reported, fixed and tested by
        Tadashi Matsumoto.

      - ``zope.app.content_types`` is now the package
        ``zope.app.contenttypes`` (code backported from Zope 2)

      - Fixed a bug in the ``<viewlet>`` directive handler: extra string
        attributes were ignored if you didn't explicitly specify a
        class for the viewlet.

      - Fixed issue 497: HTTP DELETE now returns 405 Method Not Allowed
        when the container cannot be adapted to IWriteDirectory.

      - Fixed a NameError in bin/static-apidoc.

      - Fixed issue 448, SingleDataHelper.hidden() raised a LookupError
        if there was no input value.

      - Fixed a bug in zope.publisher.http which raises a TypeError
        when using zserver and xmlrpc.

      - Fixed issue 586, BrowserResponse didn't update the
        Content-Length header after inserting a <base> tag, causing
        pages to be truncated in the browser.

      - Fixed issue 587, make sure that utf-8 is chosen if the
        Accept-Charset header contains '*'.

    Much thanks to everyone who contributed to this release:

      Jim Fulton, Marius Gedminas, Brian Sutherland, Stephan Richter,
      Dimitry Vasiliev, Tim Peters, Zachery Bir, Gary Poster, Egon
      Frerich, Zhiyun (Simon) Hang, Tadashi Matsumoto, Simon Michael,
      Encople Degoute, Shane Hathaway, Bjorn Tillenius, Sam Stainsby,
      Bernd Dorn, Benji York Stuart Bishop, Christian Theune, Martijn
      Faassen, Philipp von Weitershausen, Florian Lindner

  ------------------------------------------------------------------

  Zope 3.2.1 (2006/03/26)

    Bug fixes

      - Fixed issue 573: @form.action(failure='name_of_method') didn't work.

      - Fixed issue 568: Typo in basicskin css file.

      - Fixed issue 560: Bug in default AddView class.

      - Fixed issue 546: non-ASCII docstring cause
        System Error in RootErrorReportingUtility.

      - Fixed issue 544: VocabularyRegistryError missing import.

      - Fixed issue 536: ErrorLogUtility has UnboundLocalError.

      - zope.app.testing.functional.defineLayer

        + Use the method param instead of an hardcoded value for the
        zcml filename

  Zope 3.2.0 (2006/01/05)

    Bug Fixes

      - zope.i18n.interpolate:

        + now if the variable wasn't found in the mapping no substitution
          will happens.

        + fixed interpolation in case "$name $$name", only the first variable
          will be substituted.

      - Fixed a bug in FieldProperty to honor the readonly field.

  Zope 3.2.0b3 (2006/01/02)

      - The test-runner --coverage option didn't work when tested code
        was installed in Python's site-packages, which is the case for
        Zope 3 on windows.

      - Input buffering failed and caused Zope to hang when uploading
        large files and using the Twisted server.

      - Make zopetest insert rather than append the library path
        (fix spurious test failures from packages in site-packages)

  Zope 3.2.0b2 (2005/12/23)

    New features

      - Added an option to mkzopeinstance to create instances that use
        ZServer, rather than Twisted.

      - Changed the way returning large results is
        handled. Applications can now simply return files to the
        publisher.

    Bug Fixes

      - Added input buffering to the twisted integration

      - Fixed the plumbing in ZServer so that attempts to return large
        output efficiently using iterators can actually succeed.

      - Uodated to a new version of twisted that fixes a bug in
        calling request bidy stream read methods without passing
        arguments. http://www.zope.org/Collectors/Zope3-dev/521.

      - In zopeskel/etc/zope.conf.in, use the same default port number
        as the one in ZEO/mkzeoinst.py.

      - Fixed a nasty bug that was hiding ``INotFoundError`` exceptions behind
        an empty page.

      - ZEO didn't work properly with teh twisted server.

      - Non-management pages were slowed by a bug in the page-macro
        template in the rotterdam skin.

  Zope 3.2.0b1 (2005/12/06)

    New features

      - For containers, IObjectModifiedEvent has been specialized as
        IContainerModifiedEvent, to better isolate "containerness"
        changes (changes where subobjects are added, removed or
        reordered).

      - IObjectCopiedEvent now also carries the original from which the
        copy was made (http://www.zope.org/Collectors/Zope3-dev/478)

      - Implemented the password managers proposal. Main idea beside the
        proposal is a standard way to implement password encoders/checkers, see
        zope.app.authentication.interfaces.IPasswordManager for details.

        + Added basic password managers: Plain Text, MD5, SHA1.

        + Support for password managers added for ZCML principals and
          principals saved in local PrincipalFolers.

        + Added bin/zpasswd command line script which helps to create ZCML
          principals.

        + Password managers support integrated into bin/mkzopeinstance.

        + New database generation created for convert local principals to new
          format.

      - Implemented the language namespace proposal. Now you can override
        the browser preferred language through the URL, like this:

          http://site.org/++lang++ru/path

        Note: If you want to use a custom IUserPreferredLanguages adapter and
        the '++lang++' feature together you should use
        zope.app.publisher.browser.CacheableBrowserLanguages adapter as a base
        class or at least as example.

      - Implemented a new object introspector. Instead of just providing
        information of the object's class, the new introspector focuses on
        providing information that is specific to the instance, such as
        directly provided interfaces and data, for example attribute values
        and annotation values.

      - Implemented the `devmode` switch for `zope.conf`. When turned on a
        ZCML feature called `devmode` is provided. Packages can then register
        functionality based on this feature. In Zope 3 itself, the devmode is
        used to only load the API doc is devmode; turning off the devmode thus
        closes a potential security hole and increases the start time by more
        than a second.

      - The ZServer has been replaced with the Twisted server. The Twisted
        server supports all that the ZServer supporting has well has HTTP over
        SSL natively and SFTP (disabled for now because of error handling
        problems).  Also in the future it brings a better chance of other
        non-HTTP related protocols from being implemented for Zope3, like
        SMTP-in and IMAP.

      - Added modified description for sequence-like interfaces.

      - Added a test browser. The test browser simulates a real Web browser as
        much as possible as a Python object. This allows us to write
        functional tests the same way the site would be experienced by the
        user. This greatly simplifies functional tests, makes documentation
        better and even helps analyzing usability. And of course, it can be
        used in functional doctests.

      - addMenuItem directive supports a `layer` attribute.

      - Changed the Publisher Response API.

        + Large results can now ne handled efeciently by returning
          files rather than strings.  See the file httpresults.txt in
          the zope.publisher package.

        + The unused response.write method is no-longer supported.

        + HTTP responses provide two new methods that make reading the output
          easier: `consumeBody()` and `consumeBodyIter()`. Either method can
          be only called once. After that the output iterator is used and
          empty.

        + When a retry is issued in the publisher, then a new request is
          created. This means that the request (including its response) that
          were passed into `publish()` are not necessarily the same that are
          eventually used. This caused some failures in the WSGI support. Now
          the `publish()` method returns the used request and the request's
          `close()` method does not unlink the response, so that
          `request.response` is still available after the publish call.

      - Added a re-implementation of i18n message IDs (now simply
        called ``Message``) that is immutable and thus can be treated
        like unicode strings with respect to security proxying.  This
        implementation will replace the old one in upcoming versions.

      - Implemented content providers, a new method of constructing
        pages. Content providers will be used to develop high-level packages
        providing many useful features.

      - Implemented viewlets, an extension of content providers. Viewlets
        allow one to easily develop component-driven UIs.

      - Implemented XML-RPC Introspection. XML-RPC Views can therefore
        be used by the client for API discovering, through three
        methods: listAllMethods, methodHelp and methodSignature

      - The publisher machinery is now completely pluggable. Publishers can be
        registered and configured through ZCML (using the new 'publisher' ZCML
        directive.  see zope/app/publication/configure.zcml). Publishers are
        registered for a sequence of request methods and a configurable list
        of mimetypes.  To register multiple publishers for the same request
        method and the same mimetype (e.g. POST+text/xml: SOAP, XMLRPC)
        publishers can be prioritized and publishers can introspect the request
        environment to decide if they can handle a request or not.

      - Added "test" message catalog for testing i18n.  If you specify
        ++lang++test in a URL, then all translated strings will be
        translated to [[domain][message_id], as in "[[zope][Preview]]".
        Text without the domain marker isn't translated.

    Restructuring

      - Mutable MessageIDs have been deprecated and will be removed in
        Zope 3.3.  From now on, please use

          zope.i18nmessageid.Message{Factory}

        instead of

          zope.i18nmessageid.MessageID{Factory}

        and

          zope.app.i18n.ZopeMessageFactory

        instead of

          zope.app.i18n.ZopeMessageIDFactory

        Zope itself now uses immutable messages everywhere.

        See zope/i18nmessageid/messages.txt for more information.


    Bug Fixes

      - Fixed issue 432: ``zope/server/trigger.py`` buggy on Windows

        Copied the latest ``trigger.py`` from ``ZEO.zrpc``. This is okay,
        since we are fading out the ``zope.server`` code. I think that a
        dependency on ZEO would have been a bit heavy.

      - Fixed bug 457: Workflow-3.0.0 to Zope3.1

        baldtrol submitted some patches to make ``zope.app.workflow`` work with
        Zope 3.1 and up again.

      - Fixed issue 467: Metadata: [Refresh] button should reset your input
                         data

      - Addressed issue 469: xmlrpc directive without permission attribute error

        Solved the issue by requiring the permission attribute, like it is
        done in the browser directives.

      - Fixed issue 470: ``implementedBy`` can raise undocumented exception
                         ``AttributeError``

        Make sure that the ``implementedBy(interface, obj)`` call always
        succeeds. An attribute error was raised, if ``obj`` did not have an
        attribute called ``__name__``.

      - Fixed issue 475: zope.app.component.browser has no tests

        Reactivated the commented tests and updated them to the new API.

      - zope.configuration doesn't hide import errors inside python
        modules anymore.

      - Fixed Bug 484: Viewmeta directive bug. The browser:view and page:view
        directives did not apply the 'allowed_attributes' attribute and the
        unit test checking this was broken because the 'attribute' will always
        be available regardless of 'allowed_attributes'.

      - Fixed bug 152 and 114: "redirects with large HML" and "logging http
        disconnects". Added an observer for twisted's log that routes error
        messages to the python logging facility for "twisted" on DEBUG level.

      - Fixed bug 185: Keyword Index isinstance check fails on security proxy

      - Improved bug 199: ZPTPage macro expansion
        Changed label text to match the corresponding label in Zope 2 and
        activated the name spaces for macro expansion in read().

      - Fixed bug 489: Template Parse Errors Do Not Report the Filename

      - Fixed bug 485: ServerControlForm.html / Restart, Shutdown does not
        work. This uses twisted's reactor now, implements the countdown
        feature and provides sensible user feedback with a real page.

      - Fixed bugs 468 and 443: Invalid escaping of xml/html data on ZPT pages
        and text/* files.

      - Fixed a bug in adapter registrations that caused errors and
        lookup failures when specifications had multiple base
        specifications.

      - Made OrderedContainer.updateOrder send an IContainerModifiedEvent.

      - Fixed bug 451, http://www.zope.org/Collectors/Zope3-dev/451
        Invoke widget factories adequately. Deprecate
        CustomSequenceWidgetFactory because it does not satisfy IViewFactory.

      - zope.tales.expressions.simpleTraverse would raise NameError if the
        object at hand did not implement __getitem__. Changed to raise
        AttributeError instead. AttributeError is included in Undefs whereas
        NameError is not.

      - Fixed bug 405, http://www.zope.org/Collectors/Zope3-dev/405
        Needed check for common bug when calling apply on field indexes.

      - Fixed bug 402, http://www.zope.org/Collectors/Zope3-dev/402
        classImplements after classImplementsOnly lost the interfaces
        declated in classImplementsOnly.

      - Fixed bug 396, http://www.zope.org/Collectors/Zope3-dev/396.
        When doing multi-adapter lookups, the interface of the first
        object wan't given adequate weight.

      - Fix: OnlineHelp source files and textual resources now
        use UTF-8 as default encoding.

      - Fixed issue #455: tal:content="" does not get translated
        by i18n:translate=""

      - Fixed issue #390: Deprecated ``IBaseRequest.body`` and
        ``IBaseRequest.bodyFile``. The latter was simply renamed to
        ``IBaseRequest.bodyStream``. No code assumes anymore that the input
        streams are seekable.

      - Fixed issue #450: ignore python level CookieError and report them
        to the log file.

      - Fixed issue #445: gadflyDA not full implementation

      - Fix: Pagelet directive was ignoring the permission. Pagelets which
        not the right permission are not shown if calling via the Tales
        expression ``pagelets:``. If calling named pagelets directly via the
        Tales expression ``pagelet:`` we raise a Unauthorized exception if
        the permission isn't right.

      - Fixed a crash in the test runner when the curses module is available,
        but it cannot find the terminfo database to determine the screen
        width.

      - Fixed issue #476: Deleting utilities in site management view doesn't
        work correct.

      - Site Management View :
         It is now possible to directly add a utility without a name.
         When renaming a utility the old name is no longer left as key name
         in the tools folder. This bug created a UserError when the old
         utility name was used for a new utility after renaming.
         Added better error messages.

    Much thanks to everyone who contributed to this release:

      Stephan Richter, Roger Ineichen, Marius Gedminas, Julien Anguenot, Benji
      York, Gary Poster, Jim Fulton, Michael Kerrin, Torsten Kurbad,
      Philipp von Weitershausen, Tarek Ziad, Andreas Jung, Dmitry Vasiliev,
      Juergen Kartnaller, Stefan Holek, Dominik Huber, Christian Theune

  ------------------------------------------------------------------

  Zope 3.1.0 (2005/10/03)

    New features

      - Implemented the METAL 1.1 macro language in page templates.
        This adds the "macro extension" feature to the METAL 1.0
        implementation included in previous versions of Zope.  The new
        specification is available in the ZPT wiki:
        http://www.zope.org/Wikis/DevSite/Projects/ZPT/MetalSpecification11

      - Change ``zope.app.intid.addIntIdSubscriber`` and
        ``.removeIntIdSubscriber`` to adapt it's ob argument to
        ``IKeyReference``. They register/unregister the object only if
        it gets an adapter.

      - Add ``content_factory_id`` attribute to the ``addform`` and
        ``addwizard`` directive so that named factories can be invoked too.

      - Add ``locate`` attribute to the adapter directive in order to ensure
        location for security proxied objects. An explicit ``locate`` should
        be provided, if complex adapter security declarations within an
        additional class directive are used.

      - The ``http()`` function exposed to functional doctests how accepts
        an optional "form" argument to use as the set of form values.
        This works for any type of request; this can used to make
        functional doctests involving form submissions much easier to
        read and maintain.  It's also convenient when some of the form
        values are computed.

      - Implemented proper HTTP 405 Method Not Allowed handling in the
        HTTP publication if a requested method does not have a corresponding
        view.

      - Implemented a generic user preferences system.

        * User preferences are combined in groups that are described by
          schemas.

        * One can create a tree of preference groups using Python's dot
          notation in the group ids.

        * Preference groups can be declared to act as categories, which is
          used by the UI to improve the organization of the preferences.

        * Using a default preference provider, the site administrator can
          customize the default settings of the preferences for a user on a
          site wide bases. Acquisition in multi-site pages is supported.

        * The preferences are very easily accessible in TALES via a traversal
          namespace::

            /++preferences++/zmi/folder/sortedby

        * Preferences are easily accessible in Python code::

           >>> prefs = IUserPreferences(context)

          where the context merely has to be an ``ILocation``.

        * Preferences can be easily edited using intuitive URLs::

            http://localhost:8080/++preferences++/zmi

        * Provided a demo that demonstrates how preferences can be used to
          select the user's skin.

      - Added virtual host support in xml and static tree. The tree will
        switch the root to the virtualhost base.

      - Change ``addMenuItem`` directive. Make use of class and menu
        attributes.  This makes it possible to use the directive for own
        ``IAdding`` menu implementation. The ``addMenuItem`` directive
        supports now also the order layer, extra and icon attributes.

      - Added the HTTP request recorder, which lets you inspect raw HTTP
        requests and responses.  It can be used to create functional doctests
        without requiring third-party tools such as TCPWatch.  See the
        `README.txt` file in ``zope.app.recorder`` for instructions.

      - ``zope.app.form.utility`` ``setUpEditWidgets``, when given a source
        that is security proxied and asked to set up edit widgets
        for fields that will raise ``Unauthorized`` when set, now raises
        ``Unauthorized`` by default, eliminating the lie that the form
        is usable.  It also accepts ``degradeDisplay`` and ``degradeInput``
        optional keyword arguments to change the behavior to degrade
        unavailable input widgets to display widgets and to hide
        unavailable display widgets.  ``setUpDisplayWidgets`` also accepts
        ``degradeDisplay``.

      - Implemented issue 306: page/view-menu-layer configuration

        Added a layer argument to the menu directives and made sure that all
        browser directives specify the layer for the menu directives.

      - Implemented issue 292: Add factory to ``browser:resource`` directive

      - Implemented issue 309: ``<schemadisplay>`` should support ``<widget>``

      - Developed a generic ``browser:form`` directive. It is pretty much the
        same as the ``browser:editform`` directive, except that the data is
        not stored on some context or adapted context but sent as a dictionary
        to special method (by default). By default these methods are named
        ``getData()`` and ``setData(data)``.

      - When raising the ``Unauthorized`` exception, the security checker
        now passes the object in question in addition to the attribute
        name and missing permission. This should make debugging easier.

      - You can declare "features" provided by your package with the new
        ``<meta:provides feature="name" />`` ZCML directive. The presence of
        these features can be tested with the new ``zcml:condition``
        attribute.

      - ZCML supports conditional directives using the zcml:condition
        attribute. The value of the attribute is an expression of the
        form "verb arguments". The following verbs are recognized:

        * `have` -- It takes a single name of a feature as an
          argument.

        * `installed` -- It's argument is a single package name. If the
          package is importable, return true.

        If the expression is true, the element the attribute is attached to
        will be used, otherwise the element and its descendents will be
        ignored.

      - API doctool has received some upgrades:

        * Fixed security hole by disabling automatic import of paths when a
          module is not available in ``sys.modules`` by default. It can be
          activated using::

            <apidoc:moduleImport allow="true" />

        * Code Browser now also shows interfaces and text files.

        * A new `bookmodule` compiles all our `README.txt` and other text
          documentation files to a nice book-like format.

        * A new ``typemodule`` lists all interface types (such as
          ``IContentType``) and then let's you see all interfaces providing
          this type (for example ``IFile``)

        * Views are now shown in the Interface details screen.

        * Adapters and Views are split into three categories: specific,
          extended, and generic.

        * User Preferences allow you to customize the behavior while using the
          tool.

        * Using the preferences, you can select which views and adapters you
          want to see by default in the interface details screen.

      - Zope 3 can now listen on specified network interfaces only.  Example
        of a server section in `zope.conf`::

            <server>
              type HTTP
              address 127.0.0.1:8080
            </server>

      - Improvements to ``zope.i18n.format``.

        * Support for parsing and formatting timezones based on ``pytz``.

        * Reinterpretation of of ICU documentation, revealed that any number
          of formatting fields should be accepted by the formatter and parser.

        * Implemented formatting of several missing formatting fields. Now all
          fields are correctly implemented.

      - Added ``pytz`` to the repository. Stuart Bishop licensed it for us
        under ZPL 2.1. Thanks!

      - New schema field: ``Timedelta``.

      - Implemented some initial deprecation framework, see
        ``zope.deprecation``. It allows one to deprecate methods and
        properties in classes as well as any name in a module.

      - The ``browser:containerViews`` directive provides an optional layer
        attribute.

      - Groups for unauthenticated users, authenticated users, and
        everybody can now be defined in ZCML.

      - A ``handler`` attribute is now used in ``subscriber`` directives for
        event subscribers that don't create objects, which is the case
        for most subscribers.  Using the ``factory`` attribute without a
        ``provides`` attribute to register a handler is deprecated.

      - Added the function ``zope.component.adapts`` for declaring interfaces
        adapted by classes. This is similar to zope.interface.implements in
        that it puts a marker on the class that has a significant meaning in
        the component architecture machinery.

      - It is no longer necessary to supply a for attribute in adapter
        directives if the factory declares the interfaces or classes that it
        adapts using ``zope.component.adapts``.

      - It is no longer necessary to specify a provides attribute in
        an adapter or utility directive if the factory/component
        implements/provides a single interface.

      - Added ``zope.security.canAccess`` and ``zope.security.canWrite``
        convenience methods.  Often code wants to check if a certain option is
        open to a user before presenting it.  If the code relies on a certain
        permission, the Zope 3 goal of keeping knowledge of security
        assertions out of the code and only in configuration is broken.
        Instead, ask if the current interaction canAccess or canWrite some
        pertinent aspect of the object.  canAccess is used for both read
        access on an attribute and call access to methods.

      - Added lazy properties. (See `zope/cachedescriptors/README.txt`)

      - Added new ``getNextUtility()``, ``queryNextUtility()``, and
        ``testingNextUtility()`` functions to make it easier to find and test
        for utilities in higher-up sites. These mimic their service-based
        equivalents.

      - Added a simplified Python API for registering global utilities
        and adapters.

      - Added initial indexing and cataloging support

      - Added an integer-id facility for assigning integer identifiers
        to objects.  In Zope 2, this functionality is internal to
        catalogs. By separating id management out, multiple catalogs
        and indexing structures can share the same id scheme, allowing
        cross-catalog joins and other sorts of aggregated analyses.

      - Added ``getInfo(generation)`` method to ``zope.app.generations``'s
        ``ISchemaManager``. It will return some information about the evolver
        that brings the database to the specified generation. This way we can
        document the various evolutions. The standard ``ISchemaManager``
        implementation uses the ``evolve()`` function's docstring to determine
        the information string. Added a view showing the information strings
        via the Web UI.

      - Implemented local permission. This is not really that interesting
        right now, since we do not support TTW development yet, but it will
        become important somewhen.

      - Page templates now allow ``metal:define-macro`` and
        ``metal:use-macro`` in the same tag.  This allows a macro to
        extend another macro, which is particularly useful for writing
        a skin that customizes another skin.

      - Allow the ``widget`` subdirective to be used without specifying
        a ``class`` attribute.  This allows overriding some attributes
        for the default widget implementation without having to
        specify the widget class itself.

      - Added a ``debug`` command to ``zopectl``.  This loads the Zope
        configuration and provides an interactive Python session in
        which a ``zope.app.debug.debug.Debugger`` instance has been
        provided as the "debugger" or "app" variable.  This allows
        exercising Zope under the debugger using the same appserver
        configuration that the server process uses.  The servers
        themselves are not started.

      - Created a new granting UI that allows advanced searching of
        principal sources.

      - Implemented the ``zope:localService`` directive, so that you can use
        it instead of the ``zope:content`` directive, which we had to use
        before. The new directive automatically makes the service implement
        ``ISimpleService``. I also changed all the local service declarations
        to use this new directive.

      - Implemented the ``zope:localUtility`` directive, so that you can use
        it instead of the ``zope:content`` directive, which we had to use
        before. The new directive automatically makes the utility implement
        ``ILocalUtility`` and ``IAttributeAnnotatable``. I also changed all
        the local utility declarations to use this new directive.

        The directive now also makes sure that the class implements the
        ``IPersistent`` and ``ILocation`` interfaces; without those a class
        cannot be a local utility. This addresses issue 297.

      - The ``Attribute`` and ``Method`` class of the ``zope.interface`` have
        now a new public `interface` attribute that stores the interface they
        are defined in.

      - New Pluggable Authentication Utility (PAU), which is similar in
        philosophy to the Zope 2 PAS. The following features are available in
        the in the basic PAU facility:

        o Credentials Plugins: Basic HTTP Auth, Session

        o Authenticator Plugins: Principal Folder, Group Folder

        For a detailed description of the pluggable authentication utility,
        see ``zope/app/authentication/README.txt``.

      - Added "sources", which are like vocabularies except that they
        support very large collections of values that must be
        searched, rather than browsed.

      - Ported Zope Version Control

      - Added the option ``-1`` to the test runner to suppress doctest
        errors after the first within each doctest.

      - If the adapter factory returns ``None`` as adapter instance, the
        default is returned instead of `None`. For benefits and the
        discussions see
        `http://mail.zope.org/pipermail/interface-dev/2004-September/000070.html`

      - Added new API method ``getAdapters(objects, provided)`` to ``zapi``. It
        will return all available adapters for this configuration. Note that
        every name will be only returned once.

      - When parsing a DSN, allow the host to be specified without a port.

      - Added ``apidoc:rootModule`` directive, so that third-party products can
        add their packages to the class browser documentation module.

      - Separated the trusted and untrusted behaviors of page
        templates in the application server.  File-system-based
        templates are trusted, and database-based templates are
        untrusted.

      - Implemented ``rdb:gadflyRoot`` directive.

      - Schemas are now copied before they are appended to content type or
        instance. This should probably become a policy later.

      - Implemented ``ICacheable`` view's ``current_cache_url()`` method, so
        that a link to the cache utility can be provided.

      - Added '++debug++' traversal adapter that allows you to turn on
        debugging flags in ``request.debug``.  Currently the following flags
        are defined:

        + "source" adds HTML comments to rendered page templates showing
           where each code snippet came from.

        + "tal" leaves TAL/METAL markup in rendered page templates allowing
          you to see how it was generated.

        + "errors" shows full tracebacks when a system error occurs.

        Try e.g. `http://localhost:8080/++debug++source,tal/@@contents.html`
        and view the source of the resulting page.

      - Added 'url' adapter for ``IPathAdapter``. It provides quoting
        mechanisms to strings (and string-like objects) from within ZPT, e.g::

        tal:attributes="href string:login.html?nextURL=${request/URL/url:quote}

        Other functions available are ``quote_plus``, ``unquote``,
        ``unquote_plus``.

      - Added basic cataloging functionality.

      - Added functions (``zope.app.container.constraints.contains`` and
        ``zope.app.container.constraints.containers``) that greatly simplify
        expressing containment constraints.

      - Added a view `failsafelogin.html` that always uses HTTP basic auth
        credentials to identify a principal. This can be used to login as
        admin in the event a site authentication configuration is broken and
        needs to be fixed. E.g. to login using basic auth, use a URL such as:

          http://yoursite.com/@@failsafelogin.html

      - Added support for different text orientations in locale data.
        This is typically used for loading different webpage
        stylesheets when the locale uses right-to-left characters.

        The orientation of lines is typically accessed through
        ``request.locale.orientation.lines``, the orientation of
        characters within a line through
        ``request.locale.orientation.characters``.  Both variables can
        hold either value of 'left-to-right', 'right-to-left',
        'top-to-bottom', 'bottom-to-top'.

      - Made overriding ZCML directives easier by allowing packages to
        drop ZCML slugs ending with ``*-overrides.zcml`` into
        ``package-includes``.  These slugs will be loaded as overrides.

    Restructuring

      - Applied changes suggested in issue 339: Improvements to generated forms

      - Deprecated ``zope.app.introspector``. You should use the public apidoc
        utilities instead. A new "Introspector" tab was implemented that
        redirects you to the correct code browser documentation screen.

      - Ensured that all adapters can be registered for classes as well as
        interfaces by writing tests for all adapter-based directives. It
        turned out that subscribers did not accept classes yet, so I
        implemented the feature for subscribers.

      - Addressed issue 295: Sort out ``defaultView``.

        Deprecated ``zope:defaultView`` directive and removed unused default
        view handler in ``zope.app.publisher.browser.viewmeta``. Added a
        ``layer`` attribute to the ``browser:defaultView`` directive.

      - ``zope.component.createObject`` no longer accepts a positional
        context argument.  A context can be provided as a keyword argument.

      - Deprecated ``_configureCopy`` in
        ``zope.app.copypastemove.ObjectCopier``. To configure a recently
        copied object, subscribe to ``IObjectCopiedEvent`` for the type of
        object you're interested in configuring.

      - Several changes have been made to the API doc tool:

        + Rewrote the ZCML file parser to reuse the ``zope.configuration``
          code. This makes the code much more stable and predictable.

        + General inspection utilities are now *publically* available in the
          modules: `utilities`, `interface`, `component`, `presentation`,
          `classregistry`

        + The interface details view has been broken up into macros, so that
          the HTML code snippets can be reused.

        + Converted most tests to text files.

        + Moved code from ``__init__.py`` files to modules.

        + Removed ``viewmodule``, since its functionality has been merged into
          the interface details view.

      - Changed the test-counting mechanism for doctests.  Now a
        doctest count a test for every example that is preceded by
        prose. (Although a doctest will never count less than 1 test.)

      - Moved reusable test setups/APIs from ``zope.app.tests`` to
        ``zope.app.testing``. No reusable testing code should be in a ``tests``
        package or module.

      - Removal of Services. You can now access the adapter and utility
        registry directly via the site manager's ``adapters`` and ``utilities``
        attribute, respectively.

        + Converted `Error Reporting Service` to a utility. Added database
          evolution code to convert all service instances to utilities.

        + Converted `Authentication Service` to be a utility. Renamed PAS to
          PAU.

        + Converted `Principal Annotation Service` to be a utility. Added
          database evolution code to convert all service instances to
          utilities.

        + Converted `FSSync` Service to be a utility.

        + Created the concept of a global site manager. The adapter and
          utility registry, formerly the adapter and utility service, are now
          managed by the site manager.

        + The ``zope.app.utility`` package has been merged into
          ``zope.app.component``. The utility registration class is in
          ``site.py``. The utility vocabulary is in ``vocabulary.py``.

        + The ``zope.app.site`` package has been merged into
          ``zope.app.component``. The site code can be found in ``site.py``.

        + Fixed persistent modules code. Persistent modules are now simply
          utilities providing ``IModuleManager``. The local site manager also
          does not know any thing about persistent modules anymore.

        + Updated ``zope.app.pluggableauth``, so that it will work as an
          authentication utility.

        + Restructured ``zope.app.presentation`` (a.k.a page folders) to
          the new component API.

      - Simplified the registration framework by only supporting two states:
        `active` and `inactive`. This allowed us to get rid of the
        registration stack and the complexity it introduced to the site
        management.

      - Removed all presentation-related APIs from ``zope.component``. This
        included the removal of presentation-related interfaces and the
        deprecation of all view-related API functions. One should use the
        adapter API functions instead.

      - The ``pluggableauth`` package has been deprecated. The
        ``authentication`` module provides a much more modular approach with
        many more capabilities.

      - Removed special ``DomainRegistration`` now that we have events for
        notification.

      - Removed special ``RoleRegistration`` now that we have events for
        notification. Also, renamed ``PersistentRole`` to ``LocalRole``.

      - Refactored Registration component for local components

        + Deprecated the ``activated()`` and ``deactivated()`` method. It is
          now replaced with the ``IRegistrationActivatedEvent`` and
          ``IRegistrationDectivatedEvent``, respectively.

        + Added an event dispatcher for component registrations to support
          subscriptions for specific component types. E.g. one can declare a
          subscriber for ``(IFoo, IRegistrationActivatedEvent)`` to be
          notified when ``IFoo`` component registrations are activated.

        + Restructured registration framework to use direct references rather
          than paths.

      - Replaced ``NotFoundError`` uses with more specific and meaningful
        exceptions. Eventually, ``NotFoundError`` will be deprecated.

        - Publishing traversal components now raise ``NotFound``

        - Other traversal components raise ``TraversalError``

        - ``getPrincipal()`` of ``IAuthenticationService`` now raises
          ``PrincipalLookupError``.

      - Removed Browser Menu Service and implemented menus as subscriber
        adapters. Menus are utilities providing ``IBrowserMenu``. The default
        menu implementation looks up menu items as views on the provided
        object. The view must provide ``IMenuItemType``.

        + Implemented sub-menus. Sub-menus keep track of the menu id that
          provides the sub-entries.

        + Completes `http://dev.zope.org/Zope3/AdaptersForMenuItems`. New
          features such as sub-menus, icons, disabled entries and so on were
          not well defined and should be reconsidered in a different proposal.

        + Backward-compatibility of the existing ``browser`` directives was
          ensured.

        + If you have a directive that accepts a menu as attribute, it now
          needs to be a ``MenuField``, so that it is correctly resolved to a
          menu interface.

        + The ``browser:menu`` directive has now an optional ``interface``
          attribute that allows you to specify a particular menu interface
          instead of having the machinery create one for you.

        + The two API methods ``getMenu()`` and ``getFirstItemOfMenu()`` of
          the Browser Menu Service are now available as functions in
          ``zope.app.publisher.browser.menu`` having identical semantics.

        + Added the ``order`` attribute to the menu item that declares the
          item's relative position. In general the menu items are always
          sorted from most to least specific, which is determined by the order
          of the implemented interfaces of the object. If ambiguities still
          exists, the order and then the title of the menu item are taken
          account.

      - Removed Presentation Service and implemented views as adapters. This
        mainly means that layers and skins became adapters. Here are some
        other points:

        + Completes `http://dev.zope.org/Zope3/ImplementViewsAsAdapters`.

        + Backward-compatibility of the Zope component API and the browser
          directives was ensured.

        + The ``setPresentationSkin()`` and ``getPresentationSkin()``
          directives of ``IRequest`` objects were removed. They were not used
          anywhere but testing anyways.

        + The default skin is now just an adapter from ``IRequest`` to
          ``IDefaultSkin``. You have to use ``adapter_service.lookup()``,
          since the returned component is a skin interface and not a factory.

        + The adapter service can now provide adapters from objects as well,
          like it was possible in the presentation service before.

        + Gave ``browser:skin`` and ``browser:layer`` directive a new
          attribute ``interface``, which allows you to directly specify the
          skin's or layer's interface instead of autogenerating it.

        + Created function ``applySkin(request, skin)``
          (``zope.app.publisher.browser``) that allows you to assign a new
          skin to a request. This effectively replaces the
          ``setPresentationSkin()`` method.

        + Created an explicit ``IDefaultLayer``, which is, by default, added to
          incoming browser requests. However, it is not added when an explicit
          skin is specified. This allows developers to create skins that do
          not include the default layer.

      - Replaced ``copypastemove.rename`` with adapters to
        ``IContainerItemRenamer``.  Instead of
        ``rename(container, oldName, newName)``, one should use
        ``IContainerItemRenamer(container).renameItem(oldName, newName)``.

      - Moved site-specific security policy configuration into
        ``securitypolicy.zcml``. If you want to change the default security
        policy for a Zope instance, you can modify this file in your etc
        directory.

      - Added formal support for logout. See ``zope/app/security/logout.txt``
        for more information.

      - Made the 'Logout' link optionally configured by registering a marker
        component in ZCML. To display the link, add this:

          <adapter factory="zope.app.security.LogoutSupported" />

        to your ``site.zcml`` or ``overrides.zcml``. The burden is now on the
        site admin to configure a site so that the ``logout()`` function is
        supported.  (The default authentication scheme, HTTP basic auth, does
        not support logout.) See ``zope/app/security/browser/loginlogout.txt``
        for details.

      - Changed directory resources to support recursion into subdirectories.

    Bug Fixes

      - Request factories were not uniformly pluggable.  All are pluggable now
        without having to write a new server.

      - Fix #433: Bogus ZEO scripts.

        The (non-functional) runzeo.py, zopectl.py, zeopasswd.py and
        mkzeoinst.py scripts were removed from the 'bin' directory of
        Zope installations.  A replacement for creating ZEO instances,
        mkzeoinstance, was added instead.

      - Fixed a bug in source widgets: hasInput should always return True after
        an initial render even if field (context) is required.

      - Fixed a bug in the codemodule of apidoc that prevented the class
        documentation code to detect the interface in which an attribute,
        property or method was declared.

      - Fix #421: TextArea widgets didn't handle missing values
        correctly.

      - Fix #384: Handling utility permissions

        When defining utilities in ZCML with permissions, checker
        objects were saved on the utility's __Security_checker__
        attribute. This caused problems if the component was
        registered more than once, or if the component was a class.
        Now a proxy is used to hold the security checker, so that the
        checker is specific to a particular registration.

      - Fix  307: browser:addMenuItem and broken view references

      - Fix #411: Remove SendmailMailer

      - Fix #302: File objects can contain non-ASCII characters and be editable
        through the web.

      - Container proxy instances had __dict__ attributes that hid
        the __dict__ attributes of proxied objects.

      - Fix #284: Bogus 404 errors with TALES traversal fails

      - Fix #298: Role/permission title and description should be messageids

      - Fix #332 : Death to IContentContainer

      - Fix #356 : Copy and Paste does not handle exceptions raised by
        ``__setitem__``

      - Made different key reference implementations comparable:
        ``IKeyReference`` interface is extended by an additional
        ``key_type_id`` attribute.

      - Fixed issue #400: i18n image broken in trunk

      - Fix #392 : adapter registry subscribers method can return None
        when it shouldn't

      - Fix 'Wiki permissions and PAU' bug reported by Paolo Invernizzi

      - Assert location if a non-public permission was specified within an
        adapter directive so that restricted adapters work with local
        authentication too.

      - Fix #313 : `importchecker.py` ignores assignment to module attributes

      - Fix #327 : File type change clears object content

      - Disabled automatic translation of message id's in TAL.

      - Fixed ``tal:replace="default"`` bug.

      - Fixed issue #380: Local Utility don't get correct removed

      - Fixed issue #369: DAV is broken on the trunk.

      - Fixed issue #407: `zope.app.publication.http.MethodNotAllowed.__str__`:
        ``request`` should be ``self.request``

      - Fixed issue #333: XML Tree doesn't load if some item
        contains non-ASCII characters

      - Fixed issue #301: Bug with ``i18n:name`` and ``i18n:translate``
        on the same element

      - The interface directive supports multiple interface types now.

      - Fixed issue #314: ``i18n:translate`` removes line breaks from
        ``<pre>...</pre>`` contents

      - The ``getAdapters()`` function on site managers returned ``None`` when
        adapter factories returned ``None``. These values should not be
        included in the output and now aren't.

      - Fixed issue #394: starting zope with command ``-C`` arg
        causes ``request.form`` to contain ``'-C':''``

      - Fixed issue #387: apidoc and Cookie

      - Fixed issue #334: Failing ``RuntimeInfo`` tests

      - Fix: Register the `zmi_actions` on the right layer if the layer
        attribute is used in the containerViews directive

      - Fix: Make use of the ``layer`` attribute in the ``menuItemDirective``

      - Fixed issue #345: Using ``response.write`` should not involve unicode
                          conversion

      - Fixed issue #371: ``OrderedMultiSelectWidget`` ignores
                          ``setRenderedValue``

      - Fixed issue #360: ``MultiSelectWidget`` configured for ``ISet`` but
                          creates list

        The correct type of the collection field is now discovered and used.

      - Addressed issue #348: ZCML hides import errors

        I tried really hard to get a better error message, but it is not
        possible, so I just prepended "ImportError:" to the error message.

      - Fixed issue #352: documentation for
        ``zope.app.form.interfaces.IInputWidget.validate`` is wrong

      - Fixed issue #317: Relative links don't work in Page Template

      - Fixed issue #335 (`debug` layer does not work with Zope3-trunk)

      - Fixed issue #338 (`zapi` help missing from the online help)

      - Fixed issue #349 (Adapter registry doesn't notice `__bases__` changes.)

        Thanks to "foom" for the report and the fix.

      - Fixed issue #354 (apidoc: ``SubscriptionRegistration`` object has no
                          attribute ``name``)

      - Fixed issue #366 (`_zope_interface_coptimizations.c` compilation error)

      - Fixed issue #368 (Typo fix in `src/zope/app/container/constraints.py`)

      - Fixed issue #329 (apidoc + TAL)

      - Object copy events weren't dispatched for object sublocations.

      - When I converted layers and skins to interfaces, I got the layer part
        wrong and made layer interfaces extend ``ILayer``. But ``ILayer`` is
        an ``IInterface``, *not* an ``Interface``. Layers should not extend
        but provide ``ILayer``.

      - Fixed most formatting characters for i18n's datetime formatter.

      - Partially fixed issue #306 (Problem 2: Browser ``page`` and ``view``
        directive cannot register several pages views within different layers
        for the same for, menu and title attributes.)

      - Fixed issue #353 (``applySkin()`` does not work in functional doctests).

      - Fix ``SequenceWidget``s. Added a ``CustomSequenceWidgetFactory`` for
        using object widgets within a sequence. Added a howto for``
        ObjectWidget``.

      - Fixed issue #293 (``SequenceWidget`` and ``CustomWidgetFactory``).

      - ``TextWidget``s set the ``value`` attribute to "value" when the field
        has a missing value set and was not required and when there
        was no input.

      - Fixed a bug in the adapter registry that would prevent `dict`-derived
        utilities from being retrieved correctly.

      - Resolved issue 304 (Slash involve dbname). We require now that all
        values in a DSN are properly URL-encoded, so that all values can
        contain any special character, except for the hostname and the port.

      - Fixed `intid` utility: Registration and unregistration of
        local utility services, context aware registration of nested
        components that may provide their own intids utilities.

      - Fixed ``browser:defaultView`` metaconfigure: ``for_`` passes a
        ``GlobalObject`` and not a ``Token`` of ``GlobalObjects``.

      - Changed negotiator import with ``INegotiator`` utility lookup in
        default global ``TranslationDomain``. This makes it possible to
        use local ``INegotiator`` utilities with the standard translation
        domain.

      - `contents.html` no longer breaks when no ``IAdding`` is available.

      - Fixed the page that reports "system errors", errors that
        represent a failure of the system, rather than the user, to set
        the response status to 500.

      - ``NotFound`` pages and status codes are now returned only when
        something can't be found during publishing-path (e.g. URL)
        traversal. Traversal errors within application code are no
        longer treated as "Not Found" errors.

      - Added missing modification events when add forms modified
        objects (assigned properties) after they were added.

      - Small but important fix to security map. It was not marking objects
        with modified permissions as changed, due to a missing assignment.

      - ``Contents/contents.p``t didn't quote the values that were used in
        ``href:``'s, thus it couldn't function properly if the items contained
        certain characters.

      - If the `content-type` was "text/*", ``HTTPResponse.write` re-set the
        `content-length` header to the first chunk of data.

      - Don't unconditionally add `Content-Length` header in
        ``HTTPResponse.getHeaders()``. Do it only in ``output()``, where the
        size of the data is known.

      - Let the determination of an HTTP request's locale be handled
        by an adapter that is actually looked up by interface
        (``IUserPreferredLanguages``), instead of hard-wiring the
        default one.

      - For ``for`` parameter of the ``browser:menuItem`` and
        ``browser:menuItems`` directives was not marked as required in
        the directive schema, while it actually was expected to be
        required.

      - Added redirection of stdout / stderr when running as a windows
        service (otherwise logging and other output will cause problems).

      - Made the <includeOverrides /> ZCML directive behave like the
        <include /> directive with respect to the 'files' parameter.

    Much thanks to everyone who contributed to this release:

      Jim Fulton, Fred Drake, Philipp von Weitershausen, Stephan Richter,
      Gustavo Niemeyer, Daniel Nouri, Volker Bachschneider, Roger Ineichen,
      Shane Hathaway, Bjorn Tillenius, Garrett Smith, Marius Gedminas, Stuart
      Bishop, Dominik Huber, Dmitry Vasiliev, Gary Poster, Brian Lloyd,
      Julien Anguenot, Albertas Agejevas, Benji York

  ------------------------------------------------------------------

  Zope X3.0.1 (2005/07/27)

    Bug Fixes

      - Updated the French translation.

      - Backported some small fixes from the trunk to fix i18n of forms.

      - Fixed issue 298 (Role/permission title and description
        should be messageids)

      - Several fixes were backported from the Zope 2.8 integration
        branch, making the main X3.0 line compatible with Zope 2.8 and
        thus allowing X3.0 releases to be included into Zope 2.8
        releases without modification.

      - Fixed issue 333 (XML Tree doesn't load if some item
        contains non-ASCII characters).

      - Fixed issue 314 (i18n:translate removes line breaks
        from <pre>...</pre> contents).

      - Fixed issue 394 (starting zope with command -C arg
        causes request.form to contain '-C':'').

      - Fixed issue 334 (Failing RuntimeInfo tests).

      - Fix SequenceWidgets
        Added a CustomSequenceWidgetFactory for using object widgets within a
        sequence. Added a howto for ObjectWidget

      - Fixed issue 293 (sequence widget).

      - Backported several bug fixes made to the DSN parser, including issue
        304.

      - Contents/contents.pt didn't quote the values that were used in
        href:s, thus it couldn't function properly if the items contained
        certain characters.

      - If the content-type was text/*, HTTPResponse.write re-set the
        content-length header to the first chunk of data.

      - Don't unconditionally add Content-Length header in
        HTTPResponse.getHeaders(). Do it only in output(), where the
        size of the data is known.

      - For ``for`` parameter of the <browser:menuItem> and
        <browser:menuItems> directives was not marked as required in
        the directive schema, while it actually was expected to be
        required.

      - Made the <includeOverrides /> ZCML directive behave like the
        <include /> directive with respect to the 'files' parameter.

      - Fixed a bug where IntWidget would not render a 0.

    Much thanks to everyone who contributed to this release:

      Jim Fulton, Stephan Richter, Bjorn Tillenius, Yvo Schubbe,
      Stuart Bishop, Stefan H. Holek, Tim Peters, Dmitry Vasiliev,
      Gintautas Miliauskas, Tres Seaver, Philipp von Weitershausen

  ------------------------------------------------------------------

  Zope X3.0.0 (2004/11/07)

    New Features

      - Improved using documentation files as tests. (Needed to test
        new security policy):

        Changed DocFileSuite:

        o If a package is passed, it must be passed as a keyword argument.
          (For now, a package can also be passed before passing any file
          names, but this generates a deprecation warning.)

        o File paths may contain '/'s as separators. These will be converted
          to native file separators at run time.

        o It is now possible to pass set-up and tear-down methods

        o It is now possible to pass a dictionary of initial global variables.

        o Error output is improved as is meta data used for verbose output.

    Restructuring

      - Implemented both, getCell and queryCell, for ISecurityMap. Also
        updated the interface.

      - Removed CacheName field and replaced it by a 'Cache Names' vocabulary
        and a Choice field.

      - Templated Pages are now called ZPT Pages.

      - The "layer" and "skin" ZCML directives were redundantly
        registered for both the zope and the browser namespace. They
        now only exist in the browser namespace; the "defaultSkin"
        directive was moved to the browser namespace.

      - Updating of all doc strings to ReStructuredText begun

    Bug fixes

      - Changed the security policy:

        o Fix a bug (actually a misfeature). It wasn't possible for
          local settings to override global (zcml) settings.

        o Changed the way role denies work.  A role deny simply
          prevents a principal from having a role.  A principal may
          still have access through other roles or through principal
          grants.  Role grants or denies never override principal
          grants or denies *even* if the role-based grants or denies
          are more local.

        o Implemented a caching scheme that provides huge performance
          benefits when the authenticated principal is defined in a
          local auth service, rather than a global one (zcml).

      - Fixed bug in TypeRegistry for
        zope.app.publisher.browser.globalbrowsermenuservice which allows
        passing classes instead of interfaces as well but has a missing import.

      - Assuming a "text/" content type for all files by default
        broke the edit form. "" is the default by now.

      - A monkey patch to cope with weakref problems in Python 2.3.3
        was removed, so Python 2.3.4 is required now.

      - utilities/runurl.py hadn't been updated to reflect recent
        changes in the debugging support.

      - Views for I18nFile/I18nImage now use contentType attribute instead
        of outdated getContentType method.

      - ZopeVersion now knows about Subversion.

      - Fixed issue 264.  Substituting a Unicode value containing
        non-ASCII text into a translated string caused a
        UnicodeDecodeError.

      - Fixed issue 228.

      - Fixed issue 248.  Path expressions in page templates that
        contain empty segments now cause an error to be raised when
        the expression is compiled rather than when it is evaluated.
        This has always been illegal according to the specification,
        and most often caused a runtime error before.  Template
        authors can now get an error up front, avoiding embarrassment
        when once an application is moved into production after
        insufficient testing.

      - Removed 'grants' module from zope.app.security.interfaces
        (ISecurityMap). It is (including implementation) available at
        zope.app.securitypolicy.interfaces.

      - Wrote tests for security map implementation.

      - Factory IDs have to be real IDs now, i.e. either a dotted
        name or a URI.

    Much thanks to everyone who contributed to this release:

      Jim Fulton, Marius Gedminas, Fred Drake, Philipp von Weitershausen,
      Stephan Richter, Dmitry Vasiliev, Scott Pascoe, Bjorn Tillenius,
      Eckart Hertzler, Roger Ineichen, Stuart Bishop, Viktorija Zaksiene

  ------------------------------------------------------------------

  Zope X3.0.0 Release Candidate 3 (2004/10/28)

    (Changelog information rolled into the changes for the final release).

  ------------------------------------------------------------------

  Zope X3.0.0 Release Candidate 2 (2004/10/05)

    (Changelog information rolled into the changes for the final release).

  ------------------------------------------------------------------

  Zope X3.0.0 Release Candidate 1 (2004/10/05)

    (Changelog information rolled into the changes for the final release).

  ------------------------------------------------------------------

  Zope X3.0.0 Beta 4 (2004/09/03)

    (Changelog information rolled into the changes for the final release).

  ------------------------------------------------------------------

  Zope X3.0.0 Beta 3 (2004/08/13)

    (Changelog information rolled into the changes for the final release).

  ------------------------------------------------------------------

  Zope X3.0.0 Beta 2 (2004/07/29)

    New features

      - Separated the trusted and untrusted behaviors of page
        templates in the application server.  File-system-based
        templates are trusted, and database-based templates are
        untrusted.

      - Improved using documentation files as tests. (Needed to test
        new security policy):

        Changed DocFileSuite:

        o If a package is passed, it must be passed as a keyword argument.
          (For now, a package can also be passed before passing any file
          names, but this generates a deprecation warning.)

        o File paths may contain '/'s as separators. These will be converted
          to native file separators at run time.

        o It is now possible to pass set-up and tear-down methods

        o It is now possible to pass a dictionary of initial global variables.

        o Error output is improved as is meta data used for verbose output.

    Bug fixes

      - Fixed issue 248.  Path expressions in page templates that
        contain empty segments now cause an error to be raised when
        the expression is compiled rather than when it is evaluated.
        This has always been illegal according to the specification,
        and most often caused a runtime error before.  Template
        authors can now get an error up front, avoiding embarrasment
        when once an application is moved into production after
        insufficient testing.

      - Fixed the default 'text/*' content type for file objects.
        Backport of the fix for bug 201.

      - Changed the security policy:

        o Fix a bug (actually a missfeature). It wasn't possible for
          local settings to override global (zcml) settings.

        o Changed the way role denies work.  A role deny simply
          prevents a principal from having a role.  A principal may
          still have access through other roles or through principal
          grants.  Role grants or denies never override principal
          grants or denies *even* if the role-based grants or denies
          are more local.

        o Implemented a caching scheme that provides huge performance
          benefits when the authenticated principal is defined in a
          local auth service, rather than a global one (zcml).

      - Fixed bug in TypeRegistry for
        zope.app.publisher.browser.globalbrowsermenuservice which allows
        passing classes instead of interfaces as well but has a missing
        import.

      - A monkey patch to cope with weakref problems in Python 2.3.3
        was removed, so Python 2.3.4 is required now.

      - utilities/runurl.py hadn't been updated to relect recent
        changes in the debugging support.

      - Views for I18nFile/I18nImage now use contentType attribute instead
        of outdated getContentType method.

      - ZopeVersion now know about Subversion.

    Restructuring

      - The <hitlog> section is no longer supported in the zope.conf
        file; use <accesslog> instead.  (The name <hitlog> was added
        between the second alpha and the first beta, and generated a
        deprecation warning by the time the second beta was released.)

    Much thanks to everyone who contributed to this release:

      Jim Fulton, Marius Gedminas, Fred Drake, Philipp von Weitershausen,
      Stephan Richter, Dmitry Vasiliev, Scott Pascoe, Bjorn Tillenius,
      Eckart Hertzler, Roger Ineichen, Stuart Bishop

  ------------------------------------------------------------------

  Zope X3.0.0 Beta 1 (2004/06/04)

    New features

      - Event handlers can now be implemented as regular Python
        functions.

      - Hit logging is now configurable in zope.conf.

    Bug fixes

      - Fixed so that a UnicodeDecodeError isn't produced when Internet
        Explorer requests a page containing non-ISO-8859-1 characters.

      - Fixed the TextWidget and TextAreaWidget, added conversion
        from string to unicode in the method _toFieldValue.

      - Location-event subscribers weren't notified when containing
        objects were moved, added, or removed.

      - Changed ILocation interface: __name__ is not required anymore
        and its default is None.

      - The request's PATH_INFO variable is a unicode string now, so that
        the error service doesn't bail out when unicode urls are used.

      - Made AbsoluteURL handle unicode names. __str__ and __call__ encode
        the name into UTF-8 and url quote it to convert the name to ASCII.
        Also added __unicode__ to get a unicode representation of the url.

      - Cut startup time in half

    Restructuring

      - New api for getting sublocations and adapters for containers
        and folders.

      - Implemented a sub-location event dispatcher do notify
        subscribers when containing objects are removed.

      - The event system was completely reimplemented:

        - Converted event subscribers to simple handlers implemented as
          simple Python functions.

        - Now all handlers are registered as subscription adapters using the
          subscriber directive (rather than event:subscribe).

        - No longer have IEvent.  There's no need for a common base
          interface.

        - No longer have event publication or subscription services.

      - We had an object hub service. The object hub service was responsible
        for:

        - Managing short ids for objects, useful for indexing

        - Keeping track of object locations.  This was important when the
          object hub was created, because it wasn't practical to use direct
          object references. No it is, so hub ids are no-longer useful for
          implementing location-independent object references.

        The object hub service is dead.

        In the future, there will be a utility for use by indexes, that
        maintains short ids for objects. Perhaps this will be an indexing id
        service.

        The index and catalog machinery depend heavily on a facility for
        assigning shot ids to objects, currently the hub.  Rather than trying
        to remove this dependency now, and ad it back later when we have an
        index-id utility, it makes more sense to just remove the index and
        catalog facilities for now.

        Later, when we create an index-id utility, we'll port the code, which
        will still be in the repository, back.

      - Turned the OnlineHelp service into an utility.

    Much thanks to everyone who contributed to this release:

      Jim Fulton, Marius Gedminas, Fred Drake, Philipp von Weitershausen,
      Stephan Richter, Dmitry Vasiliev, Scott Pascoe, Bjorn Tillenius,
      Eckart Hertzler, Roger Ineichen, Stuart Bishop

  ------------------------------------------------------------------

  Zope X3.0.0 Alpha 2 (2004/05/26)

    New features

      - It is no longer necessary to pass context arguments to api
        functions to provide a place to look up services.

    Bug fixes

    Restructuring

    Much thanks to everyone who contributed to this release:

      Jim Fulton, Marius Gedminas, Fred Drake, Philipp von Weitershausen,
      Stephan Richter, Dmitry Vasiliev, Scott Pascoe, Bjorn Tillenius,
      Eckart Hertzler

  ------------------------------------------------------------------

  Zope X3.0.0 Alpha 1 (2004/05/18)

    New features

    - Distribution, packaging an installation system.

    - It is now possible to use a sub-directive called 'browser:widget' inside
      'browser:addform' and 'browser:editform' to specify custom widgets and
      customized properties of widgets for certain fields. Therefore it should
      not be necessary anymore to create custom edit and add view classes just
      to create custom widgets using 'CustomWidgetFactory'.

    - Until now, only a checkbox widget was available for boolean fields. This
      situation has changed, as we now also have BooleanRadioWidget,
      BoolenSelectWidget, and BoolenDropdownWidget.

    - A new vocabulary called Object Interfaces extracts the provided
      interfaces of its context and provides them as the term of the
      vocabulary. The vocabulary is named "Object Interfaces".

    - Developed Utility Vocabulary that provides a vocabulary for a particular
      utility. The constructor of the vocabulary expects a string or interface
      that expresses the interface provided by the utility.

    - Implemented 'registrations()' method for all adapter, utility and
      presentation services. This method is particularly aimed for people
      building informational GUIs and documentation. Examples of its use are
      in the 'apidoc' package.

      The change was motivated by the desirable removal of the
      'getRegisteredMatching()' method, which has been done now.

    - 'Content-Type' header now updates with charset information if
      necessary.

    - Implemented ObservableAdapter and Observers registry for
      Instance-based subscriptions.

    - RuntimeInfo now has two new methods (getPreferredEncoding,
      getFileSystemEncoding) and return unicode strings there appropriate.

    - Removed usages. We do not need them. Instead the macroname is now
      available in TAL. The standard macros can now have aliases, so that you
      can provide different macro names and still use the same template.

    - The macro name is now available via 'macroname' (reserved name) in the
      TALES namespace.

    - Implemented type based message subscriptions
      (http://dev.zope.org/Zope3/InstanceAndTypeBasedSubscriptions)
      Removed IAddNotifiable, IRemoveNotifiable interfaces.

    - Hard restart and shutdown works now. A utility is used to do the work
      and is server specific. So if someone uses Twisted instead of
      zope.server they just need to provide their own implementation of the
      utility.

    - You can run Zope 3 using zdaemon now. Thanks to Chris McDonough for his
      help there. Just use 'make runners' and start with 'bin/zopectl start'.

    - http://dev.zope.org/Zope3/InstanceAndTypeBasedSubscriptions

      - Added ZCML to create subscription adapters by creating a new
        directive (subscriber).

    - Redesigned the undo functionality according to
      http://dev.zope.org/Zope3/SimplifyUndoModel. There are three types
      of undo now:

      o Undo/redo my last transaction (the "Undo!" button)

      o Undo one or more of my last transactions

      o Undo one or more of anybody's transactions

      By default, transactions are looked up by location and can
      optionally be looked up everywhere. Undo security is
      permission-driven now.

    - Implemented Tools

      o Implement the tool ZCML directive.

      o Register utility interface as 'IToolType'.

      o Implement tools overview.

      o Create back-links from utilities and services to the tools screens.

      o Implement tool management screen. We need an overview, add, delete,
        rename.

    - Write generic get/queryType(object, type) that returns the interface of
      the 'object' that provides 'type'.

    - Implemented Permission Redefinition portion of ZCMLEnhancements.

    - Implemented http://dev.zope.org/Zope3/MinimalDefaultViewDirectives
      'zope:defaultView' can no longer *define* a view. It also only accepts
      one "for" interface.

    - Implemented http://dev.zope.org/Zope3/Use303RedirectsByDefault
      Browsers which support HTTP/1.1 will now receive 303 redirects.

    - The ZCML zope:adapter and zope:view directives now support
      multiple for interfaces, thus defining multi-adapters and
      multi-views.

    - Added broken-object support.  If an object can't be loaded from
      the database because it's class has been removed or moved, then
      a placeholder "broken" object is loaded instead.  This allows
      containing objects to be loaded properly and provides diagnostic
      information needed to restore the missing class, if necessary.

    - Now use ZODB 3.3, rather than ZODB 4.  If your Data.fs file is
      in the ZODB 4 format, you need to convert it using the following
      command executed from the Zope3 directory::

        PYTHONPATH=src python2.4 src/ZODB/zodb4/main.py Data.fs

    - Removed source type service and replaced source types by source
      factories. Updated the vocabulary accordingly.

    - Import checker utility that can tell you which import statements in
      your Python files are unused.

    - New dependency finder utility for determining dependencies of Python
      packages and modules.

    - Renamed the "Common Tasks" box in the default skin to "Add:",
      since this is really just a list of things to be added.

    - Implemented 'apidoc' tool for online browsing of the Zope 3 framework
      API and configuration. The documentation can be accessed via a new
      namespace '++apidoc++'::

        http://localhost:8080/++apidoc++/

    - Added a stateful tree implementation, e.g. to produce static
      trees in page templates. It includes browser views that store the
      tree state in cookies, a browser layer that replaces the tree
      navigation with a cookie-based stateful tree and a skin using that
      layer based on Rotterdam.

    - Ported Zope 2's StructuredText implementation. It is available
      in the 'zope.structuredtext' module and used by apidoc and wiki
      (through renderer).

    - Copy/Move now checks constraints and preconditions, instead of just
      expecting the source's and target's class to be the same.

    - Added new switch '-P' to test.py, to allow profiling of
      tests. Profile data is saved into <zope3>/tests_profile.prof. All
      the additional switches and options apply. This is useful for
      running a profile on a single test (specially useful for
      functional tests) without having to do the whole profile setup.

    - Session support implemented and usable from Python code.

    - The factory directive and subdirective do not accept a permission
      attribute anymore, since all factories are publically available,
      i.e. all attributes/methods have the permission 'zope.Public'.

    - Traversing views and schema field widgets are no longer looked
      up by name but by a providing interface.

    Bug fixes

    - when adding content to a container, check the preconditions.

    - 'mail:queuedDelivery' and 'mail:directDelivery' directives have now
      "Mail" as a default name as the interface claims. Also, the
      'mail:smtpMailer' directive interface specifies now a port default of 25
      as it should be.

    - Content-Length header bug fixed. The problem was that while encoding
      an output data to output encoding data length can be changed, but
      headers were already sent.

    - Fixed issue 159. barryp sent in a patch concerning timezone handling in
      the HTTP server date utility.

    - Fixed issue 154. Page Template code entered TTW is now stored as
      unicode, which had no side effect whatsoever. We only had to allow in
      the general page template code for the source to be unicode.

    - Removed 'zope.app' and 'zope.component' dependency from
      'zope.publisher'. Now it only depends on 'zope.proxy' (eek, should also
      go), 'zope.interface', 'zope.exceptions' and 'zope.i18n'.

      Moved the 'zope.component'-specific code to zope.app.publisher. Updated
      all of Zope to catch up with these API changes.

    - Fixed issue 80. There were only a few very contained spots that made
      DTML non-unicode aware. Once I removed these spots, unicode input works
      like a charm. I converted all the tests to use unicode, so that
      everything is well-tested.

    - Fixed issue 140. The problem was that a 'FileUpload' object was created,
      even though no file was uploaded. On top of it the underlying
      'FieldStorage' object provided an empty filename and the data of the
      storage was '\r'. Fixed all this by not adding a 'FileUpload' object to
      the request's form when the filename is empty. Added explanatory comment.
      Added new functional tests for 'Image' objects to verify the correct
      behavior.

    - Fixed issue 119. Unicode-based names are handled correctly now.

    - Fixed issue 128. The TALES Iterator class is now up-to-date.

    - BTreeContainer's '__contains__()' and 'has_key()' methods return 'True'
      and 'False' now instead 0 or a positive integer. Added tests for
      BTreeContainer.

    - All IContainer objects are tree items now by default.

    - Fixed issue 126. HTML entities and elements are now correctly escaped
      when editing via the browser. The fix has been made in the browser
      widget code.

    - Fixed issue 195. The remove language buttons for I18n File and Image have
      now a value.

    - Removed last TAB characters from Python code.

    - The configuration machinery's resolve() method can now handle single
      ".", which refers to the current package. Therefore you can reference a
      module in ZCML simply by ".".

    - Fixed inline-code support for Windows.

    - Reimplemented 'getRegisteredMatching()' of the Presentation Service,
      since it was not functioning at all.

    - Fixed Utility Service 'getRegisteredMatching()' method.

    - Validation of object field fixed (zope.schema.Object). Validate only
      attributes of the schema that are implemented as fields.

    - Security-proxied adapter support for the form framework. It provides
      LocationProxies for all adapters which do not implement ILocation itself.

    Restructuring

    - Restructured widget base classes.

    - Changed widget title and description to label and hint, respectively.

    - Redid the way names input in add forms.

      See: http://dev.zope.org/Zope3/AddingNameControl

    - Removed __doc__ keyword argument from Field constructor. Moved __name__
      behind title and description. However, values should always be inserted
      as keywords, since a lot of mixins to the field base class do not honor
      the order.

    - All enumerated fields are gone. Instead there is now a 'Choice' field
      that can take a listing of values, vocabulary or vocabulary name as
      source for the choices. The Sequence field has been improved to cope
      better with Choice value types.

    - A new attribute 'unique' was added to sequence to require uniqueness of
      the values. This way all four container classes, set, bag, list and
      unique list can be expressed using only two fields.

    - All vocabulary widgets are gone. They were replaced by widgets that
      expect choice- or sequence-like fields and vocabularies. Convenience
      broker widgets are provided to provide simple views for the fields only.

    - Use new Utility Vocabulary is now used to provide fields for permissions
      and interfaces. This allowed us to get rid of PermissionField and
      InterfaceField and their associated widgets.

    - Moved stateful workflow interfaces and browser code to
      zope.app.workflow.stateful. This way we can distribute the workflow
      package without specific implementations or choose the implementations
      we want to distribute.

    - The workflow XML import/export functionality uses now a set of adapters
      instead of a complicated utility and custom registry structure.

    - Reimplemented the utility services using adapter registries.

    - Replaced the *used* names in schema.errornames to exceptions in
      schema.interfaces. Deprecated schema.errornames. The doc strings of the
      exceptions/errors is now used for user output. Eventually we should
      write custom views for all of them.

    - The application control has been cleanup to mostly use views and not do
      the adapter redirection. Only the runtime info control still uses an
      adapter, since its information might be otherwise useful.

    - Modernized File and Image (as well as their I18n equivalent) to use
      schemas. I also removed a lot of unnecessary methods in the objects and
      their views.

    - Removed session-specific mapping interfaces. The two that were not yet
      available in zope.interface.common.mapping were added there.

    - Reorganize software into a much flatter package structure.

      o Folded interfaces and browser back into packages. For example

        zope.app.foo
        zope.app.interfaces.foo
        zope.app.browser.foo

        became

        zope.app.foo
        zope.app.foo.interfaces
        zope.app.foo.browser

      o Moved packages from the following container packages to zope.app:

        zope.app.content
        zope.app.services
        zope.app.utilities

      o Created a bunch of new packages:

        dependable (formerly just a file-based module)
        exception (was scattered everywhere before)
        errorservice (contains error reporting service)
        module
        principalannotation (Principal Annotation Service)
        session
        site (contains 'folder' and 'service' from zope.app.services)
        utility (Utility service)
        ...

    - Converting Service-managed components to be utilities:

      o Removed workflow service. Process Definitions were already utilities,
        so this was particularly easy.

      o Various Code Interpreters were managed by a special service. They are
        now registered with the utility service.

      o DAV Schema. The interface representing the DAV schema is the
        utility. For it to work correctly, I gave all DAV schemas the
        interface type IDAVNamespace. This is also the interface through which
        the utilities are found in the utility service.

      o Language Negotiator. The language negotiator is now a utility instead
        of a service.

      o Converted MailService --> MailDelivery utility; also the Mailer is now
        a utility, instead of using its own registry.

      o Made Zope-specific Vocabulary Registry use utilities. The vocabulary
        directive now registers vocabulary factories as utilities.

      o Roles are now stored as utilities. While doing this, I also schemafied
        the IRole interface to use 'id', 'title', 'description' instead of
        'getId()', 'getTitle()' and 'getDescription()'. This was done for
        global and local roles. Local roles only have a valid 'id' if they are
        registered "active" and the id value is the registration name for the
        utility.

      o Permissions are now stored as utilities. As for roles, I schemafied
        the API to use 'id', 'title', and 'description'.

      o Interfaces are now registered and looked up as utilities. The local
        interface service, which *only* provided an interface browsing UI has
        been replaced by an interface-browsing view on site managers.

      o SQL database connections are now managed as named utilities.

      o The Translation Service has been removed. Instead we are using
        Translation Domain utilities to hold translations. Since the API would
        would have been a good bit more complex than before, a convenience
        function was added to 'zope.i18n'::

          translate(location, msgid, domain=None, mapping=None, context=None,
                    target_language=None, default=None):

      o The Factory Service was removed and factories became utilities. The
        'getFactoryInterfaces()' and 'createObject()' functions are still
        available via 'zope.app.zapi'. I also added the 'getFactoriesFor()'
        function to zapi, since it was only available from the service before.

      o Removed the Caching Service; Caches were already utilities, so it was
        easy to rip it out. Updated the views, so that the only example usage,
        the SQL Script, can make use of caches.

    - The IPrincipal now uses 'id', 'title' and 'description instead of
      'getId()', 'getTitle()', and 'getDescription()'. For
      backwards-compatiblity 'getTitle()' and 'getDescription()' are available
      with a deprecation warning.

    - Converted local Workflow Definitions from being registrable components
      to be local utilities. Therefore, **a lot** of boiler-plate registration
      code became obsolete and was removed. Using utilities is a huge
      improvement!

    - Rearranged the package hierarchy below zope.app.

      o Moved content types, including their interfaces and browser
        views, to their individual packages below zope.app.

      o Moved packages that were formerly in zope.products to zope.app.

      o ... more to come here ...

    - Moved the i18n message string extraction utility to the
      'utilities' directory

    - Moved placefulsetup to zope.app.site.tests.

    - Changed the way that adapters and views are registered:

      o Simplified adapter registries with a simpler, more general api
        and without factory semantics.

      o Updated the adapter and presentation service registration apis
        based on changes in the adapter registries.

      o The adapter service and presentation services no longer take
        sequences of factories.  ZCML directives are now responsible
        for supporting multiple factories (chained adapters) in the
        rare cases when they are used by computing composite
        factories.

    - http://dev.zope.org/Zope3/UnificationOfRequestsAndSecurityContextsThroughUse

      - Replaced security managers and security contexts with interactions
        and participations.

      - Requests are now participations, therefore request.user is renamed to
        request.principal.


    Miscellaneous

    - Keep Zope3 Wiki product up-to-date with API changes. Furthermore update
      code to implement "modern" patterns.

    - Gave many empty module doc strings a title. There are still many files
      without titles.

    - Added file headers (license) to Python and Python-C files. Still, not
      all files have one yet.

    - Gave many class and function doc strings some meaning, including some
      that just contained XXX statements. Many more files exist that have
      meaningless or incomplete doc strings.

    - Removed unused imports.

    - Removed the simple local authentication service
      zope.app.services.auth. It was deprecated for a while already.

    - Removed all fixup entries in zope/app/backward.zcml. backward.zcml was
      not included anywhere anyways, so that this should not pose a
      problem. Removed all fixup code as well.

    - Renamed __implements__ in zope.interface to __implemented__ to
      make Zope 3 code interoperate with Zope 2 code.

    Much thanks to everyone who contributed to this release:

      Jim Fulton, Marius Gedminas, Jeremy Hylton, Fred Drake, Sidnei da Silva,
      Philipp von Weitershausen, Steve Alexander, Andreas Jung, Anthony
      Baxter, Kevin Littlejohn, Stuart Bishop, Christian Theune, Adam Summers,
      Stephan Richter, Chris McDonough, Garrett Smith, Roger Ineichen, Gary
      Poster, Martijn Faassen, Dominik Huber, Bjorn Tillenius, Nathan Yergler,
      Dmitry Vasiliev, Michael Bernstein, Eckart Hertzler, Suresh Babu Eddala

  ------------------------------------------------------------------


  Zope X3.0.0 Milestone 4

    What is Zope X3? It's Zope 3 "experimental". This is the release
    that will provide the new features of Zope 3 without any Zope 2
    support. Zope 3.0 will provide support for Zope 2 content and
    products, probably using conversion utilities of some sort.


    Backward compatibility notes

    - If you have any add-on products that used the old context-wrapper or
      "context awareness" APIs, you will need to update them to use the new,
      and much simpler, location API. See zope/app/interfaces/location.py.

    - If you have add-on products that register views or resources using the
      view or resource directives from the zope ZCML namespace, you will need
      to change the value of the 'type' attribute to refer to a request type,
      rather than a presentation type.

    - If you have an add-on product that defines new layers, you need to use
      the zope:layer or browser:layer directive to define the layer before you
      use it in a skin definition or a view or resource definition:

        <browser:layer name="rotterdam" />

    - If you had a local (through the web) adapter service, you will need to
      recreate it and reactivate your adapter registrations.

    - If you had a local (through the web) view service, you will need to
      create a local presentation service and reactivate your page or view
      registrations.

    Features

    - Changed the way presentation components are managed.

      o The view, resource, and skin services have been combined into a new
        presentation service.

      o Views and resources now adapt requests. They are registered for request
        types rather than presentation types.

    - Refactored the way interfaces, declarations and adapters are
      implemented. We now use a cleaner architecture that no-longer requires a
      caching mechanism beyond what's provided by the underlying data
      structures. This has led to a significant speed up for Zope 3.

    - Refactored the way location-related events are generated and handled.

      For more details, see:
      http://dev.zope.org/Zope3/LocationRelatedEvents
      http://dev.zope.org/Zope3/SimplifyObjectLifecycleAndLocationEvents

    - Refactored the way object location is modeled. Zope 3 no longer uses
      context wrappers. Instead, objects have __parent__ attributes that
      reference their containers.  Objects that don't maintain these
      attributes themselves are wrapped in persistent proxy objects that do
      so.

      For more details, see:
      http://dev.zope.org/Zope3/ParentGeddon

    - Added catalogs.  Catalogs can be used in two-ways:

      o Site-wide utilities

        A catalog is created in a site-management folder and
        registered as a named utility.

      o Local content objects.

        A catalog is added to a regular content folder.

    - Added object fields. Object fields provide a simple composite field
      mechanism. An object field is defined by a schema and, thus, can contain
      sub-fields.

    - Added working widgets for list fields. List fields contain a sequence of
      monogenous values.

    - Improved forms error reporting. Error messages now appear next to fields
      where errors occurred.

    - Major fixes to the TAL I18n-Namespace support. Almost all fixes were
      backported to Zope 2.7 as well.

    - ZPT Pages support for a <script> tag, that allows inline Python
      code. The <script> tag can be used in other TAL sources as well, but is
      turned off by default.

    - Internationalized all Zope 3 (Python, ZCML and Page Templates)
      user-readable strings. Zope 3 was then localized to German and partially
      to Spanish, Brazilian Portuguese and French.

    - Implemented explicit message ids in ZCML

    - New Persistent/Mutable Schemas allow us to generate Schema-based
      interfaces through the Web.

    - New local Menu Service and Content Component Definitions allow you to
      create simple Content objects TTW.

    - Major fssync improvements. The commands to use now are "zsync" and
      "zbundle". New flags include: copy, login (+ new options for checkout),
      logout, mkdir, resolve, revert. fssync behaves now very similar to SVN.

    - Introspector uses the Interface service now, instead of the ++module++
      namespace.

    - Refactoring and cleanup of the schema/form code.

    - Improvements to the OnlineHelp, which has been deactivated for this
      release since it is broken since the recent geddons.

    - ZODB 4: Changed serialization logic to support persistent proxies.
      Added an add() method to Connection and allowed it to run during
      commit().

    - In the future, Zope 3 will use ZODB 3, which will support new-style
      classes, since the development of ZODB 4 stopped in late summer.

    - Various improvements to ZConfig


    Miscellaneous

    - Progress with the TUV-IT security accreditation

    - Much maintenance work and bug fixes.


    Much thanks to everyone who contributed to this release:

      Jim Fulton, Christian Theune, Marius Gedminas, Tim Peters, Jeremy
      Hylton, Fred Drake, Sidnei da Silva, Philipp von Weitershausen, Steve
      Alexander, Guido van Rossum, Barry Warsaw, Albertas Agejevas, Viktorija
      Zaksiene, Andreas Jung, Anthony Baxter, Phillip Eby, Richard Jones, Tom
      Cameron, Kevin Littlejohn, Stuart Bishop, Andy Hird, Peter Simmons,
      Christian Theune, Adam Summers, Stephan Richter, Chris McDonough,
      Garrett Smith, Godefroid Chapelle, Paul Roe, Kiki Pruvot, Don Baarda,
      David Fregon, Rob Zaar, Jan Smith, Richard Volpato, Roger Ineichen, Gary
      Poster, Bjorn Tillenius, Martijn Faassen, Chris Withers, Paul Everitt,
      Dominik Huber

  ------------------------------------------------------------------


  Zope X3.0.0 Milestone 3

    - Major changes have been made to the way local components are
      registered in a first step toward simplifying local (through the
      web) component registration.

    - The interface framework has been refactored in major ways:

      * Object interfaces are declared differently.

      * Interface introspection and component registry lookup
        performance has been improved.

      * Interface are now inherited.

    - Added a framework for decorators, which are context wrappers
      that also ease integration with the Zope application framework.

    - Configuration of the application server using a ZConfig-syntax
      configuration file with a simple schema.  This replaces
      zserver.zcml.

    - New schema field types for vocabularies.  See
      schema/vocabularies.txt for detailed documentation.

    - Added low-level support in TALES for path expressions of the form
      'a/b:c', which work by finding an adapter named 'b' for the
      object named by 'a' and traversing the adapter with the name
      'c'.

      Also defined and registered an adapter named 'zope', that
      provides a number of handy functions. For example, to get an
      object's name, use::

         someobject/zope:name

      Many more utility functions will be added over time.

      We still need a way to define other adapters. The mechanism for
      doing so is still undecided.

   - Added zope.app.zapi module that collects common application
     functions and other objects. This is to simplify imports for
     application code.  To get at many common objects, you can simply
     import zapi and then access the functions through zapi::

        from zope.app import zapi

        ...

        adapter = zapi.getAdapter(x, IFoo)

   - Added a pluggable authentication service.  The service supports
     pluggable principal sources and authentication methods (through
     views on principal sources).

     Deprecated the simple auth service.

   - Initial implementation of file-system synchronization.  This
     allows:

     * Checking out objects from Zope to files in a local directory

     * Checking in Zope objects, with conflict resolution

     * Exporting objects

     * Importing objects

     (We need docs for this.)

   - Very preliminary local interface service

     The interface service will someday provide a tool for browsing
     and modifying all of the configurations for a interface (type).

     The initial version demonstrates browsing component configurations
     be showing you all views configured for an interface.

   - WebDAV:

     Added PROPFIND and MKCOL to DAV support. Also added
     IDAVSchemaService, to allow registering an adapter to be used for
     a given namespace on PROPFIND requests.



  ------------------------------------------------------------------

  Zope X3.0.0 Milestone 2

    What is Zope X3? It's Zope 3 "experimental". This is the release
    that will provide the new features of Zope 3 without any Zope 2
    support.   Zope 3.0 will provide support for Zope 2 content and
    products, probably using conversion utilities of some sort.
    This release is the second Zope 3 release. The goals of
    this release are to:

    - Provide a relatively firm foundation for Zope 3
      developers who want to start building Zope 3 products or to
      contribute to development.

    - Provide wider exposure of Zope 3.

    - Solicit input on features, current and missing.

    The first release was very slow.  This release is much less
    slow, but it's not fast.  We have mostly avoided
    optimization to keep the code as clean as possible. Optimization
    will be performed prior to the first beta release.

    This is STILL an EARLY release. There is very little organized
    documentation, although there are some tutorials
    (http://dev.zope.org/Zope3/ProgrammerTutorial) and lots of bits of
    documentation spread around the system.

    A lot of work has been done since the last release, including:

    - General UI improvements

    - Performance improvements (much more to come)

      This release is much less slow than the previous release.

    - Improvements to the through-the-web site management experience
      (There's still a lot more to do.)

    - Internationalization improvements

    - FTP Support

    - PUT support (Allowing editing with Mozilla/Netscape Composer and
                   Amaya).

    - Partial WebDAV support

    - A basic workflow system

    - Improvements to Zope 3 schemas and form generation

    - A functional testing framework

    - Virtual Hosting support

    - A Utility service

    - XML "interfaces" derived from XML Schema URIs.
      These marker interfaces can be used to control application
      of XML processing using the component architecture.

    - New search indexes

    - Views on exceptions.

    Much thanks to everyone who contributed to this release:

        Alan Runyan, Albertas Agejevas, Alexander Limi, Andreas Jung,
        Anthony Baxter, Axel Bringenberg, Barry Warsaw, Bruce Eckel,
        Christian Heimes, Christian Theune, Fred Drake, Gary Poster,
        Godefroid Chapelle, Gregoire Weber, Guido van Rossum, Jeremy
        Hylton, Jim Fulton, Marius Gedminas, Martijn Faassen, Michael
        Howitz, Nathan Yergler, Paul Winkler, Philipp von
        Weitershausen, Phillip Eby, R. David Murray, R. Sean Bowman,
        Sathya Rangaswami, Sidnei da Silva, Stephan Richter, Steve
        Alexander, Tim Peters, Tres Seaver, Ulrich Eck, Viktorija
        Zaksiene, Volker Bachschneider, and Mark McEahern


  ------------------------------------------------------------------

  Zope X3.0.0 Milestone 1 (formerly known as 3x.0.0 Alpha 1)

    This release was the first Zope 3 release. The goals of
    this release are to:

    - Provide a relatively firm foundation for Zope 3
      developers who want to start building Zope 3 products or to
      contribute to development.

    - Provide wider exposure of Zope 3.

    - Solicit input on features, current and missing.

    The alpha release *was* very slow. We have intentionally avoided
    optimization to keep the code as clean as possible. Optimization
    will be performed prior to the first beta release.

    Features

      - An initial management interface including folders and various
        content types such as files, images, DTML pages, ZPT pages,
        and SQL scripts.

        The initial user interface is a prototype. We welcome
        feedback, ideas, and even code!

      - A framework for configuring and installing file-system-based
        products.

      - An initial through-the-web configuration and development system based
        on services. Services are similar to CMF tools except that
        they are managed in service managers, rather than in folders.

        A number of predefined services will be included:

        - Simple authentication service (similar to Zope 2's
          original user folder).

        - Event service.

        - RDB Connection service. This is used to manage database
          connection objects used by SQL scripts.

        - Translation service, to manage software (as opposed to
          content) translation services.

        - Caching service.

        - Site error reporting service (like Zope 2's site error log)

        - Session service (uh, that nobody has tried to use yet :)

        - Role service

        - Adapter service

        - View services

        - Object Hub, which tracks object locations, allowing
          location-independent object references

        - A principal annotation (user data) service. Nobody has tried
          to use this yet. It passes it's tests.

        Through the web development will take place in packages, which
        can contain:

        - Persistent python modules (These might work now. Give em a
          try. :)

        - Templates

        - Component instances

        - Configuration objects

        Configuration objects are used to configure component
        instances and component factories and register with the
        appropriate services.

      - FTP support (not sure if this works)

      - XML-RPC support  (not sure if this works)
