CHANGES.txt 52.8 KB
Newer Older
Jim Fulton's avatar
Jim Fulton committed
1 2 3 4 5 6
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.

Jim Fulton's avatar
Jim Fulton committed
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
  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.

Jim Fulton's avatar
Whew.  
Jim Fulton committed
61 62 63 64 65
      Note: Using ZODB 3 from Python

        In ZODB 2, you could access the top-level application object
        with::

66 67
          import Main
          app=Main.app
Jim Fulton's avatar
Whew.  
Jim Fulton committed
68

69 70
        You could then navigate from the top-level object by getting
        attributes, calling methods, etc..
Jim Fulton's avatar
Whew.  
Jim Fulton committed
71

72
        In ZODB 3, you get the top-level object like this::
Jim Fulton's avatar
Whew.  
Jim Fulton committed
73

74 75
          import Zope
          app=Zope.app()
Jim Fulton's avatar
Whew.  
Jim Fulton committed
76

77
          ... do stuff with objects
Jim Fulton's avatar
Whew.  
Jim Fulton committed
78

79 80
          # and when you're done:
          app._p_jar.close()
Jim Fulton's avatar
Whew.  
Jim Fulton committed
81

82 83 84 85 86 87 88 89 90 91
        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.
Jim Fulton's avatar
Whew.  
Jim Fulton committed
92

93
        Don't forget to::
Jim Fulton's avatar
Whew.  
Jim Fulton committed
94

95
          get_transaction().commit()
Jim Fulton's avatar
Whew.  
Jim Fulton committed
96

97
        If you want any changes to made to be saved.
Jim Fulton's avatar
Whew.  
Jim Fulton committed
98

Jim Fulton's avatar
Jim Fulton committed
99
      Note: Converting ZODB 2 (aka BoboPOS) data files to ZODB 3.
Jim Fulton's avatar
Whew.  
Jim Fulton committed
100

Jim Fulton's avatar
Jim Fulton committed
101 102
        The bbb.py script in utilities can be used to convert data
        files from ZODB 2 to ZODB 3 format::
Jim Fulton's avatar
Jim Fulton committed
103

104
          utilities/bbb.py -f output_file input_file
Jim Fulton's avatar
Jim Fulton committed
105

Jim Fulton's avatar
Jim Fulton committed
106
        Here's a example::
Jim Fulton's avatar
Jim Fulton committed
107

Jim Fulton's avatar
Jim Fulton committed
108
           utilities/bbb.py -f var/Data.fs var/Data.bbb
Jim Fulton's avatar
Jim Fulton committed
109

Jim Fulton's avatar
Jim Fulton committed
110 111 112 113 114
	You can also convert export files from ZODB 2 by inclding the
        -x option::

           utilities/bbb.py -x -f output.zexp input.bbe

Jim Fulton's avatar
Jim Fulton committed
115
      ZODB 3 To-do
Jim Fulton's avatar
Jim Fulton committed
116

Jim Fulton's avatar
Jim Fulton committed
117
        There are still a number of things to get working:
Jim Fulton's avatar
Jim Fulton committed
118 119 120 121 122 123 124 125 126

        - 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
127
              making database calls.
Jim Fulton's avatar
Jim Fulton committed
128 129

          This is only a problem when running Zope 2 with multiple
130
          threads.
Jim Fulton's avatar
Jim Fulton committed
131

Jim Fulton's avatar
Jim Fulton committed
132 133 134 135 136 137 138 139 140 141
      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.

Jim Fulton's avatar
Jim Fulton committed
142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157
    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
 
Jim Fulton's avatar
Jim Fulton committed
158
        We expect to provide a stable Zope 2.0 release in
Jim Fulton's avatar
Jim Fulton committed
159
        early August.
Jim Fulton's avatar
Jim Fulton committed
160 161 162

      Zope 2.0 releases

Jim Fulton's avatar
Jim Fulton committed
163 164
        We expect to make two beta releases in July 1999 followed
        by a final release in early August.
Jim Fulton's avatar
Jim Fulton committed
165

Jim Fulton's avatar
Jim Fulton committed
166 167
  Releases

168

Amos Latteier's avatar
Amos Latteier committed
169
    Zope 2.0 beta 1
Jim Fulton's avatar
Jim Fulton committed
170 171 172 173

      Backward incompatibility

        ZODB 2 is no longer supported or included!
Amos Latteier's avatar
Amos Latteier committed
174 175 176
    
      Features added
      
177 178 179 180
        - The default ports used by ZServer have been changed. The
          new default ports are: 8080 for HTTP, 8021 for FTP and
          8099 for the monitor server.

Amos Latteier's avatar
Amos Latteier committed
181 182 183 184
        - ZServer now uses the zLOG logging mechanism for informational and
          warning messages.
      
        - ZServer now includes a fairly stable NT service ZService.py
