You are not logged in Log in Join
You are here: Home » Download Zope Products » Zope 3 » 3.2.2 » Zope 3.2.2 Changelog » View Document

Log in
Name

Password

 

Zope 3.2.2 Changelog

Zope 3.2.2 (2006/10/02)

Bug fixes

  • 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 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.
  • 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.
  • Fixed issue 599: Provided a view for interface.exceptions.Invalid to allow formlib to display errors when validating invariants.
  • 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 696: No display widget was registered for ISet fields with a IChoice(IBaseVocabulary) value type.
  • Fixed issue 551: Sequence widget ignored default values.
  • Fixed issue 592: Made handling of (no value) entries for selection widgets cleaner and consistent
  • Fixed issue 565: Verified fix for ObjectWidget's error method and provided test coverage.
  • Fixed two bugs in SequenceWidgets: an exception was raised on rendering and the errors of the subwidgets weren't displayed.
  • Fixed issue 706: Session doesn't expire after aborting transaction.
  • Fixed issue 681: IFormFields is missing declaration for omit()
  • Fixed issue 665: ZCML swallowing KeyboardInterrupt / SystemExit.
  • Fixed issue 529: Undo Principal Transactions doesn't work with non-root principals
  • 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
  • Change the session credentials plugin to make it configurable in which fields it looks for the credentials.
  • 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 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.
  • set socket-name to $INSTANCE_HOME/var/zopectlsock in zdaemon.conf.in, to prevent conflicts when running multiply instances or as root. the default was zdsock in the directory where zopectl is started from.
  • Fixed issue 586, BrowserResponse didn't update the Content-Length header after inserting a 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 *.
  • Fixed a bug in zope.documenttemplate which raises UnicodeEncodeError when uses non-ascii unicode string in template.
  • Fixed issue 716, make check no longer throws ValueError "I/O operation on closed file" after all tests have run. Backport of Jim's workaround in 3.3.

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)

Bug Fixes

  • 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

  • Fixed a nasty bug that was hiding ``INotFoundError`` exceptions behind an empty page.
  • 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.
  • Updated 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.
  • zope.app.content_types is now a packages (backported most recent code from Zope 2 trunk to Zope 3)
  • Fixed bug 486: Made function getSiteManagerDefault compatible with sub-sites.
  • Fixed a bug in the 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.

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: ```` should support ````
  • 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 ```` 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:
    • Credentials Plugins: Basic HTTP Auth, Session
    • 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:

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 ``
    ...
    `` 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 ZCML directive behave like the 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
    ...
    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 and directives was not marked as required in the directive schema, while it actually was expected to be required.
  • Made the ZCML directive behave like the 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:

    • 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.)
    • File paths may contain '/'s as separators. These will be converted to native file separators at run time.
    • It is now possible to pass set-up and tear-down methods
    • It is now possible to pass a dictionary of initial global variables.
    • 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:
    • Fix a bug (actually a misfeature). It wasn't possible for local settings to override global (zcml) settings.
    • 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.
    • 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:

    • 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.)
    • File paths may contain '/'s as separators. These will be converted to native file separators at run time.
    • It is now possible to pass set-up and tear-down methods
    • It is now possible to pass a dictionary of initial global variables.
    • 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:
    • Fix a bug (actually a missfeature). It wasn't possible for local settings to override global (zcml) settings.
    • 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.
    • 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 section is no longer supported in the zope.conf file; use instead. (The name 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:
    • Undo/redo my last transaction (the "Undo!" button)
    • Undo one or more of my last transactions
    • 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
    • Implement the tool ZCML directive.
    • Register utility interface as IToolType.
    • Implement tools overview.
    • Create back-links from utilities and services to the tools screens.
    • 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 /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.
    • 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

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

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

    • 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:
    • Removed workflow service. Process Definitions were already utilities, so this was particularly easy.
    • Various Code Interpreters were managed by a special service. They are now registered with the utility service.
    • 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.
    • Language Negotiator. The language negotiator is now a utility instead of a service.
    • Converted MailService --> MailDelivery utility; also the Mailer is now a utility, instead of using its own registry.
    • Made Zope-specific Vocabulary Registry use utilities. The vocabulary directive now registers vocabulary factories as utilities.
    • 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.
    • Permissions are now stored as utilities. As for roles, I schemafied the API to use id, title, and description.
    • 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.
    • SQL database connections are now managed as named utilities.
    • 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):
      
    • 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.
    • 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.
    • Moved content types, including their interfaces and browser views, to their individual packages below zope.app.
    • Moved packages that were formerly in zope.products to zope.app.
    • ... 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:
    • Simplified adapter registries with a simpler, more general api and without factory semantics.
    • Updated the adapter and presentation service registration apis based on changes in the adapter registries.
    • 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:

  • 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.
    • The view, resource, and skin services have been combined into a new presentation service.
    • 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:
    • Site-wide utilities

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

    • 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