New features
- zope.viewlet.manager now fires a BeforeUpdateEvent before
calling update on viewlets. This might be usefull for other
components like caches to react before a viewlet is updated.
- Introduced IResult hook for postprocessing of publishing results.
This replaces a similar private IResult hook from previous releases.
It is a hook point into which a variety of interesting policies,
including in-Zope pipelining, can be placed. See
zope/publisher/httpresults.txt for more details, which itself
points to the full details for IResult and IHTTPResponse.setResult in
zope/publisher/interfaces/http.py.
- Implemented a custom FieldStorage that uses named temporary files to
allow the Blob integration to use `consumeFile` on uploaded files.
- added widget for zope.schema.FrozenSet like for zope.schema.Set.
- icon zcml directive supports now 'width' and 'height'
- Added a master checkbox to the ZMI and toggles all other checkboxes in
the folder listing.
- added additional parameter ``settings_overrides`` to
zope.app.render to allow overriding of the default settings for
rendering rest files.
- Added support for multiple databases in ZODB Control View.
- zope.app.testing.functional.ZCMLLayer supports in-process tearDown.
For backwards compatibility, this feature is disabled by default.
You can enable it by passing ``allow_teardown=True`` to ``ZCMLLayer()``
or to ``defineLayer()``.
- zope.app.generations now guarantees the order in which schema managers
are invoked, allowing frameworks and extensions to have a predictable
evolution relationship.
- Removed unused and untested SFTP code from zope.app.twisted along with
all the SSH keys. Removed all the SSL keys also.
- Added ``index`` keyword argument to testbrowser's ``getLink()``
method, so that later links with a match can be accessed
too. Example: In the ZMI doing ``getLink('Folder')`` will give you the
"Buddy Folder" link and not the "Folder" link as expected. Use
``getLink('Folder', index=1)`` instead.
- Added breadcrumbs to all types of objects visible through the
code documentation browser.
- Added ISkinChangedEvent to applySkin() function. This event is
triggered whenever the skin of a request is changed.
- Make the `label` and `hint` properties of the base Widget class
read/write, and document in the interface that the implementation
may or may not allow updating these properties.
- Improved the asynchronous navigation tree of the 'Rotterdam' skin:
highlight current object, do not display '+' icon if object contains
no element, remove message "Loading" if unable to retrieve XML tree.
- Revamped i18n for German for all user-readable strings
- The getForm() method on testbrowser instances no longer needs
arguments to disambiguate among forms if there's only one form
in the input.
- The security setting values from zope.app.security.settings are now
exported by zope.app.securitypolicy.interfaces, since they are
exposed by the APIs defined there, and are not used in the
zope.app.security package at all. zope.app.securitypolicy.intefaces
will be the preferred location from which to import these values.
- Added xmlrpclib.ServerProxy variation in zope.app.testing.xmlrpc
that allows testing XML-RPC views in functional tests.
- Added attribute `permission` to the `browser:menuItems`-directive to
allow setting a default value for all menu items defined in this
directive.
- Added a new interface decorator to zope.interface that allows the
setting tagged values on an interface at definition time (see
zope.interface.taggedValue).
- Added new Decimal field type to zope.schema (and DecimalWidget in
zope.app.form)
- Added security declarations for decimal.Decimal objects
- Added new Time field type to zope.schema
- IHTTPApplicationRequests emit a new event,
IHTTPVirtualHostChangedEvent, when virtual host parameters are
altered.
- New Dublin Core property object that allows scalar treatment for
sequence types. Made it work with both Tuple and List field type.
- New logger directive for zope.conf allows for configuring loggers
for specific subsystems with their own level and handlers.
- The ISession interface and the according implementation in
zope.app.session now define a get method. This method can be
used to check if a specific session key is defined without
automatically creating it.
- The "Session Credentials" authentication plugin does not write
session data for anonymous requests. This reduces zodb
conflicts for high-traffic sites with many anonymous requests.
- Change the publication object to abort the current transaction if
the trasaction was doomed. Related to:
http://www.zope.org/Collectors/Zope3-dev/655.
- ZPTPage's content_type is now editable in the ZMI.
Restructuring
- Moved IBroken to zope.app.broken.interfaces to avoid cyclic imports.
- Added test layers for all existing functional tests.
- Updated the version of Twisted to 2.5
- Implemented "Loading Configuration from the zope.app Egg" proposal.
Now zope.app is a namespace package. ZCML files in zope.app package
is moved to zope.app.zcmlfiles (a new package with only ZCML files).
Now creating individual eggs of zope.app.* packages is possible.
- ``ClientForm`` changed from a file based module to a package.
- Changed internal widget API to allow retrieving the current value
(from request, default or current field value) in addition to the
current form representation of the value.
- Refactored zope.decorator into zope.proxy.decorator and
zope.security.decorator.
- Deprecated directive <zope:localUtility>, replaced by <zope:class>.
- Removed deprecated directive <zope:defaultLayer>.
- Removed deprecated argument 'outstream' from ``zope.publisher``
API, and removed other deprecated code.
- Removed deprecated aliases:
* ``UniqueIdUtility`` for ``IntIds``
* ``ReferenceToPersistent`` for ``KeyReferenceToPersistent``
* ``zope.app.uniqueid`` for ``zope.app.intid``
* ``HTTP`` for ``WSGI-HTTP``
* ``PostmortemDebuggingHTTP`` for ``WSGI-PostmortemDebuggingHTTP``
* ``PublisherHTTPServer`` for ``PMDBHTTPServer``
* ``IBrowserIdManager`` for ``IClientIdManager``
- Removed deprecated ``zope.app.file.interfaces.IFileContent``.
Use ``zope.app.publication.interfaces.IFileContent``.
- Removed deprecated ``zope.app.form.CustomSequenceWidgetFactory``.
Use ``zope.app.form.CustomWidgetFactory``.
- Removed deprecated services:
``IErrorReportingService``, ``ILocalErrorReportingService``,
``IPrincipalAnnotationService``, ``IAuthenticationService``.
They are replaced by Utilities.
- Removed deprecated methods:
``zope.copypastemove.ObjectCopier._configureCopy``,
``zope.interface.interface.Specification.isImplementedByInstancesOf``,
``zope.interface.interface.Specification.isImplementedBy``,
- Removed deprecated ``zope.app.pluggableauth`` package.
See ``zope.app.authentication``.
- Removed deprecated ``zope.app.introspector`` package.
See ``zope.app.apidoc.codemodule`` for the introspector feature.
- Implemented the ZCML feature `deprecatedlayers` which is provided by
default. To turn off and remove the deprecated packages `layers` and
`skins`, you need to remove file `zope.app.layers-meta.zcml` from the
directory `/etc/package-includes/` and delete directories
`zope/app/layers/`and `zope/app/skins/`.
- Removed internal concept of 'warnings' from TAL interpreter as it
wasn't used at all and does not belong to any public interface.
- Removed some cruft from pre-3.0 page templates (The concept of `usage`
was removed back then already.)
- Changed default charset of text file (``zope.app.file.file``) to utf-8.
Bug fixes
- Implemented pre marshaller for xmlrpxlib.Binary which will make sure
that the response doesn't containd a proxied binary object.
- zope.server.http: Connection: keep-alive wasn't sent
(http://zope.org/Collectors/Zope3-dev/714)
- zope.pagetemplate.pagetemplatefile introspects the html http-equiv
header to guess the content encoding. This did not work for XHTML
content.
- zope.app.publisher.browser.pagetemplateresource sets the Content-Type
header like the other page templates do it.
- Fixed zope.app.cache.ram.RAMCache which ignored the
cleanupInterval.
- zope.app.form.browser.textwidgets: The TextAreaWidget was not escaping
its content when the validation failed. This way <, > and & were put
out unquoted.
- zope.app.interface: Fix PersistentInterfaceClass
(http://www.zope.org/Collectors/Zope3-dev/747)
- zope.testing: moved import of the pystone module due a import
conflict with the Zope 2 testrunner
(http://www.zope.org/Collectors/Zope/2268)
- Fixed zope.app.catalog.attribute.AttributeIndex. It indexed None if
the index value is provided by a callable field.
- Made the SourceDisplayWidget derive from
zope.app.form.browser.widget.DisplayWidget because it really is a
browser widget.
- Fixed bug #721: Handling of empty prefixes in zope.formlib and
zope.app.form
- Fixed bug #707: "layer" directive was marked as deprecated in a
confusing way.
- Fixed bug #728: Able to change-dir into non-existant directories
using FTP
- Fixed widget bug in zope.app.form.browser; _getCurrentValue always
returns an input value now. This fixes a bug in _getFormValue.
- Fixed bug #717: formlib raised FormError when schema fields were
missing from a request although not required.
- Fixed bug #738: RestrictedPython was unable to parse
Unicode expressions correctly (as passed in from e.g. ZPTPages).
- Fixed bug #723: Testbrowser was handling multiple submit buttons with
the same name incorrectly.
- Fixed behaviour of PasswordWidget to allow users not changing their
password when a password already exists.
- Fileresources now also set the Cache-control headers on 304
responses. This speeds up page loads a lot on pages with many
resources.
- Fixed validate method of schema.Date, now it does not accept
datetime objects anymore. this is needed because datetime and
date values are not comparable
- Fixed zope.annotation.factory to correctly setup containment for
objects that do not implement IContained.
- Fixed encoding of newlines, carriage returns, and tabs when
encoding attributes for widgets so we're consistent under all
Python 2.4.x versions (including 2.4.4, which failed tests before).
- Fixed issue 535: make HTTPInputStream work with Python 2.4.4.
- As part of zope.decorator refactoring, its dependancy were not removed
from DEPENDENCIES.cfg in zope.location. Also zope.security.decorator
doctests were not running due to missing boilerplate code.
- When a credential plugin redirects to the login page, it memorizes
the requested URL in the 'camefrom' GET parameter.
The 'camefrom' parameter was not accurate.
- Fixed a bug in getImageInfo which could cause an
UnboundLocalError under certain conditions.
- Deprecated ``zope.app.component.get/queryNextSiteManager``
function. Fixed ``zope.app.component.get/queryNextUtility`` to work
correctly with multiple bases.
- Generate an ObjectCreatedEvent when the root object is created.
- More or less fixed the static apidoc generator. (fix + workaround).
- Fixed issue 705, double URL unquoting of GET parameters in
functional tests.
- Fixed issue 676, utilities defined in Zope 3.2 weren't
converted properly.
- Fixed issue 675, Pluggable Authentication utilities with group
folders weren't updated correctly to replect the new database
format.
- Fixed issue 663, adding basic auth and session-credential
plugins didn't work.
- Fixed issue 650, a test failure on Mac OS X that seemed to
indicate deeper problems in ZEO's thread handling. Refactored
ZEO so that ZEO clients have their own asyncore loop and don't
need two separate networking modes.
As part of this, some bugs in connection management that
weren't tested in asynchronous mode were fixed.
Added a heart-beat to try to detect lost server connections in
situations where such disconnections are not reported by the OS.
- Fixed issue 664, apidoc didn't properly handle attributes that
showd up in dir() but that weren't gettable.
- Fixed issue 604, Mutable schemas were accidentally included in
the 3.2 release even though they weren't ready and didn't
work. They are not included in the 3.3 release.
- Fixed issue 564: binary set operations didn't work on proxied sets.
- Fixed issue 572: Dict fields with key_type or value_type set
didn't handle binding correctly.
- Fixed issue 576: The icon directive title attribute wasn't implemented.
- TAL interpreter didn't translate i18n Messages when inserted
as structure;
- Fixed issue 667: ZPT repeat "oddness"
- Fixed issue 646: TAL interpreter doesn't translate i18n
Messages when inserted as attributes;
- Fixed issue 665: ZCML swallowing KeyboardInterrupt / SystemExit.
- Fixed issue 525: DateWidget ru-format.
Added new Date(time)I18nWidget. Note: if you plan to use
DatetimeI18nWidget with timezone information take a look
at the note in the DatetimeI18nWidget docstring;
- Fixed issue 531: Spurious i18n deprecation warnings;
- Fixed issue 639: Default ITraverser ignores dict methods
- Fixed issue 636: Default ITraverser can't traverse old style
classes
- Fixed issue 638: TALES PathExpr calls result of alternate
subexpression
- Fixed issue 635: TALES PathExpr doesn't call old style classes
- Fixed issue 543: add 'decimal'-package to
zope/app/security/globalmodules.zcml
- Fixed issue 679: using the new IHTTPVirtualHostChangedEvent, session's
cliend id cookies fix up the set cookie path whenever the virtual host
information changes during a request.
- Fixed cookie path handling in functional tests.
- Fixed issue 716, make check no longer throws ValueError "I/O
operation on closed file" after all tests have run. Port
of Jim's workaround in 3.3.
- Fixed zope.app.catalog.attribute.AttributeIndex. It did not
remove the the previous value/object from the index IF the NEW
value was None.
- Fixed zope.index.field.index.FieldIndex. Unindex broke if the value
somehow dropped out of the forward index.
- We can have indexes whose values are determined by callable methods.
Raising an exception in the method should not be silently ignored
That would cause index corruption -- the index would be out of sync
- Added ObjectModifiedEvent when a text file object is modified through
the edit form in the ZMI.
- Resolved http://www.zope.org/Collectors/Zope3-dev/655 by having
zope.app.form use the transaction.doom() interface.
- Fixed classregistry.txt in zope.app.apidoc to write to a temporary
directory rather than the source tree.
- Fixed test_directives.py in zope.sendmail to write to a temporary
directory rather than the source tree.
- Fixed zope.app.file.browser.file. Last-Modified time was wrong.
- Fixed issue 758: ObjectCopier doesn't copy local utilities properly.