185 186 187 188 189 190

        - 'access' file now can use SHA-1 hashing, and now does by
          default

	- 'zpasswd.py' added to utilities directory to manage this
          new 'access' file
Jim Fulton's avatar
Jim Fulton committed
191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234

        - A number of changes have been made to enhance security
          control in through-the-web-developed products:

          - There are new "Permission" objects that can be added to 
	    Products.  Permission objects provide a mechanism for
            defining new permissions. These new permissions show up in
            folder security screens.

          - Factory objects can have permission settings. This affects
            whether items show up in add lists and who can use factories.

          - Objects in products now have permission mapping rather
            than direct permission settings just like ZClass methods.

          - New permissions cannot be defined in ZClasses any longer.
	    Rather, ZClasses can select from global permissions,
	    including permissions defined with permission objects.

          Here's a sample scenario:

            1. Add a ZClass, "Container" with the option to create a
               factory and constructor methods.

            2. Add a permission object with the permission "Manage
               Containers".

            3. Change the permission of the factory created in step 1
               to "Manage Containers".

            4. Visit the ZClass created in step 1, view the "Define
               Permissions" view and map the "Create class instances"
               permission to "Manage Containers".

            5. Visit the constructor DTML Methods created in step 1,
               view the "Define Permissions" view and map the "View"
               permission to "Manage Containers".

          In this scenario, we created a ZClass and made it addable
          only by users (roles) that have the "Manage Containers" permission.

        - The pyexpat extension module for using James Clark's 
          expat library for parsing XML is included in the
          distribution as Shared.DC.pyexpat.
Amos Latteier's avatar
Amos Latteier committed
235 236 237 238 239
      
      Bugs Fixed
      
        - You can no longer cd to an acquired directory in ZServer FTP.

Jim Fulton's avatar
Jim Fulton committed
240 241 242 243 244 245 246
        - A number of changes were made for thread safety.  This was 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.
247

Jim Fulton's avatar
Jim Fulton committed
248 249
    Zope 2.0 alpha 4

Jim Fulton's avatar
Jim Fulton committed
250 251 252 253 254
      Backward incompatibility

        - The old ZopeHTTPServer is no longer supported or included.
          Use ZServer.

Jim Fulton's avatar
Jim Fulton committed
255 256
      Features added

Jim Fulton's avatar
Jim Fulton committed
257 258
        - The let and return tags were added to DTML.

Jim Fulton's avatar
Jim Fulton committed
259 260 261
        - Several new inpt form types were added:

            :default -- allows you to specify default values
Jim Fulton's avatar
Jim Fulton committed
262

Jim Fulton's avatar
Jim Fulton committed
263 264 265 266 267 268 269 270 271 272
            :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
Jim Fulton's avatar
Jim Fulton committed
273
                attributes 'year', 'month', and 'day'.
Jim Fulton's avatar
Jim Fulton committed
274 275 276 277

            :records -- allows you to input a list of records (ie a
                        table)

Jim Fulton's avatar
Jim Fulton committed
278 279
            :ignore-empty -- If the field if the value is an empty
                             string.
Jim Fulton's avatar
Jim Fulton committed
280 281 282 283 284 285

          For more information, see the section on "Form variable
          types" in http://www.zope.org/Documentation/Reference/Trinkets.

        - In the startup script, z2.py:

Amos Latteier's avatar
Amos Latteier committed
286 287
        - The startup script, z2.py, has additional documentation on
          providing empty strings as arguments.
Jim Fulton's avatar
Jim Fulton committed
288
    
Amos Latteier's avatar
Amos Latteier committed
289 290
        - Added a -P option to the startup script, z2.py, to specify a
          base port for the various servers. For example::
Jim Fulton's avatar
Jim Fulton committed
291
    
Amos Latteier's avatar
Amos Latteier committed
292
        python z2.py -P8000 
Jim Fulton's avatar
Jim Fulton committed
293
    
Amos Latteier's avatar
Amos Latteier committed
294
          is equivalent to:
Jim Fulton's avatar
Jim Fulton committed
295
    
Amos Latteier's avatar
Amos Latteier committed
296
        python z2.py -w8080 -f8021 -m8099
Jim Fulton's avatar
Jim Fulton committed
297
    
Amos Latteier's avatar
Amos Latteier committed
298 299
          This is a convenient short-hand for systes with many zserver
          instances running.
Jim Fulton's avatar
Jim Fulton committed
300
    
Amos Latteier's avatar
Amos Latteier committed
301 302 303 304
        - 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.
Jim Fulton's avatar
Jim Fulton committed
305

Jim Fulton's avatar
Jim Fulton committed
306 307
        - A progress indicator was added to the database conversion
          utility, utilities/bbb.py.
