File contents
Zope Changes
This file gives information on changes made to Zope over time,
things that need to be done before the next release and future
plans.
Notes on Zope 2.0
ZOPE 2.0 REQUIRES PYTHON 1.5.2!
Zope 2.0 will the next stable Zope release. We will
no longer make Zope 1.11 changes. Zope 1.11 included some very
significant changes that were too big to lead to a stable release
before Zope 2.0 becomes stable, so these changes have, essentially
been moved to Zope 2.0.
So, Zope 2 includes:
- ZODB 3, the next generation of the Zope Object Database,
- Z Classes, a new mechanism for building Zope applications
- WebDAV support,
- ZServer, the integration of Zope and Medusa,
- Many other sundry big significant items:
o Look and feel improvements,
o Tighter security,
o Simpler creation of Python products.
ZODB 3
ZODB is the next generation of our object database architecture.
It provides a number of advantages over or existing databases:
- Support for concurrency,
- Well-defined storage management interface that will allow many
different storage management strategies to be used, from file
storage, to RDBMS storage, to memory storage,
- More robust file storage format,
- Much better version support and integrations of
versions with the transaction system. For example,
it is possible to commit from one version to another,
to undo version commit and abort, and to use "temporary
versions" to reduce memory use when manipulating large
quantities of data.
- Support for multiple databases in the same object system.
- Support for multi-process storage managers, although the
standard distribution will not include any multiple process
storage managers.
Note: Using ZODB 3 from Python
In ZODB 2, you could access the top-level application object
with::
import Main
app=Main.app
You could then navigate from the top-level object by getting
attributes, calling methods, etc..
In ZODB 3, you get the top-level object like this::
import Zope
app=Zope.app()
... do stuff with objects
# and when you're done:
app._p_jar.close()
You have to import the Zope application module, which uses
ZODB 2 rather than ZODB 2. In ZODB 3, you have to get a
connection to a database before you access an object. The
'app()' function combines opening a connection and getting the
top level object. When your done using the top-level object
(or any objects accessible from it) you can close the database
connection by calling the 'close' method on the '_p_jar'
attribute, which is the database connection. You don't need
to close the connection if you are going to exit Python
without doing any more work.
Don't forget to::
get_transaction().commit()
If you want any changes to made to be saved.
Note: Converting ZODB 2 (aka BoboPOS) data files to ZODB 3.
The bbb.py script in utilities can be used to convert data
files from ZODB 2 to ZODB 3 format::
utilities/bbb.py -f output_file input_file
Here's a example::
utilities/bbb.py -f var/Data.fs var/Data.bbb
ZODB 3 To-do
There are still a number of things to get working:
- Zope needs to be updated to be thread-safe. This is not as
hard as it sounds, since persistent objects are always
thread-safe. (Well, only one thread accesses any particular
copy of a persistent object.) The biggest issue here is
mutable global variables, mutable objects stored in classes,
mutable default Python function arguments, and global
variables in extensions.
- Most database adapters are likely to be problematic unless
the underlying extensions and libraries:
- allow multiple simultaneous database connections,
- are thread safe,
- give up the Python global interpreter lock when
making database calls.
This is only a problem when running Zope 2 with multiple
threads.
ZODB 3 Futures
These are features that are lkely to wait for releases after 2.0.
- Multiple database support
- OPTIMIZATION: FileStorage will get a more efficient data
structure for maintaining index information and key methods
in the ZODB framework will move to C.
ZClasses
ZClasses provide a powerful new way to develop Zope
applications. ZClasses allow new objects to be developed
entirely through the web.
ZClasses also support building applications through combinations
of Python classes created on the file system and objects created
through the web. For example, Python classes could implemented
business/domain logic and then augmented with Zope web methods
to provide a web interface.
Zope 2.0 Road-map
In short
We expect and expect to provide a stable Zope 2.0 release in
early August.
Zope 2.0 releases
We expend to make a number of Zope 2.0 alpha, beta, or
candidate releases over the next several weeks.
Early releases will support both the ZODB 2 (aka BoboPOS) and
ZODB 3. We may even support ZODB 2 in Zope 2.0 betas, but
ZODB 2 support will be phased out by the final Zope 2.0
release. Some features (e.g. the new control panel version
manager) will require ZODB 3.
Releases
Zope 2.0 alpha 4
Backward incompatibility
- The old ZopeHTTPServer is no longer supported or included.
Use ZServer.
Features added
- The let and return tags were added to DTML.
- Several new inpt form types were added:
:default -- allows you to specify default values
:record -- allows you to combine multiple form variables
into a single inot variable.
For example::
<input name="date.year:record:int">
<input name="date.month:record:int">
<input name="date.day:record:int">
will result in a single variable, 'date', with
attributes 'year', 'month', and 'day'.
:records -- allows you to input a list of records (ie a
table)
:ignore-empty -- Immit the field if the value is an empty
string.
For more information, see the section on "Form variable
types" in http://www.zope.org/Documentation/Reference/Trinkets.
- In the startup script, z2.py:
- The startup script, z2.py, has additional documentation on
providing empty strings as arguments.
- Added a -P option to the startup script, z2.py, to specify a
base port for the various servers. For example::
python z2.py -P8000
is equivalent to:
python z2.py -w8080 -f8021 -m8099
This is a convenient short-hand for systes with many zserver
instances running.
- Added an -l option to the startup script, z2.py, to specify
the location of the ZServer hit log. If the location is a
relative path, then it is assumed to be rooted in the 'var'
directory.
- A progress indicator was added to the database conversion
utility, utilities/bbb.py.
- The PCGI installer now writes the PCGI info file to use ZODB 3
rather than ZODB 2.
- The default content is provided in both ZODB 2 and ZODB 3
format.
- There is a new logging framework for reporting errors from
Python-level code. See the module zLOG.py for details.
For the time being, to turn on logging, set the environment
variable STUPID_LOG_FILE to a file name or to an empty
string to log to standard error. We will eventually provide
a more formal and functional logging configuration
interface.
- The hooks used by objects that modify their environment were
changed. The new hooks are:
manage_addHook -- called after an object has been added
manage_beforeDelete -- called before an object is deleted
manage_afterClone -- called after an object has been
copied. This should only be used by object that
capture their identity is some way other than their
id attribute or persistent id. (It's really for
ZClasses, which have global ids.)
- Pack is now supported for ZODB3 File Storages.
- The header output by manage_tabs now shows whether the
current object has been modified or locked by a version and
shows the version if the version isn't the current working
version.
- The locked-in-version decoration in the object management
contents view shows the locking version if the version isn't
the current working version.
- Several demonstration ZODB Storage implementations have been
added. See lib/python/ZODB/DemoStorage.py and
lib/python/ZODB/dbmStorage.py.
- Subtransactions have been added (instead of temporary
versions). If a true argument is given in a transaction commit
or abort call (e.g. 'get_transaction().commit(1)'), then
the commit or abort applies to a subtransaction of the
current transaction. This is useful in a number of ways,
including:
o Subtransaction commits on requests that work with lots
of data can reduce memory usage because data can be
removed from memory after changes are saved in a
subtransaction,
o You can rollback changes due to a local error without
rolling back *all* of the changes made in a long
transaction.
- There is an advanced interface for specifying alternate
storages for Zope. Zope will try to import the module
'custom_zodb' from INSTANCE_HOME and use it's Storage
attribute.
For example, to use a Demo storage based on the standard
File storage, yo might define a 'custom_zodb' module with::
import Globals, ZODB.FileStorage, ZODB.DemoStorage
name='%s/Data.fs' % Globals.data_dir
base=ZODB.FileStorage.FileStorage(name, read_only=1)
Storage=ZODB.DemoStorage.DemoStorage("Demo (%s)" % name, base)
- Find can now search text of SQL methods.
- DTML tree tags now have a reverse option.
- ZClasses now have class ids. These class ids are registered
in a central registry and are used when unpicking instances.
- Database connections now have a sync method for
synchronizing the connection with saved data. This is
useful for interactive connections to see database changes
made by other threads.
- Errors encountered when trying to unpickle object state are
now logged, if logging is enabled.
- Added an extra checkpoint to ZODB 3 FileStorage Transaction
commit to better handle system crashes.
- ZPublisher request objects now have a BODYFILE key to get
the request body as a file for non-form non-GET requests.
- Cookie support was added to the ZServer FTP server to make
FTP access compatible with cookie-based authentication.
- ZServer now includes a NT Service, 'ZServer.py' This service
requires the Python win32 extensions. It is not yet complete
and not yet integrated with the Zope installer. It does however
include a large doc string.
- ZServer is offically using the z2.py start script now. The old
start.py and zinit.py were removed. Note: z2.py will call zdaemon.py
for you, if you want to use ZServer in daemon mode on Unix.
- Added a 'has_permission' method to user objects. This facilitates
finding out if a user has access to a given object. For example::
<!--#if "AUTHENTICATED_USER.has_permissions('View',someObject)"-->
- The product add list is now filtered. This should keep objects out of
the product add list for which the user does not have adequite
permissions. This is implemented with a new method,
'filtered_meta_types' which returns all the meta_types for which a
given user has permissions. Note: Right now ZClasses do not associate
permissions with Products. Thus all Control Panel Products appear in
the product add list, no matter what roles the user has.
- HTTP REQUEST objects now use HTML in their string representation.
- The REQUEST keys of the form BASEx and URLx, where x is an integer
now allow x to be greater than 9.
- index_html is not longer used automatically for XML-RPC
requests.
- ZPublisher debugger, 'ZPublisher.test' now accepts a 'extra'
keyword argument with a dictionary giving extra variables to
be added to the request. This is handy for testing methods
that require large amounts of input data, such as file uploads.
- The load_site utility ('utilities/load_site.py') now accepts
a '-9' switch to make it work with Zope (and Principia)
sites at revisions 1.9 and lower.
Bugs fixed
- Got rid of some DOS line-endings in xmlrpclib.py that caused
install-time module compilation to fail.
- Fixed DOS line-endings in medusa/max_sockets.py
- Fixed a NameError (missing TupleType) definition in
the export/import (copy/paste) machinery.
- The startup script failed on Windows because it imported the
posix module without checking the os.
- ZServer crashed when the number of simultaneous connections
exceeded a system limit, especially on Windows. ZServer now
stops accepting new connections when the number of active
connections exceeds a threshold.
- Accessing cached results of items() (or values() or keys())
calls on BTrees caused core dumps if affected elements were
deleted. For example::
for k in abtree.keys():
del abtree[k]
Note that this code is still incorrect due to the fact that
the objects returned from abtree.items() (or values() or
keys()) have reference, rather than copy semantics.
- Compiling Acquisition.c caused (bogus) compiler errors on
SGI.
- zdeemun wus mispeled
- Local roles were not handled correctly when filtering
management views.
- Copying and pasting ZClass instances copied and pasted their
ZClasses too, effectively disconnecting them from their
managed ZClasses. The same thing happened when ZClass
instances were exported and imported.
- The Database area in the control panel was broken.
- Copy and paste of multiple objects was broken.
- Copy and paste of ZClass methods was broken.
- Copy and paste of ZClass properysheets was enabled and
broken. It is now disabled.
- Accidential import of BoboPOS in processes using ZODB (3)
caused strange errors.
- A bug in batch processing caused batch processing to hang or
give incorrect results.
- DocumentTemplate-based classes, like DTMLDocument and
DTMLMethod could not be subclassed correctly.
- There was a memeory leak in the DTML try tag.
- When adding folders with user databases, no check was made
to make sure the user was permitted to add a user database.
- Broken objects weren't created for objects whos class could
not be found when using ZODB 3.
- The 'self' argument wasn't properly passed to external
methods used in ZClasses.
- The Setup file in the SearchIndex package had an uneeded -I
option that caused compilation errors on some platforms.
- ZGadflyDA transactions were not committed.
- ZClasses didn't provide an interface to edit their titles.
- Propertysheets were broken for ZClasses that inherited from
built-in classes, like Folder and DTMLDocument.
- Propertysheets were disabled for instances by default. Now,
propertysheets have the "manage properties" permission by
default.
- The navigation pane wasn't updated when classes were added.
- Changes in ZClasses were not properly propigated to all
database connections using ZODB3.
- Databse connections were not closed correctly under heavy
load when the number of application threads exceeded the
number of database connections in the connection pool. This
lead to Zope locking up under load if the application thread
count was increased using the z2.py -t option.
- undo in ZODB 3 didn't properly refresh objects.
- export and import was broken for ZODB 3.
- Fixed ZServer HTTP zombie killing. Now hung connections are
successfully closed.
- A bug in handling the case when a file was created on open
without the create flag caused weird errors on windows.
- The REQUEST BASE1 key was not computed correctly when
SCRIPT_NAME was an empty string.
- It was impossible to return an empty list or dictionary to
an XML-RPC request.
- The database conversion script failes when the first record
in the input file lacked peoperly-formatted transaction
data. The conversion script also didn't work on some
systems due to an incorrect 'flush' call on the *input*
file.
- Factories that were also ZClass methods didn't get
unregistered properly when they were deleted.
Zope 2.0 alpha 3
Features added
- XML-RPC support
All Zope objects are now XML-RPC servers.
- ZODB 2 (aka BoboPOS) to ZODB 3 FileStorage database conversion
An option has been added to the bbb.py script in the
utilities directory to convert ZODB 2 database files to ZODB
3 format. The bbb.py script now accepts an '-f' option that
takes an argument specifying an output file name. For
example, to convert the ZODB 2 data file, Data.bbb, in the
var directory, to ZODB 3 FileStorage format::
python utilities/bbb.py -f var/Data.fs var/Data.bbb
Note that version data are not converted.
- In Z Classes, Methods and Property Sheets now have a "Define
Permissions" management tab to map permissions. This tab used
to be labeled "Security".
- ZServer's FTP server now attempts to display an object's owner
as defined in local roles.
Bugs fixed
- The cache management screens were broken
- Local roles on DTML Methods and Documents were not persistent.
- ZServer's select trigger has been updated and now shouldn't give
errors when running ZServer as another users.
- The tree tag used persistent object ids in ways that were
not compatible with ZODB 3. This caused strange behavior
like weird cntent-types and invalid state messages.
- The DTML In tag no longer handled batch processing correctly,
and sometimes got into infinite loops. This was due to a very
old bug that was made effective by Python 1.5.2.
- Objects that could not be loaded because their implementing modules
(or packages) had been removed were not handled properly as
broken objects when ZODB 3 was used.
- The DTML Python string format did not allow expressions for
simple variable insertion. Expression insertion is now
allowed if the var tag name if the var tag name is supplied,
as in::
%(var expr="x+1")s
Note that, because of this change, the var tag name must
also be supplied when a variable named 'var' is inserted, as
in::
%(var var)s
Zope 2.0 alpha 2
Features added
- There is a new optional EXPERIMENTAL HTML DTML syntax. As
an alternative to SSI syntax, you can now use ordinary HTML
syntax, as in:
<dtml-in objectIds>
<dtml-var sequence-item>
</dtml-in>
You can also use an entity-reference syntax for the var tag
as an alternative to the tag syntax. For example::
&dtml-foo;
is equivalent to::
<dtml-var foo>
and is especially handy in attributes::
<a href="&dtml-foo;">
Both the new syntax and the SSI syntax are allowed in the
same document. In fact, if you were really twisted, you
could:
<dtml-in objectIds>
<dtml-var sequence-item>
<!--#/in-->
IMPORTANT
This feature really is EXPERIMENTAL. It could disappear
someday, depending on how people like it. We'd really like
to get feedback on how useful this feature is.
- reverse options were added to the in and tree tags.
- The startup script, z2.py, has a -D option to turn on
debugging mode.
- Made enivorment variable settings work with the http
server. So now you can do things like ./z2.py -w 8888
SCRIPT_NAME=Zope and actually have the specified SCRIPT_NAME
override the normal SCRIPT_NAME. This is Useful for using ZServer
behind a proxy.
- Added support for the Medusa monitor server.
- There's a first cut at a ZServer NT service. This is Zope on
NT's answer to zdeamon.py
It actually seems to work, though there's still a fair
amount missing.
- The error messages for missing or miss-formatted access
files was improved.
- A new debugging method, manage_debug, has been added to
Control_Panel to monitor the Zope process for possible
memory leaks.
- The name, 'this', has been added to the namespace available
to construction methods to provide a function for computing
the destination object. The name, 'this' is essentially
equivalent to 'Destination' and 'Destination' will be
depricated eventially.
- The title of the main Zope management interface now includes
a full URL.
- Folders that have (or acquire) index_html methods now have
view tabs for viewing index_html.
- On browsers that support Java Script, the "Add" button is
ommitted and the add form is visited as soon as a selection
is made from the select list.
- The python-pickle format used to export data from ZODB 2 was
updated to handle string data differently.
Bugs fixed
- A number of bugs and features were left out of the
release notes for Zope 2.0 alpha 1. The notes for
Zope 2.0 alpha 1 have been updated substantially.
- There was a serious memory leak introduced when a security
bug was fixed in 1.10.0.
- There was a memory leak in ZODB 3 persistent objects, which
now manage object IDs as persistent objects.
- The Python 1.5.2 cgi module didn't work with Zope.
Zope now includes its own fixed version of the module.
This bug caused FTP, Netscape Publishing and WebDAV to fail.
- A bug in transaction management caused Gadfly requests to
fail. Other database adapters need to be updated.
- Running ZServer as nobody failed due to the order in which
the log file was opened.
- Added fix contributed by Brian Hooper for HTTP Clients which
don't always spell their HTTP headers correctly.
- A number of classes didn't get there reference-counts
reduced when instances were destroyed. This confused the
new memory allocation monitoring tool.
- New user folders had no effect because they did not get
properly registered in their containing folders.
- Changes made to factory objects were lost when a process was
restarted.
- Clicking on the 'Help' caused the help information to be
displayed in the current frame, rather than in a new
window.
- Shutting down Zope attempted to save the database index even
when Zope was run in read-only mode.
- A number of fixes were made in the Date-Time support.
- Batch processing in the in tag sometimes failed.
- Sites with custom roles in the top-level application
object did not pick up the new 'Owner' role.
- Content-type detection had problems in DTML documents and
methods.
- Some cookie expiration dates used 2-digit years.
- Error values for errors raised by ExternalMethods were lost.
- Values returned bu absolute_url were not URL quoted.
- Extra newlines were prepended to documents when they were
edited.
- Objects ids were not properly quoted in a number of places,
because id quoting was unnecessary until recent relaxation
of the rules for ids.
- ExternalMethods are now automatically reloaded when running
in debug mode.
- Search interfaces generated by the search interface wizard
no longer include a "Cancel" button.
- Errors were masked by a bug in handling ZODB3 transaction
aborts.
- The ZODB 3 cache manager deactivated objects too quickly,
causing performance to degrade.
- BASEx request variables were not computed correctly when
SCRIPT_NAME was not empty.
- The URLx variables couldn't be computed in some cases when
using ZServer.
Zope 2.0 alpha 1
BACKWARD INCOMPATIBILITY
- A change was made to the way ZClasses are constructed.
Previously, the __call__ method was an alias for the
index_html method which took took an id and a request
and created a new instance and added the instance to
the destination.
Now, the __call__ method simply calls the underlying
managed class with the supplied arguments to create and
return an instance. The instance is not added to a
folder.
The index_html method is now an alias for the
createInObjectManager method, which does what the
index_html method did before.
There is a new method, fromRequest, that takes an id
and a request and creates a new instance. It does not
at the instance to a destination.
Features Added
- Integration of ZODB 3
- The ZClass construction interface has been cleaned up to
make construction of ZClasses a little easier from Python.
- When adding ZClasses, there is now an option to
automatically create construction methods and a factory.
- "Management" screens now *only* show tabs a user permitted
to see. Used in combination with carefully selected roles,
this change provides an adaptable management interface.
- Instance homes can now have local Products directories.
- There is a new ZServer start up script that can be used without
modification and that integrates process management. This
script replaces the ZServer 'start.py' and 'zinit.py' scripts.
- When the new startup script is used, then the control panel
shows a "Restart" button which causes the Zope process to
exit and be restarted and a "Shutdown" button that causes Zope
to exit and not be restarted.
- There is a *very* rough cut at a centralized version manager
in the control panel. This is only functional when the
ZODB3 database is used. This feature will mature
significantly before the final 2.0 release.
- A new Zope icon was added, and the "powered by Zope" icon
has been updated.
- Made DTMLDocuments, DTMLMethods, Images, Files and Folders
subclassable by ZClasses.
- ZClass property sheets can now have read and modify
permissions.
- An "add list" name can be specified when creating a ZClass.
If specified, then construction methods and a factory are
created. This makes the class immediately instantiatable and
provides construction method examples.
- The ZClass basic property sheet now shows base classes.
- Changed the string representation of HTTPRequest so that
<!--#var REQUEST--> is a lot friendlier.
- Added a Zope debugging short cut.
Now::
import ZPublisher
ZPublisher.Zope(path)
is a shortcut for::
import ZPublisher
ZPublisher.test('Zope', path)
Bugs Fixed
- ZClass permission setting interfaces didn't show inherited
permissions.
- A number of bugs arising from attempts to set
caching headers were fixed.
- Some default permissions were not set correctly.
- The unused non-functioning resource-consuming Scheduler has
been removed.
- Access was given to objects without roles even if access
would be denied to the container.
- Fix submitted by Martijn Pieters:
Any property type int or long, set to 0, showed up in the
Properties Management tab as blank. This resulted in errors
when trying to change values of other properties, etc.
- Version names were computed incorrectly.
- Delete and rename were broken for ZClasses.
- It wasn't possible to override inherited attributes with
methods in ZClasses.
- Property values were not removed from ZClasses when property
sheets were deleted. This made it impossible to re-add a
property from a deleted property sheet.
- Generated property view and edit forms for ZClass property
sheets had a number of problems.
- The propertysheets property sheet should only allow addition of
property sheets.
Zope 1.11.0 pr1, which should have been named Zope 2.0.0 alpha 0.
Lots has changed in this release. The major news is ZClasses and WebDAV.
Features Added
- Added WebDAV support. See http://webdav.zope.org/ for details.
- Added Z Classes. Documentation is forthcoming.
ZClasses might be viewed as somewhat experimental, although
we're using them aggressively for internal projects.
- Added Property Sheets. Documentation is forthcoming.
- ZServer now included in distribution.
- Added new product registration interface. Documentation is
forthcoming.
- Added local roles which allow for permission settings for
users on individual objects. This allows for 'ownership' of Zope
objects. Added 'Owner' role to default roles, and automatic
setting of the 'Owner' role on a created object to the user who
created it.
- Added hooks for XML-RPC support to ZPublisher. See the source
for details. XML-RPC support is not yet finished.
- Added automatic height/width detection for JPEG images.
- Revised Zope error messages.
- A new DTML 'try' tag added based on work by Jordan B. Baker.
See the source for details. Documentation is forthcoming.
- A new DTML 'mime' tag has been added. See the MIMETools README.txt
for more information.
- A new 'range' function added the the '_' DTML variable.
- A new 'utilities' directory is included in the distribution.
- A new flag attribute, 'only', of the DTML 'with' tag
prunes the DTML namespace to only the namespace created
with the with tag.
- Added contributed support for encoding options in the SendMail
tag and MailHost send method.
- Mangement tabs are now prettier and allow status messages with
the manage_tabs_message variable.
- Added a method of notifying users of changes without using a
MessageDialog. This makes editing DTML Documents and Methods
easier.
- Added more documentation to Product add screens.
- New icons for many Zope objects.
- Sessions are now known as Versions.
- Changed from using 'manage_main' as default management method to use
'manage_workspace' which is a reserved method that dispatches to the
default management interface which is the first interface defined
in manage_options
- Permission settings are now inherited by Products from their base
classes. This means when you build a Product you only need to specify
its particular permission settings.
- Changed ZPublisher.publish_module's interface so that instead of
providing a stdin, stdout, and stderr, you can provide a Request and
a Response object. ZServer makes extensive use of this feature.
- Added methods to HTTPRequest to allow access to ZPublishers object
traversal. HTTPRequest.clone and HTTPRequest.resolve_url. See the
source for more details.
- Added a new "builtin" function reorder to DTML.
reorder(s, [with, without]])
Reorder the items in s according to the order given in with
and with items mentioned in without removed. Items from s
not mentioned in with are removed.
s, with, and without are all either sequences if strings
or sequences of key-value tuples, with ordering done on the
keys.
This function is useful for constructing ordered select lists.
Bugs Fixed
- Added small fixes to ZopeHTTPServer in anticipation of DAV.
- Construction, upload, and edit methods did not consistently
support either string or file data. This caused really weird
behavior when file upload was used with out includeing the
':string' suffix in the argument name when doing a file upload.
This bug was previously (and incorrectly) reported as a
ZPublisher.Client problem.
- Errors in ExternalMethods were masked by bugs in error
reporting logic. The bugs were made far more effective
by Python 1.5.1.
- Databases (or export files) created in binary distributions
were not usable in source distributions due to cPickle
limitations in stock Python 1.5.1. We now link/copy the
cPickle extension to BoboPOS to make sure that it uses the
latest version.
- Fixed registration of MailHost settings and incorrect default
quoted-printable encoding of message bodies.
- Added contributed patch that fixes bug in copied-object id
generation.
- DTML Documents and Methods now attempt to determine their
content-type rather than assuming they are text/html.
- Fixed PUT bug in determining content-type of binary files.
- Added changes that allow the top level userfolder to be replaced by a
UserDB or other userfolder-like object.
- Fixed an FTP support bug that sometimes kept simple items from
producting FTP listings.
- Added URL1 instead of "." as the form target for the workspace forms --
using "." causes NS servers to intercept the request and report an
error, making Zope effectively unusable.
- Added ZPL 1.0 and credits to copyright link in management screen.
- Fixed a bug that prevented validate() from working if the top-level
object were accessed and no default object (index_html) existed.
- Fixed a logic bug in security validation that allowed access to
unacquired objects that didn't have __roles__ even if the
containing object was protected.
Zope 1.10.2
Bugs Fixed
- Fixed a permission problem with DTMLMethod objects that caused
errors when attempting to commit permission changes.
- Factories could not determine the available methods
when they were being edited, making them uneditable.
Zope 1.10.1
This is a Python 1.5.2 beta 2 compatability release.
A Python C API change in Python 1.5.2 beta 2 broke
Zope. This release contains a fix.
Zope should work correctly with Python 1.5, 1.5.1 and
beta versions of 1.5.2.
Zope 1.10.0
New Features
- Added Import/Export interfaces to Folders.
Bugs Fixed
- Fixed a bug in ZopeHTTPServer which caused it to fail on POST
requests without content-type headers.
- PUT and file uploads would fail if the content-type could
not be determined. Now objects created via PUT and file
upload will default to either 'application/octet-stream'
for binary files or 'text/plain' for non-binary files if
no content-type can be determined from headers or filename
extensions.
- Fixed a permission bug left from a change to the Find support.
- Fixed misc typos in docstrings and docs.
- Fixed a bug that kept objects from being freed from the cache!
Basically, there was never a check for inactive objects.
- MailHost objects didn't do appropriate CRLF conversion or
recognize 4xx server responses.
Zope 1.10.0 pr1
New Features
- Documents generated by the search interface wizard
no longer use tab characters.
- Added a -s option to ZopeHTTPServer. This is useful
for emulating older sites when generating screen shots
for creating or updating documentation.
- Default bobobase now includes a Zope button along with a link
to the Zope site. This satisfies the ZPL attribution requirement.
The button is created by a new builtin method
'ZopeAttributionButton'. Also, both the source and the binary
distributions now have the same default bobobase.
- Made the logic for getting SOFTWARE_HOME a bit more robust, so that
it handles relative paths and paths starting with '.' and '..'.
This is useful when simply importing Main from the Python
prompt in the lib/python directory.
- The ThreadLock module has been changed to reflect changes
in the Python API in Python 1.5.2.
- The '_' variable in DTML now has the random module
as an attribute and DateTime.DateTime as the attribute DateTime.
- Added keys() and items() methods to the REQUEST object.
- Added get_header() method to the REQUEST object for retrieving
HTTP headers.
- New SearchIndex package and BTree component have been added to
the distribution, providing low-level support for products with
built-in searching such as Tabula and Confera.
- Documents have now been split into two distinct object types:
DTML Documents and DTML Methods. DTML Methods behave exactly
as Document objects did. DTML Documents are similar except that
the "client" or "self" of a DTML Document is the DTML Document
itself rather than its parent, and DTML Documents can have
properties.
- DTML Documents, Image and File objects can now have properties.
- A new PropertyManager mixin class allows developers to easily
add properties and property management to non-Folder objects.
- Added a new absolute_url method which can generate an absolute
url for the object on which the method is called.
- GIF and PNG Images now figure out their own dimensions when
uploaded. Image height and width properties are now editable.
- Images now generate themselves as html IMG tags, using an absolute
url and correct height and width tags if possible.
- There is a new form input type, boolean, for inputing boolean
data.
- Added a read_only option to the SimpleDB.MultipleRevision and
PickleDictionary constructors to open a database in read_only
mode.
- Added an environment variable, ZOPE_READ_ONLY, used by the
Zope framework. If this variable is set, then the database
is opened in read only mode. If this variable is set to a
string parsable by DateTime.DateTime, then the database is
opened read-only as of the time given. Note that changes
made by another process after the database has been opened
are not visible.
- Added a database_quota option to the SimpleDB.MultipleRevision and
PickleDictionary constructors and a
SimpleDB.MultipleRevision.set_quota method to set a database
quota. The quota is given as either an integer number of
bytes, or a function taking an integer number of bytes
argument and returning whether the quota has been exceeded.
- Added an environment variable, ZOPE_DATABASE_QUOTA, used by the
Zope framework. If this variable is set, it should be set to
an integer number of bytes. Additions to the database are
not allowed if the database size exceeds the quota.
- Added size and last modification time to DTML Method and DTML
Document edit interface.
- Added a new module, BoboPOS.winlock, that provides file
locking on windows. This should prevent many cases of data
corruption.
- Added FTP support to Documents, Files, Images, and Folders.
FTP interface is detailed in OFS/FTPInterface.py though it may
change. Basic FTP support was also added to SimpleItem to make
it easier for Zope objects to support FTP.
Bugs Fixed
- Permissions for manage_clone method were wrong, meaning that
essentially only managers could use it.
- File paths that showed up in tracebacks reflected the paths the
files had when they were compiled (at distribution build-time).
The compiled-in paths have been changed to be relative to the
Zope installation directory.
- Fixed a bug in ZPublisher's special handling the "cancel"
submit buttons. The test for the cancel button was case
sensitive. I changed it so it would accept any case, as
well as extra spaces.
Cancel buttons should probably be handled using the new
:method form type, but this would require the presense of an
appropriate redirect method. Perhaps there should be
a :redirect form type.
- Date strings with years < 31 were not accepted, even
through the documentation says they should be.
- If Zope crashed or was unable to completely write a database
record, then on restart, a data corruption error was reported.
Now, truncated records are removed if necessary on start up.
If necessary, other records are removed as well to avoid
partially-written transactions.
- Lack of sys.argv in the win32 service version of Zope caused
it to raise errors under certain conditions.
- Several HTTP PUT related bugs were fixed.
- Simple items did not have an objectValues method, which caused
odd behavior in certain tree tags since the method would be
acquired from the parent of the simple item.
- The Find form in the management interface depended on javascript
to function properly.
- Added a fix to compensate for the fact that Apache servers may
rename the entire cgi environment when mod_rewrite rules are
used in .htaccess files.
- If system clocks were changed, so that database records
had records in the "future", then database corruption could
either occur or be incorrectly reported. Now this situation
results in an informative error message and corruption does
not occur.
Zope 1.9.0
New Features
- Zope now provides better information about products. If a
Product has a README.txt, then it will be readable through
the product management interface.
If a product encounters an error during startup, the
traceback is available through the product management
interface.
- Cache statistics are displayed in minutes, rather than
seconds.
- Products can define the attribute '__module_aliases__' in
their '__init__' modules that specifies aliases for modules
used in the product. This is useful if module names have
changed and the database contains pickles refering to the
old modules. The attribute should be a sequence of
tuples. Each tuple has a (dotted) module name and a module.
Bugs Fixed
- Development on ZopeHTTPServer has been frozen in anticipation
of the switch to Medusa. Therefor ZopeHTTPServer still does
support PUT. Sorry.
- ZPublisher.Client used the obsolete rand module.
- Errors occuring during product import caused Zope to fail to come
up.
- Product version information was not displayed correctly.
- ZGadflyDA cached table meta-data which lead to missleading
information when browsing databases.
Zope 1.9 beta 3
New Features
- Z SQL Methods (FKA Aqueduct) and the Z Gadfly Database Adapter
are now included.
- The argument handling for ZopeHTTPServer has been changed to
be a bit more flexible wrt the order of argumements.
While options must still come first, environment settings
can be given in any order. This makes startup scripts loke
serve.py quite a bit simpler.
- ZopeHTTPServer now sports preliminary support for PUT publishing.
- ZopeHTTPServer now serves from port 9673 by default, not 8080.
Bugs fixed
- The start.bat file used to start ZopeHTTPServer on win32 was
misnamed and didn't correctly pass command-line arguments.
- Win32 machines without an existing Python installation had problems
due to PYTHONPATH bootstrapping.
- The included ZopeHTTPServer was failing to start correctly on
win32 machines that were not connected to the network.
Zope 1.9 beta 2
In addition to various documentation updates, this release includes:
New Features
- Changed serve.py to accept ZopeHTTPServer command-line options.
- Added a -P option to the ZopeHTTPServer to specify a file
to contain the process ID. This allows a script to stop
the process on Unix.
- Added support for the environment variables, Z_REALM and
Z_DEBUG_MODE to set an authentication realm and to
enable debug mode.
Bugs fixed
- External methods were broken due to differences in
Python 1.4 and Python 1.5 comparison semantics.
- ZopeHTTPServer command-line environment settings
were not available in os.environ.
- Some class references were wrong in examples in the ExtensionClass
documentation.
- INSTANCE_HOME was not set correctly when the debugger was run
with a relative path to the published module.
- The #! line in the ZopeHTTPServer was hidden by the copyright
statement and didn't have the right path.
- A bug in pcgi_publisher.py caused file uploads larger than 1 MB
to fail.
Zope 1.9 beta 1
Bugs fixed:
- pcgi did not build correctly on Solaris 2.6
- links in headers were broken when Zope was reached with
/, as is the case when the ZopeHTTPServer is used.
- Python sources used tabs and spaces for indentation, which
made some people unhappy.
- Copyright statements were missing or out of date.
- Added better instructions for building and running Zope.
- Added new Zope License and attribution information.
- Merged BoboHTTPServer updates with ZopeHTTPServer. Including
socket changes to allow easier stopping and starting.
- Shutting down the ZopeHTTPServer from the application
caused an empty document to be returned.
- The install scripts failed if run more than once when attempting
to create a var directory.
Features
- Added (and old version of) the zlib module to make
installation simpler.
- Zope requires an access file. The install scripts now create
one.
Zope 1.9 alpha 1
This was the inital Zope test release.
Futures
Things we plan to happen real soon (maybe next release)
Features
- include a serve shell script along the lines of:
#!/bin/sh
python serve.py > var/serve.log 2> var/serve.errors &
Note that this script should be written by the installers
and use sys.executable.
(Brian)
Bugs
- Chase down weird bugs reported by Michel Pelletier.
Things to do sometime
Features
- Better deamon management for ZopeHTTPServer, Medusa,
and pcgi-LRP (when pcgi wrapper gets out of process
management business).
(Note that there is some experimental code along these
lines in principia main.)
- Need make_clean.py that:
- runs make clobber for the extensions
- runs make clean in pcgi
- prints an message reminding user to manually remove var
(brian)
- The default access file should be handled a little differently.
The installer should make people enter values, the default
should have a randomly generated password, or the default should
be ommitted.
Bugs