Upgrading from 0.9.x and above to 1.2.3

  Photo comes with an External Method called Upgrade.py.  To upgrade your Photo
  and Photo Folder objects, create an External Method in your Zope root as
  follows.

    Id: upgrade
    Module Name: Photo.Upgrade
    Function Name: upgrade

  When you run this method, all of your Photo and Photo Folder objects will be
  upgraded.  You can then delete the External Method.

Upgrading from Photo 0.8.0 to 0.9.0

  In order to support different image storages (specifically, ExtImage), the way
  in which the original image is stored has changed.  This means Photo objects
  created under version 0.8.0 are not compatible with 0.9.0.  To upgrade, you
  can follow the instructions below on upgrading from Andrew Lahser's Photo
  Product, substituting the following Python Script::

    """Convert 0.8.0 Photo objects to 0.9.0 Photo objects."""

    REQUEST = context.REQUEST

    # Upgrade Photo Folder
    context.manage_addProperty('engine', 'image_engines', 'selection')
    context.manage_addProperty('store', 'image_stores', 'selection')
    context.manage_changeProperties(engine = 'PIL', store = 'Image')

    # Upgrade Photos
    for photo in context.objectItems(['Photo']):
        # Convert old photo object to new.
        photoid = photo[0]
        photo = photo[1]
        context.manage_delObjects([photoid,], REQUEST=REQUEST)
        id = context.manage_addProduct['Photo'].manage_addPhoto(
                 photoid, photo.title, photo.data,
                 store='Image', engine='PIL', REQUEST=REQUEST)
        newphoto = getattr(context, id)

        # Add old properties to new photo.
        for prop in photo.propertyMap():
            try: newphoto.manage_addProperty(prop['id'], None, prop['type'])
            except: pass

        # Assign old property values to new photo.
        propmap = {}
        for id, value in photo.propertyItems():
            propmap[id] = value
        try: newphoto.manage_changeProperties(propmap)
        except: pass

        # Clear new Photo displays.
        displayids = newphoto.displayIds(exclude=None)
        newphoto.manage_delDisplays(displayids)

        # Create old display sizes.
        for display in photo.displayMap(exclude=None):
            id = display['id']
            width = display['width']
            height = display['height']
            newphoto.manage_addDisplay(id, width, height)

    return 'Done.'

Upgrading from Andrew Lahser's Photo Product

  Unfortunately, the new Photo product is now quite a bit different than the old
  Photo product.  Because of this, there is no direct way to upgrade old Photo
  objects.  It would be possible to create a script, but since there are several
  additional options in the new product, it would be better to recreate the
  photos from scratch.

  Since Photo now supports WebDAV/FTP, you can create a Photo Folder, set the
  settings as desired, and transfer the Photos to the Photo Folder.  This will
  create Photo objects with the default settings from your Photo Folder instead
  of creating Zope Image objects that would need to be converted.