Jim Fulton's avatar
Jim Fulton committed
308

Jim Fulton's avatar
Jim Fulton committed
309 310 311 312 313
        - 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.
Jim Fulton's avatar
Jim Fulton committed
314

Jim Fulton's avatar
Jim Fulton committed
315 316
        - There is a new logging framework for reporting errors from
          Python-level code.  See the module zLOG.py for details.
Jim Fulton's avatar
Jim Fulton committed
317

Jim Fulton's avatar
Jim Fulton committed
318 319 320 321 322
          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.
Jim Fulton's avatar
Jim Fulton committed
323

Jim Fulton's avatar
Jim Fulton committed
324 325
        - The hooks used by objects that modify their environment were
          changed.  The new hooks are:
Jim Fulton's avatar
Jim Fulton committed
326

Jim Fulton's avatar
Jim Fulton committed
327 328 329 330 331 332 333 334 335 336 337 338
            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.

Amos Latteier's avatar
Amos Latteier committed
339 340 341 342
    - 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. 
Jim Fulton's avatar
Jim Fulton committed
343 344 345 346 347 348 349 350 351

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

Amos Latteier's avatar
Amos Latteier committed
352 353 354 355 356 357
    - 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:
Jim Fulton's avatar
Jim Fulton committed
358 359 360 361 362 363 364 365 366 367 368 369 370 371 372

            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. 

Amos Latteier's avatar
Amos Latteier committed
373
      For example, to use a Demo storage based on the standard
Jim Fulton's avatar
Jim Fulton committed
374 375 376 377 378 379
          File storage, yo might define a 'custom_zodb' module with::

            import Globals, ZODB.FileStorage, ZODB.DemoStorage

            name='%s/Data.fs' % Globals.data_dir

Amos Latteier's avatar
Amos Latteier committed
380 381
        base=ZODB.FileStorage.FileStorage(name, read_only=1)
        Storage=ZODB.DemoStorage.DemoStorage("Demo (%s)" % name, base)
Jim Fulton's avatar
Jim Fulton committed
382 383 384 385 386 387 388 389 390

        - 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
Amos Latteier's avatar
Amos Latteier committed
391 392 393
      synchronizing the connection with saved data.  This is
      useful for interactive connections to see database changes
      made by other threads.
Jim Fulton's avatar
Jim Fulton committed
394 395 396 397 398 399 400 401 402

        - 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.
Jim Fulton's avatar
Jim Fulton committed
403

404 405 406
        - Cookie support was added to the ZServer FTP server to make
          FTP access compatible with cookie-based authentication.

Jim Fulton's avatar
Jim Fulton committed
407
        - ZServer now includes a NT Service, 'ZServer.py' This service
Amos Latteier's avatar
Amos Latteier committed
408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428
      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.
        
Jim Fulton's avatar
Jim Fulton committed
429 430 431 432 433
        - 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.

Amos Latteier's avatar
Amos Latteier committed
434 435
    - index_html is not longer used automatically for XML-RPC
      requests.
Jim Fulton's avatar
Jim Fulton committed
436 437 438 439 440 441 442 443 444 445

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

Jim Fulton's avatar
Jim Fulton committed
446 447
      Bugs fixed

Jim Fulton's avatar
Jim Fulton committed
448 449 450
        - Got rid of some DOS line-endings in xmlrpclib.py that caused
          install-time module compilation to fail.

451 452
        - Fixed DOS line-endings in medusa/max_sockets.py

Jim Fulton's avatar
Jim Fulton committed
453 454
        - Fixed a NameError (missing TupleType) definition in
          the export/import (copy/paste) machinery.
Jim Fulton's avatar
Jim Fulton committed
455

Jim Fulton's avatar
Jim Fulton committed
456 457 458 459 460
        - 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
Jim Fulton's avatar
Jim Fulton committed
461 462 463
          stops accepting new connections when the number of active
          connections exceeds a threshold.

Amos Latteier's avatar
Amos Latteier committed
464 465 466
    - Accessing cached results of items() (or values() or keys())
      calls on BTrees caused core dumps if affected elements were
      deleted.  For example::
Jim Fulton's avatar
Jim Fulton committed
467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544

             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.
545 546 547
          
        - Fixed ZServer HTTP zombie killing. Now hung connections are
          successfully closed.
Jim Fulton's avatar
Jim Fulton committed
548

Jim Fulton's avatar
Jim Fulton committed
549
        - A bug in handling the case when a file was created on open
Amos Latteier's avatar
Amos Latteier committed
550
      without the create flag caused weird errors on windows.
Jim Fulton's avatar
Jim Fulton committed
551 552 553 554 555 556 557 558 559 560 561 562 563

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

Jim Fulton's avatar
Jim Fulton committed
564 565 566
        - Factories that were also ZClass methods didn't get
          unregistered properly when they were deleted.

