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 X3.0.0

    New features

      - Implemented rdb:gadflyRoot directive.    

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

    Bug Fixes

      - Fixed issue 228.

      - A service registration form now displays correct information
        about the registration.

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

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

    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 2

    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 knows 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

    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 convertion
        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.

      - Implememented 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

    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

    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.3 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 referes 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. Convinience
      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 utitlities. 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 registerable components
      to be local utilities. Therefore, **a lot** of boiler-plate registration
      code became obselete 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 warpped 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 occured.

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

    - Templated 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 accredidation

    - Much maintainance 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)