Jim Fulton's avatar
Jim Fulton committed
567 568 569 570 571 572 573 574 575 576 577
    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
578 579 580 581 582
          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::
Jim Fulton's avatar
Jim Fulton committed
583 584 585 586 587

            python utilities/bbb.py -f var/Data.fs var/Data.bbb

          Note that version data are not converted.

Amos Latteier's avatar
Amos Latteier committed
588 589 590 591 592 593 594
        - 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.  

Jim Fulton's avatar
Jim Fulton committed
595 596 597 598
      Bugs fixed

        - The cache management screens were broken

Amos Latteier's avatar
Amos Latteier committed
599 600 601 602 603
        - 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.   

Jim Fulton's avatar
Jim Fulton committed
604 605 606 607
        - 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.

Jim Fulton's avatar
Jim Fulton committed
608 609 610 611
        - 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.

Jim Fulton's avatar
Jim Fulton committed
612 613 614 615
        - 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.

616 617 618 619
        - 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::
Jim Fulton's avatar
Jim Fulton committed
620

621
            %(var expr="x+1")s
Jim Fulton's avatar
Jim Fulton committed
622

623 624 625
          Note that, because of this change, the var tag name must
          also be supplied when a variable named 'var' is inserted, as
          in::
Jim Fulton's avatar
Jim Fulton committed
626

627
            %(var var)s
Jim Fulton's avatar
Jim Fulton committed
628

Jim Fulton's avatar
Whew.  
Jim Fulton committed
629 630 631 632 633
    Zope 2.0 alpha 2

      Features added

        - There is a new optional EXPERIMENTAL HTML DTML syntax.  As
634 635
          an alternative to SSI syntax, you can now use ordinary HTML
          syntax, as in:
Jim Fulton's avatar
Whew.  
Jim Fulton committed
636

637 638 639
            <dtml-in objectIds>
              <dtml-var sequence-item>
            </dtml-in>
Jim Fulton's avatar
Whew.  
Jim Fulton committed
640

641 642
          You can also use an entity-reference syntax for the var tag
          as an alternative to the tag syntax.  For example::
Jim Fulton's avatar
Whew.  
Jim Fulton committed
643

644
            &dtml-foo;
Jim Fulton's avatar
Whew.  
Jim Fulton committed
645 646 647

          is equivalent to::

648
            <dtml-var foo>
Jim Fulton's avatar
Whew.  
Jim Fulton committed
649

650
          and is especially handy in attributes::
Jim Fulton's avatar
Whew.  
Jim Fulton committed
651

652
            <a href="&dtml-foo;">
Jim Fulton's avatar
Whew.  
Jim Fulton committed
653

654 655 656
          Both the new syntax and the SSI syntax are allowed in the
          same document.  In fact, if you were really twisted, you
          could:
Jim Fulton's avatar
Whew.  
Jim Fulton committed
657

658 659 660
            <dtml-in objectIds>
              <dtml-var sequence-item>
            <!--#/in-->
Jim Fulton's avatar
Whew.  
Jim Fulton committed
661

662
          IMPORTANT
Jim Fulton's avatar
Whew.  
Jim Fulton committed
663

664 665 666
             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.
Jim Fulton's avatar
Whew.  
Jim Fulton committed
667

668
        - reverse options were added to the in and tree tags.
Jim Fulton's avatar
Whew.  
Jim Fulton committed
669 670 671 672 673 674 675 676 677 678

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

679
        - Added support for the Medusa monitor server.
Jim Fulton's avatar
Whew.  
Jim Fulton committed
680

681
        - There's a first cut at a ZServer NT service. This is Zope on
Jim Fulton's avatar
Whew.  
Jim Fulton committed
682 683
          NT's answer to zdeamon.py

684 685
          It actually seems to work, though there's still a fair
          amount missing.
Jim Fulton's avatar
Whew.  
Jim Fulton committed
686

687
        - The error messages for missing or miss-formatted access
Jim Fulton's avatar
Whew.  
Jim Fulton committed
688 689 690 691 692 693
          files was improved.

        - A new debugging method, manage_debug, has been added to
          Control_Panel to monitor the Zope process for possible
          memory leaks.

694
        - The name, 'this', has been added to the namespace available
Jim Fulton's avatar
Whew.  
Jim Fulton committed
695 696 697 698 699
          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.

700
        - The title of the main Zope management interface now includes
Jim Fulton's avatar
Whew.  
Jim Fulton committed
701 702
          a full URL.

703
        - Folders that have (or acquire) index_html methods now have
Jim Fulton's avatar
Whew.  
Jim Fulton committed
704 705
          view tabs for viewing index_html.

706
        - On browsers that support Java Script, the "Add" button is
Jim Fulton's avatar
Whew.  
Jim Fulton committed
707 708 709
          ommitted and the add form is visited as soon as a selection
          is made from the select list.

710
        - The python-pickle format used to export data from ZODB 2 was
Jim Fulton's avatar
Whew.  
Jim Fulton committed
711 712 713 714 715 716 717 718
          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.

719
        - There was a serious memory leak introduced when a security
Jim Fulton's avatar
Whew.  
Jim Fulton committed
720 721
          bug was fixed in 1.10.0.

722
        - There was a memory leak in ZODB 3 persistent objects, which
Jim Fulton's avatar
Whew.  
Jim Fulton committed
723 724
          now manage object IDs as persistent objects.

725 726
        - The Python 1.5.2 cgi module didn't work with Zope.  
          Zope now includes its own fixed version of the module.
Jim Fulton's avatar
Whew.  
Jim Fulton committed
727

728
          This bug caused FTP, Netscape Publishing and WebDAV to fail.
Jim Fulton's avatar
Jim Fulton committed
729

730
        - A bug in transaction management caused Gadfly requests to
Jim Fulton's avatar
Whew.  
Jim Fulton committed
731 732
          fail. Other database adapters need to be updated.

733 734 735 736
        - 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
Jim Fulton's avatar
Whew.  
Jim Fulton committed
737 738
          don't always spell their HTTP headers correctly.

739
        - A number of classes didn't get there reference-counts
Jim Fulton's avatar
Whew.  
Jim Fulton committed
740 741 742
          reduced when instances were destroyed.  This confused the
          new memory allocation monitoring tool.

743
        - New user folders had no effect because they did not get
Jim Fulton's avatar
Whew.  
Jim Fulton committed
744 745
          properly registered in their containing folders.

746
        - Changes made to factory objects were lost when a process was
Jim Fulton's avatar
Whew.  
Jim Fulton committed
747
          restarted. 
748 749
          
        - Clicking on the 'Help' caused the help information to be
Jim Fulton's avatar
Whew.  
Jim Fulton committed
750 751 752
          displayed in the current frame, rather than in a new
          window. 

753
        - Shutting down Zope attempted to save the database index even
Jim Fulton's avatar
Whew.  
Jim Fulton committed
754 755
          when Zope was run in read-only mode.

756
        - A number of fixes were made in the Date-Time support.
Jim Fulton's avatar
Whew.  
Jim Fulton committed
757

758
        - Batch processing in the in tag sometimes failed.
Jim Fulton's avatar
Whew.  
Jim Fulton committed
759 760

        - Sites with custom roles in the top-level application
761 762 763
          object did not pick up the new 'Owner' role.
          
        - Content-type detection had problems in DTML documents and
Jim Fulton's avatar
Whew.  
Jim Fulton committed
764 765
          methods. 

766
        - Some cookie expiration dates used 2-digit years.
Jim Fulton's avatar
Whew.  
Jim Fulton committed
767

768
        - Error values for errors raised by ExternalMethods were lost.
Jim Fulton's avatar
Whew.  
Jim Fulton committed
769

770
        - Values returned bu absolute_url were not URL quoted.
Jim Fulton's avatar
Whew.  
Jim Fulton committed
771

772
        - Extra newlines were prepended to documents when they were
Jim Fulton's avatar
Whew.  
Jim Fulton committed
773 774 775 776 777
          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.
778 779
          
        - ExternalMethods are now automatically reloaded when running
Jim Fulton's avatar
Whew.  
Jim Fulton committed
780 781
          in debug mode.

782
        - Search interfaces generated by the search interface wizard
Jim Fulton's avatar
Whew.  
Jim Fulton committed
783 784 785 786 787
          no longer include a "Cancel" button.

        - Errors were masked by a bug in handling ZODB3 transaction
          aborts. 

788
        - The ZODB 3 cache manager deactivated objects too quickly,
Jim Fulton's avatar
Whew.  
Jim Fulton committed
789 790
          causing performance to degrade.

791
        - BASEx request variables were not computed correctly when
Jim Fulton's avatar
Whew.  
Jim Fulton committed
792 793 794 795 796 797
          SCRIPT_NAME was not empty.

        - The URLx variables couldn't be computed in some cases when
          using ZServer.


Jim Fulton's avatar
Jim Fulton committed
798
    Zope 2.0 alpha 1
Jim Fulton's avatar
Jim Fulton committed
799

Jim Fulton's avatar
Jim Fulton committed
800
      BACKWARD INCOMPATIBILITY
Jim Fulton's avatar
Jim Fulton committed
801 802 803

        - A change was made to the way ZClasses are constructed.

804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820
          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.
Jim Fulton's avatar
Jim Fulton committed
821 822 823

      Features Added

Jim Fulton's avatar
Jim Fulton committed
824 825
        - Integration of ZODB 3

Jim Fulton's avatar
Jim Fulton committed
826 827 828 829 830 831 832 833 834 835
        - 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.

Jim Fulton's avatar
Jim Fulton committed
836 837
        - Instance homes can now have local Products directories.

Jim Fulton's avatar
Whew.  
Jim Fulton committed
838 839 840 841 842 843 844
        - 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 
845
          to exit and not be restarted.
Jim Fulton's avatar
Whew.  
Jim Fulton committed
846 847 848 849 850 851 852 853 854 855

        - 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
856
          subclassable by ZClasses.
Jim Fulton's avatar
Whew.  
Jim Fulton committed
857

858
        - ZClass property sheets can now have read and modify
Jim Fulton's avatar
Whew.  
Jim Fulton committed
859 860
          permissions.

861 862 863 864
        - 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.
Jim Fulton's avatar
Whew.  
Jim Fulton committed
865 866 867

        - The ZClass basic property sheet now shows base classes.

868
        - Changed the string representation of HTTPRequest so that
Jim Fulton's avatar
Whew.  
Jim Fulton committed
869 870 871 872
          <!--#var REQUEST--> is a lot friendlier.
 
        - Added a Zope debugging short cut.  

873
          Now::
Jim Fulton's avatar
Whew.  
Jim Fulton committed
874

875 876
            import ZPublisher
            ZPublisher.Zope(path)
Jim Fulton's avatar
Whew.  
Jim Fulton committed
877

878
          is a shortcut for::
Jim Fulton's avatar
Whew.  
Jim Fulton committed
879

880 881
            import ZPublisher
            ZPublisher.test('Zope', path)
Jim Fulton's avatar
Whew.  
Jim Fulton committed
882

Jim Fulton's avatar
Jim Fulton committed
883 884
      Bugs Fixed

Jim Fulton's avatar
Whew.  
Jim Fulton committed
885 886 887 888
        - ZClass permission setting interfaces didn't show inherited
          permissions.

        - A number of bugs arising from attempts to set 
889
          caching headers were fixed.
Jim Fulton's avatar
Whew.  
Jim Fulton committed
890 891 892 893

        - Some default permissions were not set correctly.

        - The unused non-functioning resource-consuming Scheduler has
894
          been removed.
Jim Fulton's avatar
Whew.  
Jim Fulton committed
895 896 897 898 899 900

        - Access was given to objects without roles even if access
          would be denied to the container.

        - Fix submitted by Martijn Pieters:

901 902 903
          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.
Jim Fulton's avatar
Whew.  
Jim Fulton committed
904 905 906 907 908 909 910 911 912 913 914 915 916 917 918

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

919 920
        - The propertysheets property sheet should only allow addition of
          property sheets.
Jim Fulton's avatar
Jim Fulton committed
921

Jim Fulton's avatar
Whew.  
Jim Fulton committed
922
    Zope 1.11.0 pr1, which should have been named Zope 2.0.0 alpha 0.
Amos Latteier's avatar
Amos Latteier committed
923 924 925
      
      Lots has changed in this release. The major news is ZClasses and WebDAV.
      
Jim Fulton's avatar
Jim Fulton committed
926 927
      Features Added

Amos Latteier's avatar
Amos Latteier committed
928 929 930 931
        - Added WebDAV support. See http://webdav.zope.org/ for details.

        - Added Z Classes. Documentation is forthcoming.

Jim Fulton's avatar
Jim Fulton committed
932 933 934
          ZClasses might be viewed as somewhat experimental, although
          we're using them aggressively for internal projects.

Amos Latteier's avatar
Amos Latteier committed
935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954
        - 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.

955 956 957 958 959
        - 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.
960 961 962

        - A new 'range' function added the the '_' DTML variable. 

Jim Fulton's avatar
Jim Fulton committed
963 964
        - A new 'utilities' directory is included in the distribution.

Jim Fulton's avatar
Jim Fulton committed
965 966
        - A new flag attribute, 'only', of the DTML 'with' tag
          prunes the DTML namespace to only the namespace created
Amos Latteier's avatar
Amos Latteier committed
967
          with the with tag.
Jim Fulton's avatar
Jim Fulton committed
968

's avatar
committed
969 970
        - Added contributed support for encoding options in the SendMail
          tag and MailHost send method.
Amos Latteier's avatar
Amos Latteier committed
971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014
          
        - 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.
's avatar
committed
1015

Jim Fulton's avatar
Jim Fulton committed
1016 1017
      Bugs Fixed

Amos Latteier's avatar
Amos Latteier committed
1018 1019
        - Added small fixes to ZopeHTTPServer in anticipation of DAV.

Jim Fulton's avatar
Jim Fulton committed
1020 1021
        - Construction, upload, and edit methods did not consistently
          support either string or file data.  This caused really weird
's avatar
committed
1022
          behavior when file upload was used with out includeing the 
1023
          ':string' suffix in the argument name when doing a file upload.
Jim Fulton's avatar
Jim Fulton committed
1024 1025 1026 1027 1028 1029 1030 1031

          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.

Jim Fulton's avatar
Jim Fulton committed
1032 1033 1034 1035 1036 1037
        - 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.

's avatar
committed
1038 1039 1040
        - Fixed registration of MailHost settings and incorrect default
          quoted-printable encoding of message bodies.

Amos Latteier's avatar
Amos Latteier committed
1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063
        - 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.

1064
        - Fixed a logic bug in security validation that allowed access to
Jim Fulton's avatar
Jim Fulton committed
1065 1066 1067
          unacquired objects that didn't have __roles__ even if the
          containing object was protected.

Jim Fulton's avatar
Jim Fulton committed
1068
    Zope  1.10.2
's avatar
committed
1069 1070 1071 1072 1073 1074

      Bugs Fixed

        - Fixed a permission problem with DTMLMethod objects that caused
          errors when attempting to commit permission changes.

Jim Fulton's avatar
Jim Fulton committed
1075
        - Factories could not determine the available methods
Amos Latteier's avatar
Amos Latteier committed
1076
          when they were being edited, making them uneditable.
's avatar
committed
1077

Jim Fulton's avatar
Jim Fulton committed
1078 1079 1080 1081 1082 1083 1084 1085 1086 1087
    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.

's avatar
committed
1088 1089 1090 1091
    Zope  1.10.0

      New Features

's avatar
committed
1092 1093
        - Added Import/Export interfaces to Folders.

's avatar
committed
1094 1095
      Bugs Fixed

1096 1097 1098
        - Fixed a bug in ZopeHTTPServer which caused it to fail on POST
          requests without content-type headers.

's avatar
committed
1099 1100 1101 1102 1103 1104 1105
        - 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.

1106
        - Fixed a permission bug left from a change to the Find support.
's avatar
committed
1107 1108

        - Fixed misc typos in docstrings and docs.
's avatar
committed
1109

Jim Fulton's avatar
Jim Fulton committed
1110 1111 1112
        - Fixed a bug that kept objects from being freed from the cache!
          Basically, there was never a check for inactive objects.

1113
        - MailHost objects didn't do appropriate CRLF conversion or
's avatar
committed
1114 1115
          recognize 4xx server responses.

's avatar
committed
1116
    Zope  1.10.0 pr1
's avatar
committed
1117 1118 1119

      New Features

Jim Fulton's avatar
Jim Fulton committed
1120 1121 1122
        - Documents generated by the search interface wizard
          no longer use tab characters.

Jim Fulton's avatar
Jim Fulton committed
1123 1124 1125 1126
        - Added a -s option to ZopeHTTPServer.  This is useful
          for emulating older sites when generating screen shots
          for creating or updating documentation.

1127 1128
        - Default bobobase now includes a Zope button along with a link
          to the Zope site. This satisfies the ZPL attribution requirement.
1129
          The button is created by a new builtin method
1130 1131
          'ZopeAttributionButton'. Also, both the source and the binary
          distributions now have the same default bobobase.
1132 1133 1134 1135 1136

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

Jim Fulton's avatar
Jim Fulton committed
1138 1139 1140
        - The ThreadLock module has been changed to reflect changes
          in the Python API in Python 1.5.2.

Jim Fulton's avatar
Jim Fulton committed
1141 1142 1143
        - The '_' variable in DTML now has the random module
          as an attribute and DateTime.DateTime as the attribute DateTime.

's avatar
committed
1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167
        - 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.

1168
        - GIF and PNG Images now figure out their own dimensions when
Jim Fulton's avatar
Jim Fulton committed
1169 1170
          uploaded. Image height and width properties are now editable.

's avatar
committed
1171 1172 1173
        - Images now generate themselves as html IMG tags, using an absolute
          url and correct height and width tags if possible.

Jim Fulton's avatar
Jim Fulton committed
1174 1175 1176
        - There is a new form input type, boolean, for inputing boolean
          data.

1177
        - Added a read_only option to the SimpleDB.MultipleRevision and 
Jim Fulton's avatar
Jim Fulton committed
1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188
          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.

1189
        - Added a database_quota option to the SimpleDB.MultipleRevision and 
Jim Fulton's avatar
Jim Fulton committed
1190 1191 1192 1193 1194 1195
          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.

1196
        - Added an environment variable, ZOPE_DATABASE_QUOTA, used by the
Jim Fulton's avatar
Jim Fulton committed
1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207
          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. 

1208 1209 1210 1211 1212
        - 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.

's avatar
committed
1213 1214 1215 1216 1217
      Bugs Fixed
 
        - Permissions for manage_clone method were wrong, meaning that
          essentially only managers could use it.

's avatar
committed
1218 1219 1220 1221 1222
        - 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.

1223 1224 1225 1226
        - 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.
Jim Fulton's avatar
Jim Fulton committed
1227 1228 1229 1230 1231 1232

          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.

Jim Fulton's avatar
Jim Fulton committed
1233 1234 1235
        - Date strings with years < 31 were not accepted, even
          through the documentation says they should be.

Jim Fulton's avatar
Jim Fulton committed
1236 1237 1238 1239 1240 1241
        - 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.

's avatar
committed
1242 1243 1244
        - Lack of sys.argv in the win32 service version of Zope caused 
          it to raise errors under certain conditions.

's avatar
committed
1245
        - Several HTTP PUT related bugs were fixed.
's avatar
committed
1246

's avatar
committed
1247 1248 1249 1250
        - 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.

's avatar
committed
1251 1252 1253
        - The Find form in the management interface depended on javascript
          to function properly.

's avatar
committed
1254 1255 1256 1257
        - 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.

Jim Fulton's avatar
Jim Fulton committed
1258 1259 1260 1261 1262
        - 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.
's avatar
committed
1263

's avatar
committed
1264
    Zope 1.9.0
Jim Fulton's avatar
Jim Fulton committed
1265

Jim Fulton's avatar
Jim Fulton committed
1266 1267 1268 1269 1270 1271 1272 1273 1274 1275
      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.

Jim Fulton's avatar
Jim Fulton committed
1276 1277 1278 1279 1280 1281 1282 1283 1284
        - 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.
Jim Fulton's avatar
Jim Fulton committed
1285

Jim Fulton's avatar
Jim Fulton committed
1286
      Bugs Fixed
1287 1288 1289 1290
 
        - Development on ZopeHTTPServer has been frozen in anticipation
          of the switch to Medusa. Therefor ZopeHTTPServer still does
          support PUT. Sorry.
Jim Fulton's avatar
Jim Fulton committed
1291 1292 1293

        - ZPublisher.Client used the obsolete rand module.

Jim Fulton's avatar
Jim Fulton committed
1294 1295 1296 1297
        - Errors occuring during product import caused Zope to fail to come
          up.

        - Product version information was not displayed correctly.
Jim Fulton's avatar
Jim Fulton committed
1298

Jim Fulton's avatar
Jim Fulton committed
1299 1300 1301
        - ZGadflyDA cached table meta-data which lead to missleading
          information when browsing databases.

Jim Fulton's avatar
Jim Fulton committed
1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314
    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.

Amos Latteier's avatar
Amos Latteier committed
1315 1316 1317 1318
        - ZopeHTTPServer now sports preliminary support for PUT publishing.
          
        - ZopeHTTPServer now serves from port 9673 by default, not 8080.

's avatar
committed
1319 1320 1321 1322 1323
      Bugs fixed

        - The start.bat file used to start ZopeHTTPServer on win32 was
          misnamed and didn't correctly pass command-line arguments.

's avatar
committed
1324 1325
        - Win32 machines without an existing Python installation had problems
          due to PYTHONPATH bootstrapping.
's avatar
committed
1326

's avatar
committed
1327 1328 1329
        - The included ZopeHTTPServer was failing to start correctly on
          win32 machines that were not connected to the network.

Jim Fulton's avatar
Jim Fulton committed
1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362
    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.

's avatar
committed
1363 1364 1365
        - A bug in pcgi_publisher.py caused file uploads larger than 1 MB
          to fail.

Jim Fulton's avatar
Jim Fulton committed
1366 1367 1368 1369
    Zope 1.9 beta 1

      Bugs fixed:

's avatar
committed
1370
        - pcgi did not build correctly on Solaris 2.6
Jim Fulton's avatar
Jim Fulton committed
1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412

        - 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:
   
1413 1414
           #!/bin/sh
           python serve.py > var/serve.log 2> var/serve.errors &
Jim Fulton's avatar
Jim Fulton committed
1415
   
1416 1417
         Note that this script should be written by the installers
         and use sys.executable.
Jim Fulton's avatar
Jim Fulton committed
1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437

         (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:
   
1438
         - runs make clobber for the extensions
Jim Fulton's avatar
Jim Fulton committed
1439
   
1440
         - runs make clean in pcgi
Jim Fulton's avatar
Jim Fulton committed
1441
   
1442
         - prints an message reminding user to manually remove var
Jim Fulton's avatar
Jim Fulton committed
1443
   
1444
         (brian)
Jim Fulton's avatar
Jim Fulton committed
1445 1446 1447 1448 1449 1450 1451 1452

       - 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